资源简介
m序列产生与卷积编码的设计实验,用MATLAB进行仿真,代码在压缩包中。
代码片段和文件信息
function demo
input=randi([01][115]);%输入信号
figure
subplot(221);
drawSig(input);
grid on; title(‘Input Code‘);
M=mseq([1 0 0 1]);
subplot(222);
drawSig(M);
grid on; title(‘M Code‘);
input_r=scramble(input);%加扰
subplot(223);
drawSig(input_r);
grid on; title(‘Output Code after scramble‘);
Y=coder(input_r);%进行卷积编码
subplot(224);
drawSig(Y);
grid on; title(‘Output Code after encoding‘);
SNR =5;
S=awgn(YSNR);%经过高斯信道
G = panjue(S);
figure
subplot(221);
drawSig(G);
grid on; title(‘Output Code after Gauss channel‘);
O=decoder(G);%维特比译码
subplot(222);
drawSig(O);
grid on; title(‘Output Code after viterbi decoding‘);
Res=scramble(O);%解扰
subplot(223);
drawSig(Res);
grid on; title(‘Output Code after descramble‘);
% errorrate
end
function errorrate
SNRdb = 5:1:20;
msg = randi([01][1100]);
cycl =50;
ber =zeros(cycllength(SNRdb));
n=length(msg);
for i=1:cycl
for j=1:length(SNRdb)
input_r=scramb(msg);
code = encoding(input_r);
addnoise=awgn(codeSNRdb(j)‘measured‘);
Q = panjue(addnoise);
L=decoder(Q);
Out=scramb(L);
[numberratio] = biterr(msgOut);
ber(ij) = ratio;
end
end
ber=mean(ber);
figure
semilogy(SNRdbber‘B‘)title(‘Error Rate‘);grid on;
xlabel(‘rb/dB‘);ylabel(‘Pe‘);
end
function [seq]=mseq(coef)
% 此函数用来生成m序列
% coef为反馈系数向量
m=length(coef);
len=2^m-1; % 得到最终生成的m序列的长度
backQ=0; % 对应寄存器运算后的值,放在第一个寄存器
seq=zeros(1len); % 给生成的m序列预分配
registers = [1 zeros(1 m-1)]; % 给寄存器分配初始结果
for i=1:len
seq(i)=registers(m);
backQ = mod(sum(coef.*registers) 2); %特定寄存器的值进行异或运算,即相加后模2
registers(2:length(registers)) = registers(1:length(registers)-1); % 移位
registers(1)=backQ; % 把异或的值放在第一个寄存器的位置
end
end
%4级反馈移位寄存器产生16位m序列
function Y=mxulie()
F(100)=0;
a3=1;
a2=0;
a1=0;
a0=0;
for i=1:100
F(i)=a0;
a0=a1;
a1=a2;
a2=a3;
a3=mod((a3+F(i))2);
end
Y=F;
end
function y=encoding(s)
r=[0 0 0];
x=zeros(1length(s)*3); %为编码后的码字分配空间
for i=1:length(s)
x(3*i-2)=mod((s(i))2); %由生成多项式画出编码器得来
x(3*i-1)=mod((s(i)+r(2))2);
x(3*i)=mod((s(i)+r(1)+r(2))2);
r(3)=r(2);
r(2)=r(1); %运算一次后移位
r(1)=s(i);
end
y=x;
end
% 1/33卷积编码
function Y = coder( X )
len=length(X);
T=zeros(1len+3);
F=zeros(1len*3);
for i=4:len+3
T(i)=X(i-3);
end
for i=1:len
F(3*(i-1)+1)=T(i+3);
F(3*(i-1)+2)=xor(T(i+3)T(i+1));
F(3*(i-1)+3)=xor(xor(T(i+3)T(i+2))T(i+1));
end
Y=F;
end
function Y = panjue(X)
n=length(X);
G(n)=0;
for i=1:n
if X(i)>0.5
G(i) =1;
else
G(i) =0;
end
end
Y=G;
end
%1/33维特比卷积解码
function Y = decoder( X )
len=length(X);
Path=zeros(4len/3‘int8‘);%4条幸存路径
Path_t=zeros(4len/3‘int8‘);
Da=0;Db=0;Dc=0;Dd=0;%抵达abcd总汉明距离
Pa=1;Pb=2;Pc=3;Pd=4;%abcd路径指针
T(9)=0;
for i=1:9
T(i)=X(i);
end
%a
tp1=dist(T[0 0
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6809 2019-03-20 20:53 demo.m
相关资源
- 卷积编码译码Matlab仿真程序保证可以
- 利用遗传算法进行图像分割(matlab源
- MATLAB的转子振动计算代码
- MATLAB 2018b windows破解文件
- MATLAB 2018b linux破解文件
- NURBS malab入门程序 实现字母 NURBS
- matlab 实现fastica源代码
- 基于matlab的直接序列扩频通信系统仿
- Bezier曲线_Bezier曲面_Matlab
- matlab车型识别demo
- 基于matlab-GUI简易计算器的设计
- 基于matlab-GUI实时人脸检测系统
- matlab中的db小波
- dwt代码,不用matlab自带的dwt
- 曲线测设程序用MATLAB语言编写
- MATLAB图像倾斜校正
- MATLAB实现马赫带
- 基于matlab的图像增强—空域变换增强
- 基于matlab的线性锐化滤波图像增强并
- MVDR 算法及相关文献
- 数字滤波器的Matlab仿真设计
- 使用matlab画ORBSLAM2运行保存的轨迹文件
- RRT路径规划
- 循环码性能的MATLAB
- GS算法的MATLAB代码
- SINS捷联惯导解算程序
- MATLAB观测器
- 直线阵和圆阵数字波束形成MatlAB程序
- 模拟电压波动与闪变的Matlab文件
- 粒子滤波算法 matlab
评论
共有 条评论