版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、信道编码姓 名:郭宇琦 学 号:xxx2009xxx一、 实验目的1. 复习巩固BCH码编码译码知识。2. 使用matlab进行实践编写BCH,了解实际应用中BCH的编码译码过程。3. 结合实践验证所学BCH码知识。二、 实验原理BCH 码是用于校正多个随机错误的多级、循环、错误校正、变长数字编码,是循环码的子类。本原BCH码编码原理如下:1. 确定n、m、t.2. 用函数构造扩域,q=2取二进制,3. 取本原元,根据纠错能力t,确定连续根。通过逐个验证每个元素来找出每一个根的全部共轭根系。根据计算最小多项式。4. 所有非共轭根系的最小多项式乘积得到生成多项式5. 利用系统码编码方程,进行编码
2、。BCH码译码方法主要有Peterson译码法和Berlekamp迭代译码法等,其中Peterson译码方法如下:1. 计算伴随式。已知接受向量,则2求解错误位置。引入错误位置多项式,将求解错误位置的问题转化为求解线性方程组的问题 3用Peterson译码方法译码,解出错误位置多项式系数和错误图样,得到估值码字。 (1).假设e=t,计算S行列式M的值。M=0则降阶,e=e-1,同样计算直到M0. (2)将上面得到的2t个连续根代入试根,求上述方程组解。取倒数即为错误位置。由此写出错误图样。 (3)求出译码。每一步具体的实现方法,详见程序源代码注释。三、 程序框图编码框图过信道框图译码框图四、
3、 实验结果分析结果截图:上面是较高信噪比时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 1 1 1 1 1 1 1 0
4、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 1 0 1 0 1 1 0 1
5、 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 1 1 0 0 1 0 1 1 1 0
6、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通过信道后出错 4 位错误图样为 0 0 0 0
7、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 0 0 0 1 1 0 0 1 1 0 1
8、 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 0 0 1 1 1 1 1 0 1 1 0
9、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) %输入n n=input('输入码长n='); m=0; while(2m-1=n&&m<20) %计算m m=m+1; end if(m=20) %非本原就重新输入 disp
10、('错误:只支持本原BCH码') else flag=0; endendflag=1;while(flag) %输入t t=input('输入纠错能力t='); if(t>=floor(n-1)/2)|(t<=0) disp('错误:纠错能力不能为0或者不能太大') else flag=0; endend%-a=gf(2,m); %构造扩域,matlab自动只把a当做扩域中的本原元for i=1:2:(2*t-1) %求最小多项式,只找奇数项 b=1,ai; %让b分别为ai.找每一个(这么定义是要卷积的) l=i; while ai
11、=a(2*l) %找共轭根系 l=2*l; b=conv(b,1,al);%求最小多项式 end if i=1 g=b; else g=conv(g,b); %求生成多项式 利用卷积,进行连乘 endend%-gx=double(g.x);%从扩域到数域 相当于变成多项式k=n-length(gx)+1;%k=n-(r+1)+1disp('计算得码长 k=',num2str(k)flag=1;while(flag) temp=input('自动生成随机信息序列输入1,手动键入信息序列输入0 :n'); if temp mx=round(rand(1,k);%随机
12、生成信息组 disp('随机生成的序列为 m= ',num2str(mx) flag=0; else inputm=str2mat(input('输入信息序列','s'); if length(inputm)=k disp('错误:输入码长应为',num2str(k) else flag=0; end mx=str2num(inputm(:)' endend%-x1=zeros(1,length(gx); %循环码编码方程中的x1(1)=1;c1=conv(x1,mx); %码字的前k位,编码方程第一项q,r=deconv
13、(c1,gx);r=mod(r,2); %编码方程第二项c=mod(c1+r,2); %生成系统码,转换成为二进制disp('编码后生成码序列为 ',num2str(c)%-judge=input('过高斯白信道输入1,过理想信道输入0 :n');if judge=1 SNR=input('输入信道信噪比(单位分贝,15左右较合适):'); rr=awgn(c,SNR); %过信道else rr=c;endfor i=1:n %量化为01序列 if rr(i)>=0.5 r(i)=1; else r(i)=0; endenddisp(
14、9;接收码字为',num2str(r)disp('发送码字为',num2str(c)enum=0;for i=1:n if r(i)=c(i) enum=enum+1; endenddisp('通过信道后出错 ',num2str(enum),' 位')%-s=a+a; %构造伴随式,初始化sfor i=1:2*t s(i)=a+a; for j=1:n s(i)=s(i)+r(j)*a(n-j)*i); endendfor e=t:-1:1 %降阶 A=a+a; for i=1:e for j=1:e A(i,j)=s(e+i-j); end end if det(A)=0 break; %判断行列式是否为奇异,是就继续降 endendd=rank(A); %开始求方程组B=a+a;for i=1:d B(i)=s(d+i);endif A=a+a %接受的码字出错的情况 cc=r; E=zeros(1,n);else sigma=A(B'); %错误位置多项式的系数 E=zeros(1,n); x=a+a; ki=1; for i=1:n %试根 h=a0; for j=1:d h=h+sigma(j)*a(i*j); end if h=a+a x(k)=a(n-i); E(i)=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论