当前位置:文档之家› 基于matlab线性分组码实验设计

基于matlab线性分组码实验设计

重庆交通大学信息论与编码综合设计实验报告班级:_________________ 级 ______ 班姓名:_____________________________ 学号:_____________________________ 实验项目名称:线性分组码编译码实验实验项目性质: _______ 设计性实验_________ 实验所属课程:信息论与编码理论实验室(中心):___ 网络实验中心________ 指导教师: _________________________________ 实验完成时间: __________ 年 _____ 月 _____ 日一、设计题目线性分组码编译码实验二、实验目的:1.掌握线性分组码的编码原理、编码步骤和译码方法2.熟悉matlab软件的基本操作,学会用matlab软件进行线性分组码的编码和译码三、实验主要内容及要求:设计(15,11)或(255, 247)线性分组码,利用随机生成的二进制序列及BPSK调制方式,比较使用信道编码与未使用信道编码的误比特率曲线四、实验设备及软件:PC机一台、Matlab软件该实验系统框图如上图所示,其中信源编码在本实验不做讨论,编号① 采用线性分组码编码和译码,编号②为不采用信道编译码,通过这两种方法的对比,得出误码率曲线。

1.线性分组码编码本实验采用的是 (15,11)的线性分组码,线性分组码的编码由监督矩阵和生成矩阵实现,监督矩阵H为(4X11 )的矩阵,由监督方程和(4X4) 的单位矩阵构成,生成矩阵G为(11X15)的矩阵,由(11X11)的单位矩阵和监督矩阵的转置矩阵构成。

具体实现方法如下:①将要编码的序列先整形,整为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([1 length(a) -0.5 1.5])title(' 编码序列');%判断生成的随机序列个数是否是11 的整数倍iflength(a)/11==fix(length(a)/11)% 随机序列个数是11 的整数倍,直接编码b=reshape(a,11,(length(a)/11));M=b';F=eye(11);S=[0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 1;1 0 1 0;1 0 1 1;11 0 0;1 1 0 1;1 1 1 0;1 1 1 1];K=eye(4);G=[F,S];H=[S',K];C=rem(M*G,2);disp(' 生成矩阵G:'); disp(G);disp(' 监督矩阵H:');disp(H);disp(' 码字:');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));M=b';F=eye(11);S=[0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1];K=eye(4);G=[F,S];H=[S',K]; % 督矩阵C=rem(M*G,2) ;disp(' 生成矩阵G:'); disp(G);disp(' 监督矩阵H:');disp(H);disp(' 码字:'); disp(C);endsubplot(3,2,2);stairs(C);axis([1 length(C) -0.5 1.5]);title(' 编码后的码字');2.BPSK调希9BPSK调制实现方法为:①将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;for i=1:length(bits) modusignal=[modusignal,bits(i)*carriar];endsubplot(3,2,3);plot(modusignal);title('BPSK 调制后的波形');3.信道加噪使用awgn函数对调制信号进行加噪,其实现代码如下:function cs=channel(modusignal,bits)cs=awgn(modusignal,1);subplot(3,2,4);plot(cs);title(' 相乘后信号频谱');title(' 加噪后的波形');4.BPSKS 调产生一个与载波频率相同的本地载波,与经信道加噪后的调制信号相乘,得到解调信号。

然后通过低通滤波器滤波器再抽样判决,得出解调后的原始信号。

(要减去滤波器的延时时间t ,t= (滤波器长度+1) /2 )其实现代码如下:function k=designal(modusignal)designal=[];t=linspace(0,2,16);carrier=cos(2*pi*t);for i=1:16:length(modusignal)designal=[designal,modusignal(i:i+15).*carrier]; endsubplot(3,2,5);plot(designal);title(' 解调后的波形');load lppassL=(length(lppass)+1)/2;y=filter(lppass,1,designal);for i=1:length(y);if y(i)<0y(i)=-1;elsey(i)=1;endendsubplot(3,2,6);plot(y);axis([L length(y)+L -1.5 1.5]);title(' 抽样判决后的波形');% -------------------------%抽样判决for i=1:1:length(y)/16k(i)=0;for j=1:16k(i)=k(i)+y((i-1)*16+j);endk(i)=k(i)/16;if k(i)<0k(i)=0;elsek(i)=1;endend5.信道译码(线性分组码译码) 译码原理:利用错误图样和伴随式纠错。

