1 / 15
文档名称:

matlab(7-4)汉明码和(7-4)循环码的编程设计.doc

格式:doc   大小:352KB   页数:15页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

matlab(7-4)汉明码和(7-4)循环码的编程设计.doc

上传人:帅气的小哥哥 2024/5/12 文件大小:352 KB

下载得到文件列表

matlab(7-4)汉明码和(7-4)循环码的编程设计.doc

相关文档

文档介绍

文档介绍:该【matlab(7-4)汉明码和(7-4)循环码的编程设计 】是由【帅气的小哥哥】上传分享,文档一共【15】页,该文档可以免费在线阅读,需要了解更多关于【matlab(7-4)汉明码和(7-4)循环码的编程设计 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。二、创新实验设计创新实验一:〔,〕汉明码的编码与译码实现实验目的实现〔,〕汉明码的编码与译码,通过这次实验不但加深了对汉明码编码和译码原理了解,而且对线性分组码有所了解。实验原理线性分组码的构造方法比较简单、理论较为成熟,应用比较广泛。汉明码是一种能够纠正一个错码的效率比较高的线性分组码,下面以〔,〕码为例就汉明码的编码与译码分别进行介绍:编码原理一般来说,假设汉明码长为n,信息位数为k,那么监督位数r=n-k。假设希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,那么要求或设汉明码〔n,k〕中k=,为了纠正一位错码,由式〔〕可知,要求监督位数r≥。假设取r=,那么n=k+r=。这样就构成了〔,〕码。用来表示这个码元,用的值表示个监督关系式中的校正子,那么的值与错误码元位置的对应关系可以规定如表所列。:在发送端编码时,信息位的值决定于输入信号,因此它们是随机的。监督位、、应根据信息位的取值按监督关系来确定,为使所编的码中无错码,那么等于,即方程组〔〕可等效成如下矩阵形式式()可简化为,H为监督矩阵,那么由式()可得到监督矩阵因为生成矩阵,所以由()得生成矩阵G如下:然后利用信息位和生成矩阵G相乘产生整个码组,即有其中A为整个码组矩阵,是信息位。根据上述原理可以得到(,)汉明码的整个码组。译码与检错、纠错原理当数字信号编码成汉明码后,由于信道噪声的存在,使得经过信道后的汉明码会发生过失,使得接收端接收到错码,因此需要多错码进行纠正,以提高通信系统的抗干扰能力及可靠性。下面分析纠错译码原理。设B为接收码组,它是一行列的矩阵,即,B中可能含有错码,错误图样,在E的表达式中,有假设,表示该码元没错;假设,表示该码元为错码。由得表示接收码组和错误图样之和等于正确码组U,通过〔〕式就可以实现纠错。可以用标准阵来表示所有可能的个n元码组的接收矢量,(n,k)码的标准阵形式如下:应该注意到,码组〔全码字〕起两个作用:既是其中一个正确码组,也是错误图样,代表所在行没有错误。标准阵中的是陪集首,陪集首的选择是有规定的,第j行的陪集首是在前j-行中没有出现的最小码组,即错误图样E,如果不选错误图样作为陪集首,译码将会产生错误。对于(,)汉明码,其最小码重是,设码的纠错能力为t,根据公式得该码的纠错能力为,即能纠错一位错码。由于根据完备码的定义有将(,)码代入()可以得知,(,)汉明码为完备码组,只能纠错和检错一位错码。对于正确码组A而言,有当接收到错码变成码组B时,有其中S为校正子所构成的校正矩阵,由于S和E如〔〕所示的一一对应的关系,对于(,)码,,可以由伴随式得到错误图样,从而实现检错,进而实现纠错。实验内容由于编码涉及到矩阵的运算,而matlab在处理矩阵运算方面有独特优势,所以这次选择用matlab工具来实现〔,〕汉明码的编码和译码。(,)码的编码比较简单,监督矩阵H,可以通过函数求生成矩阵G,然后信息位和生成矩阵G相乘就可得到所有的码组,(,)汉明码的编码程序如下:%%%〔,〕汉明码编码——..clearall;clc;H=[;;];%(,)码的监督矩阵G=genpar(H)%(,)码的生成矩阵m=[;;;;;;;;;;;;;;;];%%所有的信息位U=[rem(m*G,)];disp('(,)汉明码的编码结果:');disp(U);由原理分析可知,要实现纠错和检错译码,关键在于伴随式查询表,因此如何实现伴随式查询表是编程的关键,(,)汉明码的译码程序如下:%%%下面是(,)码译码A=input('请输入接收码组:');[r,l]=size(A);E=[;;;;;;;];%%%%%求校正子,然后将其转化成十进制数fori=:rSx=S(i,)*+S(i,)*+S(i,);end%%%%下面是〔,〕码检错fori=:rswitch(Sx)casedisp('此接收码字没错')casedisp('注意:此接收码字的第一位有错,请纠正')casedisp('注意:此接收码字的第二位有错,请纠正')casedisp('注意:此接收码字的第三位有错,请纠正')casedisp('注意:此接收码字的第四位有错,请纠正')casedisp('注意:此接收码字的第五位有错,请纠正')casedisp('注意:此接收码字的第六位有错,请纠正')casedisp('注意:此接收码字的第七位有错,请纠正')endend%%%下面为在知道哪位出错的情况下,进行纠正fori=:rswitch(Sx)caseB(i,:)=A(i,:)+E(,:);caseB(i,:)=A(i,:)+E(,:);caseB(i,:)=A(i,:)+E(,:);caseB(i,:)=A(i,:)+E(,:);caseB(i,:)=A(i,:)+E(,:);caseB(i,:)=A(i,:)+E(,:);caseB(i,:)=A(i,:)+E(,:);caseB(i,:)=A(i,:)+E(,:);endendB=rem(B,);disp('纠错后的码字');disp(B);由于可能在纠错过程中会产生错误,在此,我们设计了检错纠错是否产生错误的程序,程序如下:%%%%下面为检查纠错是否产生错误k=;fork=:if(U(k,:)==B)flag=;breakendendifflag==disp('纠错无误');elsedisp('注意:纠错有误,请检查')End由于译码的目的就是找出信息位c,所以,需要从纠错后的码组中提取出信息位,提取信息位的程序如下:%%%下面为提取码的信息位forj=:c(:,j)=B(:,j);enddisp('信息位c如下:')disp(c)实验结果分析运行编码程序后,得到如下结果通过理论计算,可以得出实验结果和理论编码结果吻合,可以发现,〔,〕码的最小码重是。当接收码组为[]时,译码结果如下运行程序后,可以看到:当接收码组为[]时,会出现“注意:此接收码字的第六位有错,请纠正〞的提示,在程序中,为防止纠错错误,我设置了纠错后的码和编码结果的比较,如果纠错后的码和编码结果当中的某个码组相同,说明纠错无误,否那么纠错有误。当接收码组为[]时,经过纠错后出现纠错无误的结果,说明纠错后的码是正确码组。然后提取纠错后的码组的信息位c,从运行结果可以看出,c=。当接收码组为[]时,运行结果如下:此接收码组本来就是一个正确码组,所以通过运行程序后,会出现“此接收码字没错〞的提示,纠错后的码字和接收的码组是相同的,检查到纠错无误,然后提取信息位c,信息位c=,整个译码完成。改进建议(,)汉明码的编码与译码相比照拟简单,可以通过matlab编程实现对信道编码性能的分析,可以编程实现比较编码后的误码率和没编码的误码率,也可以编程实现在有噪声的情况下来进行译码。创新实验二:〔,〕:根据循环码的代数性质建立系统编码的过程,可以把消息矢量用如下多项式表示:要编码成系统循环码形式,把消息比特移入码字存放器的最右边k位,而把监督比特加在最左边的n-k个中,那么要用乘以m(x)得到m(x)=m(x)=q(x)g(x)+p(x),其中p(x)可以表示为p(x)= ,那么p(x)+m(x)= +另U(x)=p(x)+m(x),那么U=〔,,,···,,,,···,〕。本实验根据以上原理,,生成多项式为g(x)=.实验译码原理:译码的实验原理g(x)=,在〔n,k〕循环码中,由于g(x)能除尽,因此可分解成g(x)和其他因式的乘积,记为即可写成即h(x)=那么=,其中式h(x)的逆多项式。监督矩阵多项式可表示为,.〔,〕循环码的编码〔位〕的程序:clear;clc;a=input('请输入消息矢量:');%高次项系数在前的生成多项式Gx=[];%将数组a的高位依次放在数组Data的低位Data=zeros(,);Data()=a();Data()=a();Data()=a();Data()=a();%Data除以Gx得到余数Rx[Qx,Rx]=deconv(Data,Gx);b=Rx+Data;%将数组b的高位放在后面c=b();b()=b();b()=c;c=b();b()=b();b()=c;c=b();b()=b();b()=c;%将数组b校正fori=:ifrem(abs(b(i)),)==b(i)=;endendfori=:ifrem(abs(b(i)),)==b(i)=;endenddisp('输入序列:');adisp('编码输出序列:');b程序运行结果为:改变输入序列运行结果的编码如下:〔位〕程序:clear;clc;r=[];h=[,,;,,;,,;,,;,,;,,;,,];b=flipud(h);s=r*b;fori=:ifrem(abs(s(i)),)==s(i)=;end