实验6BCH循环码的编码与译码一、实验内容用VC或Matlab软件编写循环BCH码的编码与译码程序。利用程序对教科书的例题做一个测试。二、实验环境1.计算机2.Windows2000或以上3.MicrosoftVisualC++6.0或以上4.Matlab6.0或以上三、实验目的1.通过BCH循环码的编码与译码程序的编写,彻底了解并掌握循环BCH的编码与译码原理2.通过循环BCH码的编码与译码程序的编写,提高编程能力。四、实验要求1.提前预习实验,认真阅读实验原理以及相应的参考书。2.对不同信道的进行误码率分析。特别是对称信道,画出误码性能图。即信道误码率与循环汉明码之间的关系。3.认真填写实验报告。五、实验原理1.循环BCH的编码与译码原理(略)2.循环BCH的程序实现。六、实验步骤bch_en_decode.m文件functionbch_en_decode()code=bch155code=code+randerr(5,15,1:3);code=rem(code,2);code=gf(code)%随机产生1-3位错误decode=debch155(code)endfunctiondecode=debch155(code)code=gf(code);M=4;code=gf(code.x,M);[m,n]=size(code);decode=[];code1=[];fori=1:m;code1=code(i,:);M=code1.m;T2=6;N=15;S=code1*((gf(2,M,code1.prim_poly)).^([N-1:-1:0]'*([1:T2])));LambdaX=gf([1zeros(1,T2)],M,code1.prim_poly);Tx=[01zeros(1,T2-1)];L=0;fork=1:T2;LambdaXTemp=LambdaX;Delta=S(k)-LambdaXTemp(1+[1:L])*(S(k-[1:L]))';ifDelta.x;LambdaX=LambdaXTemp-Delta*Tx;if2*Lk;L=k-L;Tx=LambdaXTemp/Delta;end;end;Tx=[0Tx(1:T2)];end;LambdaXValue=LambdaX.x;LambdaX=gf(LambdaXValue(1:max(find(LambdaXValue))),M,code1.prim_poly);errLoc_int=roots(LambdaX);errLoc=log(errLoc_int);fori=1:length(errLoc);errorMag=1;code1(N-errLoc(i))=code1(N-errLoc(i))-errorMag;end;decode=[decode;code1];end;ccode=gf(decode.x);decoded=ccode(:,1:5);endfunction[yout]=bch155(x)%定义函数k=5;%信息码位,BCH(15,5)ifnargin1x2=randint(5,k);n=5;msg=x2%判断输入信息,若未输入,系统自动产生5组信息码,并显示出信息位elseifrem(length(x),k)==0;n=length(x)/k;x2=[];%判断msg是否为K的整数倍,并把输入码员分组fori=0:n-1x2=[x2;x(i*k+1)x(i*k+2)x(i*k+3)x(i*k+4)x(i*k+5)];endifrem(length(x),k)0%把输入码员补零并分组x=[x,zeros(size(1:k-rem(length(x),k)))];n=length(x)/k;x2=[];fori=0:n-1x2=[x2;x(i*k+1)x(i*k+2)x(i*k+3)x(i*k+4)x(i*k+5)];endendendik=[eye(5)zeros(5,10)];%输入信息码扩展x3=x2*ik;yout=[];fori=1:ng=[10100110111];[w,yo]=deconv(x3(i,:),g);%产生余式yo=abs(rem(yo,2));yout=[yout;yo];endyout=yout+x3;%产生信息码end运行结果:msg=1101001101010001110100100code=110101100100011011011100001010010001111010110111010110010001001000111101011code=GF(2)array.Arrayelements=110101010100011011111100001010000001111000110110010111010001001100111101011decode=GF(2^4)array.Primitivepolynomial=D^4+D+1(19decimal)Arrayelements=110101100100011011011100001010010001111010110111010110010001001000111101011