基于matlab线性分组码实验设计文档格式.docx
《基于matlab线性分组码实验设计文档格式.docx》由会员分享,可在线阅读,更多相关《基于matlab线性分组码实验设计文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
设计(15,11)或(255,247)线性分组码,利用随机生成的二进制序列及BPSK调制方式,比较使用信道编码与未使用信道编码的误比特率曲线
四、实验设备及软件:
PC机一台、Matlab软件
五、
设计方案
(15,11)线性分
该实验系统框图如上图所示,其中信源编码在本实验不做讨论,编号
采用线性分组码编码和译码,编号
为不采用信道编译码,通过这两种方法的对比,得出误码率曲线。
1.线性分组码编码
本实验采用的是(15,11)的线性分组码,线性分组码的编码由监督矩阵和生成矩阵实现,监督矩阵H为(4×
11)的矩阵,由监督方程和(4×
4)的单位矩阵构成,生成矩阵G为(11×
15)的矩阵,由(11×
11)的单位矩阵和监督矩阵的转置矩阵构成。
具体实现方法如下:
将要编码的序列先整形,整为11列
如果序列不能被11整除在后边补0使其能被11整除
将整形后的序列与生成矩阵G相乘即得到编码后的码字
其实现代码如下:
function[n,C]=xxbm(n)
a=randint(1,n);
%生成01随机序列
disp('
编码序列:
'
);
disp(a);
subplot(3,2,1);
stairs(a);
axis([1length(a)-0.51.5])
title('
编码序列'
%判断生成的随机序列个数是否是11的整数倍
iflength(a)/11==fix(length(a)/11)%随机序列个数是11的整数倍,直接编码
b=reshape(a,11,(length(a)/11));
M=b'
;
F=eye(11);
S=[0011;
0101;
0110;
0111;
1001;
1010;
1011;
1100;
1101;
1110;
1111];
K=eye(4);
G=[F,S];
H=[S'
K];
C=rem(M*G,2);
disp('
生成矩阵G:
disp(G);
监督矩阵H:
disp(H);
码字:
disp(C);
else%随机序列个数不是11的整数倍,补0后编码
s1=[a,zeros(1,(fix(length(a)/11)+1)*11-length(a))];
%补0
b=reshape(s1,11,(length(s1)/11));
%监督矩阵
C=rem(M*G,2);
end
subplot(3,2,2);
stairs(C);
axis([1length(C)-0.51.5]);
编码后的码字'
2.BPSK调制
BPSK调制实现方法为:
将0、1序列变为-1、1序列;
将序列与载波相乘,为‘1’时与载波相位相同,为‘-1’时与载波相位相反。
function[fc,fs,datarate,modusignal]=BPSKmodu(bits,datarate)
fc=datarate*2;
fs=fc*8;
modusignal=[];
t=linspace(0,2,16);
carriar=cos(2*pi*t);
bits=bits*2-1;
fori=1:
length(bits)
modusignal=[modusignal,bits(i)*carriar];
subplot(3,2,3);
plot(modusignal);
BPSK调制后的波形'
3.信道加噪
使用awgn函数对调制信号进行加噪,其实现代码如下:
functioncs=channel(modusignal,bits)
cs=awgn(modusignal,1);
subplot(3,2,4);
plot(cs);
相乘后信号频谱'
加噪后的波形'
4.BPSK解调
产生一个与载波频率相同的本地载波,与经信道加噪后的调制信号相乘,得到解调信号。
然后通过低通滤波器滤波器再抽样判决,得出解调后的原始信号。
(要减去滤波器的延时时间t,t=(滤波器长度+1)/2)
functionk=designal(modusignal)
designal=[];
carrier=cos(2*pi*t);
16:
length(modusignal)
designal=[designal,modusignal(i:
i+15).*carrier];
subplot(3,2,5);
plot(designal);
解调后的波形'
loadlppass
L=(length(lppass)+1)/2;
y=filter(lppass,1,designal);
length(y);
ify(i)<
y(i)=-1;
else
y(i)=1;
end
subplot(3,2,6);
plot(y);
axis([Llength(y)+L-1.51.5]);
抽样判决后的波形'
%-----------------------------------
%抽样判决
1:
length(y)/16
k(i)=0;
forj=1:
16
k(i)=k(i)+y((i-1)*16+j);
k(i)=k(i)/16;
ifk(i)<
k(i)=1;
5.信道译码(线性分组码译码)
译码原理:
利用错误图样和伴随式纠错。
本实验所采用的为(15,11)线性分组码,最小汉明距离为3,所以具有纠错1位检错两位的功能。
设一个接收码字矩阵为R,R*H'
=S(模2乘),则S为码字对应的伴随式矩阵如果S=0则说明接受码字无差错;
如果S不为0,查看矩阵S中不为0的那行所在行数,该行即收码字错误所在行i;
将S转置,将不为0的一列与H每一列进行比较,找到H中相同列,该列的列数即为错误所在列;
④由步骤得到错误具体位置,模2加对应的错误图样就可得到正确码字。
functionI=xxym(n,C)
[a,b]=size(C);
S=[0011;
K=eye(4);
H=[S'
A=[000000000000000];
B=eye(15);
E=[A;
B];
%生成错误图样
S=rem(C*H'
2);
Q=H'
m=zeros(1,a);
a
b
ifS(i,:
)==Q(j,:
)%找出出错的位置
m(i)=j;
%数组m记录出错的位置
a%在错误的位置给出提示并纠错
switch(m(i))
case0
没有出现错误!
G(i,:
)=C(i,:
)+E(1,:
case1
注意:
第1位出现一个错误!
已纠错!
)+E(2,:
case2
第2位出现一个错误!
)+E(3,:
case3
第3位出现一个错误!
)+E(4,:
case4
第4位出现一个错误!
)+E(5,:
case5
第5位出现一个错误!
)+E(6,:
case6
第6位出现一个错误!
)+E(7,:
case7
第7位出现一个错误!
)+E(8,:
case8
)+E(9,:
case9
)+E(10,:
case10
)+E(11,:
case11
)+E(12,:
case12
)+E(13,:
case13
)+E(14,:
case14
)+E(15,:
case15
)+E(16,:
G=rem(G,2);
%求出正确的编码
检错并纠错后的码组:
disp(G);
%显示正确的编码
j=1;
whilej<
=11%提取信息位
I(:
j)=G(:
j);
j=j+1;
[m1,n1]=size(I);
I=I'
I=reshape(I,1,m1*n1);
n
C1(i)=I(i);
译出的序列:
disp(C1);
%显示原信息码
六、测试结果及说明:
1.信噪比为1时,结果如图:
2.信噪比为5时,结果如图:
3.信噪比为10时,结果如图:
4.译码时,当检测到误码时,结果如图:
实验结果分析:
由以上实验结果可知,该程序基本完成了线性分组码的编码、调制、加噪、解调、译码(包括检错纠错)等一系列操作。
随着信噪比的降低解调信号错误率越高,由于(15,11)线性分组只能纠正一位错误,对于大于等于2位的错误不能纠正,所以信噪比低低的情况下,会出现教的误码。
需要采取纠错能力更强的信道编码方法进行编码。
七、实验体会:
该实验是综合了matlab编程,信息论与编码的知识,实验中涉及到编码与译码、调制与解调、检错与纠错等内容,对初学者难度较大。
对于实验中的难点,要经过仔细分析思考,反复实验,最终才可能取得理想的效果。
该程序中编码采用生成矩阵才获得码字,所以具有一定的局限性,解调中用到的滤波器由自己设计,由于滤波器的参数对实验结果影响较大,所以滤波器的设计也是非常重要的。
通过实验,让我明白一个道理,理论的学习远远不能满足实际需要,即使课本上的知识掌握了,那也只能通过考试而已,而通过实验设计,自己深入研究以后,才会真正掌握其中的原理,而且重点难点才能理解清楚,也不会轻易忘记。