资源简介
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路面裂缝识别69319
- 高灵敏度GPS接收机MATLAB仿真,附捕获
- 基于MATLAB的质点弹道计算与外弹道优
- 阵列天线的matlab仿真
- MATLAB 经典程序源代码大全
- MATLAB小波软阈值去噪代码33473
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
评论
共有 条评论