本实验所采用的为( 15,11 )线性分组码,最小汉明距离为3,所以具有纠错 1 位检错两位的功能。

设一个接收码字矩阵为R,R*H'=S (模 2 乘),则S 为码字对应的伴随式矩阵如果S=0则说明接受码字无差错;如果S不为0,查看矩阵S中不为0的那行所在行数,该行即收码字错误所在行i ;将S转置,将不为0的一列与H每一列进行比较,找到H中相同列,该列的列数即为错误所在列;④由步骤得到错误具体位置,模 2 加对应的错误图样就可得到正确码字。

function I=xxym(n,C)[a,b]=size(C);S=[0 0 1 1;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1];K=eye(4);H=[S',K];A=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];B=eye(15);E=[A;B]; % 生成错误图样S=rem(C*H',2);Q=H'; m=zeros(1,a); for i=1:afor j=1:bifS(i,:)==Q(j,:) %m(i)=j; %endendendfor i=1:a %switch(m(i))case 0找出出错的位置数组m记录出错的位置disp(' 没有出现错误!');G(i,:)=C(i,:)+E(1,:);case 1disp(' 注意:第 1 位出现一个错误!已纠错!');G(i,:)=C(i,:)+E(2,:);case 2在错误的位置给出提示并纠错disp(' 注意:第G(i,:)=C(i,:)+E(3,:); case 3disp(' 注意:第G(i,:)=C(i,:)+E(4,:); case 4disp(' 注意:第G(i,:)=C(i,:)+E(5,:); case 5disp(' 注意:第G(i,:)=C(i,:)+E(6,:); case 6disp(' 注意:第G(i,:)=C(i,:)+E(7,:); case 7disp(' 注意:第G(i,:)=C(i,:)+E(8,:); case 8disp(' 注意:第G(i,:)=C(i,:)+E(9,:); case 9disp(' 注意:第G(i,:)=C(i,:)+E(10,:); case 10disp(' 注意:第G(i,:)=C(i,:)+E(11,:); case 11disp(' 注意:第位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!'); 位出现一个错误!已纠错!');G(i,:)=C(i,:)+E(12, :); 2 3 4 5 6 7 7 7 7 7case 12disp(' 注意:第7 位出现一个错误!已纠错!');G(i,:)=C(i,:)+E(13,:);case 13disp(' 注意:第7 位出现一个错误!已纠错!');G(i,:)=C(i,:)+E(14,:);case 14disp(' 注意:第7 位出现一个错误!已纠错!');G(i,:)=C(i,:)+E(15,:);case 15disp(' 注意:第7 位出现一个错误!已纠错!');G(i,:)=C(i,:)+E(16,:);endendG=rem(G,2); % 求出正确的编码disp(' 检错并纠错后的码组:');disp(G); % 显示正确的编码j=1;while j<=11 % 提取信息位I(:,j)=G(:,j);j=j+1;end [m1,n1]=size(I);I=I';I=reshape(I,1,m1*n1);for i=1:nC1(i)=I(i);enddisp(' 译出的序列:');六、测试结果及说明:1.信噪比为1时,结果如图:编码序列1.5 --- ------ - ----- ■----- ■------1 - ----------------0.5 -0 — ---------------------------------0.5 ------------------------------------2 4 6 8 10解调后的波形编码后的码字1.5 ---------- ■---------- ■-----------1 ■ --------- ------------------- ■0.5,0 —I ------------------------ I—-0.5 -------------------------------------5 10 155-50 100 200 300disp(C1);显示原信息码2.信噪比为5时,结果如图:编码序列编码后的码字5-5加噪后的波形解调后的波形0 100 200 3001-1抽样判决后的波形50 100 150 200BPSK调制后的波形加噪后的波形3.信噪比为10时,结果如图:编码序列5 10 15加噪后的波形解调后的波形50 100 150 2004.译码时,当检测到误码时,结果如图:0 :L 0 0110]00 1I1>5 £=[ <1 1 L ] Q]1Q]a0 I J1]]C =□) 1 ) Q I]0]00 I J1iI皿吓血口空总:裏4忆狀映r■能區!己虬褚!0 1 1 0 0110]00 1111o i i a i I]0]0i -□l L Q a110]D Q实验结果分析:由以上实验结果可知,该程序基本完成了线性分组码的编码、调制、加噪、解调、译码(包括检错纠错)等一系列操作。

相关主题