1、信道编码姓 名:郭宇琦 学 号:xxx2009xxx一、 实验目的1. 复习巩固 BCH 码编码译码知识。2. 使用 matlab 进行实践编写 BCH,了解实际应用中 BCH 的编码译码过程。3. 结合实践验证所学 BCH 码知识。二、 实验原理BCH 码是用于校正多个随机错误的多级、循环、错误校正、变长数字编码,是循环码的子类。本原 BCH 码编码原理如下:1. 确定 n、m、t.2. 用函数构造扩域 ,q=2 取二进制,GF()mqGF(2)m3. 取本原元 ,根据纠错能力 t,确定连续根 。通32t, , , ,过逐个验证每个元素来找出每一个根的全部共轭根系。根据计算最小多项式。-12
2、42()-()-()kMxxx4. 所有非共轭根系的最小多项式乘积得到生成多项式 ()gx5. 利用系统码编码方程 ,进行编码。- -()()=()+RemnknkgxCxBCH 码译码方法主要有 Peterson 译码法和 Berlekamp 迭代译码法等,其中 Peterson 译码方法如下:1. 计算伴随式。已知接受向量 ,则()x(),i=1,2.iiSt2求解错误位置。引入错误位置多项式,将求解错误位置的问题转化为求解线性方程组的问题1-21+22122.=s.s.eeeeeeess3用 Peterson 译码方法译码,解出错误位置多项式系数和错误图样,得到估值码字。(1).假设 e
3、=t,计算 S 行列式 M 的值。M=0 则降阶,e=e-1,同样计算直到 M0.(2)将上面得到的 2t 个连续根代入试根,求上述方程组解。取倒数即为错误位置。由此写出错误图样。(3)求出译码。每一步具体的实现方法,详见程序源代码注释。三、 程序框图编码框图输入码长度 n 和纠错能力 t求 m , 判断能否生成该码N O生成扩域 G F ( 2 m )找本原元 a找 2 t 个连续根和其共轭根系计算最小多项式计算生成多项式g ( x )得到信息序列通过译码方程进行译码输出码字显示输出码字n,t输入信息序列Y E S结束过信道框图发送码字 信道 ( 高斯白 / 理想 ) 接收码字译码框图四、
4、实验结果分析结果截图:上面是较高信噪比时 127 位 BCH 正确译码下面是较低信噪比时 127 为 BCH 错误译码结果框内容(加粗部分是手动输入内容,下划线是结果重点):-简易 BCH 编码译码系统-输入码长 n=128错误:只支持本原 BCH 码输入码长 n=127输入纠错能力 t=6计算得码长 k=85自动生成随机信息序列输入 1,手动键入信息序列输入 0 :1随机生成的序列为 m= 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0
5、1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1编码后生成码序列为 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 1 0 0
6、 1 0 1 0 1 1 0 1 0 1 0 1 1 1 0过高斯白信道输入 1,过理想信道输入 0 :1输入信道信噪比(单位分贝,15 左右较合适):10接收码字为 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 0 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1
7、1 1 0 0 1 0 1 1 1 0 0 1 0 1 0 1 1 1 0发送码字为 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 0通过信道
8、后出错 4 位错误图样为 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0译码结果为 0 0 1 0 1 0 1 1 0 1 0 1 0 0
9、0 0 0 1 1 0 0 1 1 0 1 1 1 1 0 0 1 0 0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 1 1 1 1 0 0 1 0 1 0 1 1 0 1 0 1 0 1 1 1 0还原信息序列为 m= 0 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 0 1 1 0 0 1 1 0 1 1 1 1 0 0 1 0
10、0 0 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 0 1 1译码正确 五、 实验小结整个过程严格按照所学 BCH 码相关知识编写,所得结论完全正确。六、 源代码clcclear all%-disp(-简易 BCH 编码译码系统-)flag=1;while(flag) %输入 nn=input(输入码长 n=);m=0;while(2m-1=nelse r(i)=0;endenddisp(接收码字为,num2str(r)disp(发送码字为,num
11、2str(c)enum=0;for i=1:nif r(i)=c(i)enum=enum+1;endenddisp(通过信道后出错 ,num2str(enum), 位)%-s=a+a; %构造伴随式, 初始化 sfor i=1:2*ts(i)=a+a;for j=1:ns(i)=s(i)+r(j)*a(n-j)*i);endendfor e=t:-1:1 %降阶A=a+a;for i=1:efor j=1:eA(i,j)=s(e+i-j);endendif det(A)=0 break; %判断行列式是否为奇异,是就继续降endendd=rank(A); %开始求方程组B=a+a;for i=
12、1:dB(i)=s(d+i);endif A=a+a %接受的码字出错的情况cc=r;E=zeros(1,n);elsesigma=A(B); %错误位置多项式的系数E=zeros(1,n);x=a+a;ki=1;for i=1:n %试根h=a0;for j=1:dh=h+sigma(j)*a(i*j);endif h=a+ax(k)=a(n-i);E(i)=1; %错误图样,可以不用求具体根, 找到位置即可ki=ki+1;endendcc=mod(E+r,2); %校正接收码字enddisp(错误图样为 ,num2str(E)disp(译码结果为 ,num2str(cc)m=c(1:k);disp(还原信息序列为 m= ,num2str(m)if cc=cdisp(译码正确 )else disp(译码错误 )end