您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 电子设计/PCB > 基于MATLAB汉明码设计与实现
实验报告书------汉明码设计与实现汉明码编译码器系统班级:姓名:学号:一.实验原理描述1.1汉明码编码原理一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求21rn或211rkr(1)下面以(7,4)汉明码为例说明原理:设汉明码(n,k)中k=4,为了纠正一位错码,由式(1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7。我们用6543210aaaaaaa来表示这7个码元,用123sss的值表示3个监督关系式中的校正子,则123sss的值与错误码元位置的对应关系可以规定如表1所列。表1校正子和错码位置的关系123sss错码位置123sss错码位置0010a1014a0101a1105a1002a1116a0113a000无错码则由表1可得监督关系式:𝑆1=𝑎6⊕𝑎5⊕𝑎4⊕𝑎2(2)𝑆2=𝑎6⊕𝑎5⊕𝑎3⊕𝑎1(3)𝑆3=𝑎6⊕𝑎4⊕𝑎3⊕𝑎0(4)在发送端编码时,信息位6543aaaa的值决定于输入信号,因此它们是随机的。监督位2a、1a、0a应根据信息位的取值按监督关系来确定,即监督位应使式(2)~式(4)中1s、2s、3s的值为0(表示编成的码组中应无错码){𝑎6⊕𝑎5⊕𝑎4⊕𝑎2=0𝑎6⊕𝑎5⊕𝑎3⊕𝑎1=0𝑎6⊕𝑎4⊕𝑎3⊕𝑎0=0(5)式(5)经过移项运算,接触监督位{𝑎2=𝑎6⊕𝑎5⊕𝑎4𝑎1=𝑎6⊕𝑎5⊕𝑎3𝑎0=𝑎6⊕𝑎4⊕𝑎3(6)式(5)其等价形式为:[111010011010101011001][𝑎6𝑎5𝑎4𝑎3𝑎2𝑎1𝑎0]=[000](7)式(6)还可以简记为H∙𝐴𝑇=0𝑇或A∙𝐻𝑇=0(8)其中H=[111010011010101011001]A=[𝑎6𝑎5𝑎4𝑎3𝑎2𝑎1𝑎0]P=[111011011011]𝐼𝑟=[100010001]0=[000]所以有H=[P𝐼𝑟](9)式(6)等价于[𝑎2𝑎1𝑎𝑎]=[𝑎6𝑎5𝑎4𝑎3][111110101011]=[𝑎6𝑎5𝑎4𝑎3]𝑄(10)其中Q为P的转置,即TQP(11)式(10)表示,信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵GG=[𝐼𝑘𝑄]=[1000111010011000101010001011](12)G称为生成矩阵,因为由它可以产生整个码组,即有[𝑎6𝑎5𝑎4𝑎3𝑎2𝑎1𝑎0]=[𝑎6𝑎5𝑎4𝑎3]∙𝐺(13)或者A=[𝑎6𝑎5𝑎4𝑎3]∙𝐺(14)式(13)即汉明码的编码原理1.2汉明码纠错原理当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。一般来说接收码组与A不一定相同。若设接收码组为一n列的行矩阵B,即B=[𝑎6𝑎5𝑎4𝑎3𝑎2𝑎1𝑎0](15)则发送码组和接收码组之差为B−A=E(16)E就是传输中产生的错码行矩阵E=[𝑒6𝑒5𝑒4𝑒3𝑒2𝑒1𝑒0](17)若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(16)可改写成B=A+E(18)若E=0,即接收码组无错,则BAEA,将它代人式(8),该是仍成立,即有B∙𝐻𝑇=0(19)当接收码组有错时,E≠0,将B带入式(8)后,该式不一定成立。在未超过检错能力时,式(19)不成立。假设此时式(19)的右端为S,即B∙𝐻𝑇=𝑆(20)将B=A+E代入式(20),可得S=(A+E)𝐻𝑇+𝐸∙𝐻𝑇由式(8)可知,所以S=E∙𝐻𝑇(21)此处S与前面的123sss有着一一对应关系,则S能代表错码位置。因此,纠错原理即,接收端收到码组后按式(20)计算出S,再根据表1判断错码情况,进行差错纠正。二.实验仪器1.通信原理综合实验系统一台2.电脑-MATlab一台三.实验目的1.熟悉掌握汉明码的原理与实现2.观察了解汉明距离的作用3.通过已经知道的汉明码监督方程为传输的编码进行纠错也验证四.实验内容1.汉明码编码规则汉明码是1950年由美国贝尔实验室提出来的,是第一个设计用来纠正一位误码的线性分组码,汉明码及其变型已广泛应用于数字通信和数据存储系统中作为差错控制码。汉明码的原始设计思想来自于前面讨论的奇偶监督码。通过一个例子来说明如何具体构造这些监督关系式。设分组码(n,k)中k=4。为了纠正一位错码,按汉明不等式可得r≥3,若取r=3,则n=k+r=7。我们用a6a5a4a3a2a1a0a2=a6⊕a5⊕a4a1=a6⊕a5⊕a3a0=a6⊕a4⊕a32.编码的检验与纠错用S1,S2,S3表示三个监督关系式式中的校正子,监督方程为:S1=a6⊕a5⊕a4⊕a2S2=a6⊕a5⊕a3⊕a1S3=a6⊕a4⊕a3⊕a0则S1,S2,S3的值与错码位置的对应关系可以规定如下表:五.实验要求1.编写7位汉明码的程序,输出汉明码functionf=hammingencod(a)G=[1000111;0100110;0010101;0001011];a=input('输入信息元序列:');c=mod(a*G,2);disp('编码后序列为:');disp(c);x=.01:.01:4;[m,n]=size([a]'*ones(1,100));y=reshape(([a]'*ones(1,100))',1,m*n);plot(x,y)axis([0401.5]);set(gca,'XTick',0:1:4);set(gca,'YTick',0:0.5:1.5);title('hanmingencode')xlabel('value')ylabel('value')end输入信息元序列:1101编码后序列为:10001110100110001010100010112.任意输入一个7位编码使用程序判断编码是否正确,如果错误,指出错位并纠正。functiong=hammingdecod(B)H=[1110100;1101010;1011001];B=input('输入接收序列B=');S=mod(B*H',2);%计算B的伴随式ifS==0disp('接收到的码字无错误。');E=dec2bin(0,7);endfori=1:1:7ifS==H(:,i)'E=dec2bin(2^(7-i),7);%计算R的错误图样fprintf('错误出现在第%1.0f位\n',i);break;endenda=mod(B-E,2);%计算原发送码序列disp('原发送码字为:');disp(a)x=.01:.01:7;[m,n]=size([a]'*ones(1,100));y=reshape(([a]'*ones(1,100))',1,m*n);[m,n]=size([B]'*ones(1,100));z=reshape(([B]'*ones(1,100))',1,m*n);plot(x,y)holdon;plot(x,z,'--r')axis([0701.5]);set(gca,'XTick',0:1:7);set(gca,'YTick',0:0.5:2.5);set(gca,'ZTick',0:0.5:2.5);title('hanmingdecode')xlabel('value')ylabel('value')zlabel('value')end输入接受序列为[1101010]译码后的仿真图如下:如图上所示测接收到的码子无错误。如果输入接受序列为[1100010]则仿真图:如上图所示,则四位有错误,原发送码子为[1101010]如果输入的序列为[1000010],则仿真图为0123456700.511.5hanmingdecodevaluevalue0123456700.511.5hanmingdecodevaluevalue0123456700.511.5hanmingdecodevaluevalue
本文标题:基于MATLAB汉明码设计与实现
链接地址:https://www.777doc.com/doc-2534342 .html