资源描述
. 摘要 在通信系统中,要提高信息传输的有效性,我们将信源的输出经过信源编码用较少的符号来表达信源消息,这些符号的冗余度很小,效率很高,但对噪声干扰的抵抗能力很弱。汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。为了提高信息传输的准确性,我们引进了差错控制技术。而该技术采用可靠的,有效的信道编码方法来实现的。 纠错码是一种差错控制技术,目前已广泛应用于各种通信系统和计算机系统中,纠错编码主要用于数字系统的差错控制,对于保证通信、存储、媒体播放和信息转移等数字传递过程的质量有着重要意义,是通信、信息类科知识结构中不可缺少的一部分。关键字:通信系统、MATLAB 线性分组码、Hamming码一、引言1二、设计原理22.1 汉明码的构造原理22.2 监督矩阵H32.3 生成矩阵G42.4 校正子(伴随式)S5三、(7,4)汉明码编码的设计73.1 (7,4)汉明码编码方法73.2 编码流程图73.3(7,4)汉明码编码程序设计7四、(7,4)汉明码的译码器的设计84.1 (7,4)汉明码译码方法84.2 译码流程图104.3(7,4)汉明码译码程序的设计10五、(7,4)汉明码编译码程序的编译与仿真波形11六、总结13七、参考文献14附录1515 / 17一、引言当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,简单的说,汉明码是一个错误校验码码集,由Bell实验室的R.W.Hamming发明,因此定名为汉明码。与其他的错误校验码类似,汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。 在承受端通过纠错译码自动纠正传输中的差错来实现码纠错功能,称为前向纠错FEC。在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。通过在传输码列中加入冗余位(也称纠错位)可以实现前向纠错。但这种方法比简单重传协议的成本要高。汉明码利用奇偶块机制降低了前向纠错的成本。二、设计原理2.1 汉明码的构造原理线性分组码是一类重要的纠错码,应用很广泛。在(n,k)分组码中,若监督码元是按线性关系模2相加而得到的,则称其为线性分组码。一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k.若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求 或 =346035614562aaaaaaaaaaaa现在以(7,4)分组码为例来说明线性分组码的特点。设其码字为A=,前4位是信息元,后3位是监督元,可用以下线性方程组来描述该分组码产生监督元: 显然,这3个方程是线性无关的。代入上述公式可得(7,4)码的全部码组,如表1所示。表1 (7,4)汉明码的全部码组信息位a6 a5 a4 a3监督位a2 a1 a0信息位a6 a5 a4 a3监督位a2 a1 a00000000100011100010111001100001010110100100011110101100101001101100001010110111010100110011111010001110001111111由上表可知:(7,4)汉明码的最小码距=3,它能纠1位错或检2位错。由此可见,汉明码是能够纠正单个错误的线性分组码,其特点是:最小码距=3,码长n与监督位r满足关系式:,说明上述所说的(7,4)线性分组码就是汉明码。同时,由于码率,故当很大和很小时,码率接近1,可见,汉明码是一种高效码。2.2 监督矩阵H式(3.1)所示的(7,4)汉明码的监督方程可以改写为:(式2.2.1)用矩阵的形式可以将上式表示为: (摸2) (式2.2.2)上式可以简记为: 或 式中 A=a6 a5 a4 a3 a2 a1 a0 0=0 0 0右上标“T”表示将矩阵转置。例如,HT是H的转置,即HT的第一行为H的第一列,HT的第二行为H的第二列等等。其中,H成为监督矩阵,只要监督矩阵H给定,编码时信息位和监督位的关系也就随即确定下来了。2.3 生成矩阵G上面汉明码例子中的监督位公式为(式2.3.1)也可改写成矩阵形式: (式2.3.2) 或者写成 (式2.3.3) 式中,Q为一个k*r阶矩阵,它为P的转置,即Q=PT 上式表示,在信息位给定后,用信息位的行矩阵车乘矩阵Q就产生出监督位。若将(2.2.1式)的监督方程补充完整并写成矩阵的形式:(式2.3.4)即:A=G=GM即汉明码的编码原理 上式中 G= (式2.3.5)G为生成矩阵,根据式2.3.4知:由G和信息码就能产生所有码字。生成矩阵也可分为两部分,即 G= (式2.3.6) 上式中 Q= (式2.3.7) Q为阶矩阵,为阶单位阵。 因此,如果找到了码的生成矩阵G,则编码的方法就完全确定了。具有KQ形式的生成矩阵称为典型生成矩阵。由典型生成矩阵得出的码组A中,信息位的位置不变,监督位附加于其后,这种形式的码称为系统码。2.4 校正子(伴随式)S设一发送码组A=,在传输的过程中可能发生误码。承受码组B=,收发码组之差定义为错误图样E。E=B-A (式2.4.1) 其中,E=,令S=。 (式2.4.2) 式中S称为校正子,他用来表示错码位置。可见:校正子S与错误图样E之间由确定的线性变换关系。若和之间一一对应,则将能代表错码位置。(7,4)汉明码的校正子和错误图样之间的对应关系如表2所示。表2(7,4)汉明码S 与E 对应关系错误码位错误图样E校正子S错误位置C0 0 0 0 0 0 10 0 110 0 0 0 0 1 00 1 020 0 0 0 1 0 01 0 030 0 0 1 0 0 00 1 140 0 1 0 0 0 01 0 150 1 0 0 0 0 01 1 061 0 0 0 0 0 01 1 17无错0 0 0 0 0 0 00 0 0无错由上表可知:当S=001时,则出错在1位,即b0 出错;当S=010时,则出错在2位,即b1 出错;当S=100时,则出错在3位,即b2 出错;当S=011时,则出错在4位,即b3 出错;当S=101时,则出错在5位,即b4 出错;当S=110时,则出错在6位,即b5 出错;当S=111时,则出错在7位,即b6 出错;当S=000时,则无错。三、(7,4)汉明码编码的设计3.1 (7,4)汉明码编码方法(7,4)汉明码的编码就是将输入的4 位信息码M= 加上3 位监督码从而编成7位汉明码,编码输出B=.由式A = MG=G 可知,信息码M与生成矩阵G 的乘积就是编好以后的(7,4)汉明码。3.2 编码流程图编码程序的设计流程图开始输入信息码a6a5a4a3编出监督位b2b1b0输出(7,4)汉明码a6a5a4a3a2a1a0完毕3.3(7,4)汉明码编码程序设计根据(7,4)汉明码的编码原理,将上式计算所得的监督位和输入的信息位一起输出,则此次编码就算完成了。 (7,4)汉明码的编码源程序见下文附录。四、(7,4)汉明码的译码器的设计4.1 (7,4)汉明码译码方法(7,4)汉明码的译码器的功能就是把输入的7 位汉明码B= 译为4位信息码,并且根据伴随矩阵S 从而纠正编码中可能出现的1 位错码。根据监督矩阵H和生成矩阵G的关系,即:H = ,其中是的单位阵,G = ,其中是的单位阵, (式4.1.1)生成矩阵 G= 由式(4.1.1),得P=监督矩阵 (式4.1.2)由式(2.2.2)知,其中E=从而即可得到校正子S与(7,4)汉明码各位之间的关系: (式4.1.3) 算出校正子S()后,对照表2,即可判断出哪位出错,并纠正出错的那位,从而输出正确的码字。表3 (7,4)汉明码译码输入、输出对应关系序号译码输入译码输出校正子S错误码位错码位置C00000010000001021000111100011003200101010010000无错0300111100011000无错0401011100100011450100101010101146001001101101006701110000111000无错0810001111000000无错091001101100100111010100001010010211101110110111003121101001110001141311110001101101514101010011101106150111111111111174.2 译码流程图译码程序设计的流程图:开始译码输入七位码b6b5b4b3b2b1b0b2b1b0根据输入求出校正子校正子S=0?输出四位信息码a3a2a1a0完毕根据S与E的关系纠正错码NY4.3(7,4)汉明码译码程序的设计根据前面分析的译码原理,在程序中,C 表示错误在哪一位。若第1 位(a0)出错,则C 输出0;若第2 位出错,则C 输出1;若无错,则C 输出0。这样译码程序就可以编出来了。译码源程序见附录五、(7,4)汉明码编译码程序的编译与仿真波形输入信息元序列1 0 0 0输出序列为: 1 0 0 0 1 1 1 0 0 0 0 1 1 1 错误在第一位(蓝线表示正确的译码0 0 0 1 0 1 1, 红线表示错误的接收序列1 0 0 1 0 1 1)输入信息元序列1 0 0 1输出序列为: 1 0 0 1 1 0 0 1 1 0 1 1 0 0 错误在第二位输入信息元序列1 0 1 0输出序列为: 1 0 10 0 1 0 10 0 0 01 0 错误在第三位输入信息元序列1 0 1 1输出序列为: 1 0 1 1 0 0 1 1 0 10 001错误在第四位六、总结对于本次课程设计的完毕,我真切感觉到自己知识能力的匮乏,很多东西都只是知道一些浅显的知识,真正搞懂会应用的东西很少。或许一个人的进步需要一个缓慢的过程。在过程中需要不断地借鉴,学习,汲取别人的东西。同别人的成果中攫取知识和营养,然后它变成自己的东西。通过这次课程设计。我学到了很多东西,首先,通过这次课程设计,我熟练地掌握了汉明码的纠错码的原理,了解的(7,4)汉明码的相关知识。其次,我觉得学习理论和实践是两个层次,理论指导实践,而实践验证理论,理论往往是在理想的条件下得出的,而实践是在现实生活中进行的,所以,实践得出的结论往往与理论的结论有一定的差别,这是很正常的。另外团结协作,互助共赢是时代的主流。在这次课设的制作中,交流合作的精神在我们表达的可谓是淋漓尽致。相互探讨,学习交流,优势互补,这样才最终处成了这课设。争论与交流是解决问题很好的方法,问题也总是在思想与意见的碰撞中得到解决而这也是我们对理论理解的更为深刻。通过图书馆,搜索引擎查阅资料的能力也得到了相应的提升。总之,在这次课程设计的制作的过程中学到了很多东西,能力也有相应的提升。在此还要感指导老师的辛勤教导,感老师在此次课程设计中给以孜孜不倦的解惑。七、参考文献【1】 建新 现代通信系统分析与仿真MATLAB通信工具箱.:电子科技大学,2000【2】 樊昌信 通信原理.:国防工业,2002【3】 敏 MATLAB通信仿真与应用 国防工业【4】 志刚等著 现代通信原理 :清华大学,2001 5【5】 吴伟陵等著 移动通信原理 :电子工业,2005【6】 利竹,王华 MATLAB电子仿真与应用 :国防工业,2003年.【7】 静 基于MATLAB的通信系统仿真 :航空航天大学,2008年.【8】 哲学 精通MATLAB :电子工业,2008年.附录一、(7,4)汉明码编码源程序function f=hammingencod(a) G=1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1; 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(0 4 0 1.5);set(gca,XTick,0:1:4);set(gca,YTick,0:0.5:1.5);title(hanmingencode)xlabel(value)ylabel(value)end二、(7,4)汉明码译码源程序function g=hammingdecod(B) H=1 1 1 0 1 0 0 ;1 1 0 1 0 1 0;1 0 1 1 0 0 1; B=input(输入接收序列B=); S=mod(B*H,2); %计算B的伴随式if S=0 disp(接收到的码字无错误。); E=dec2bin(0,7); endfor i=1:1:7if S=H(:,i) E=dec2bin(2(7-i),7); %计算R的错误图样 fprintf(错误出现在第%1.0f位n,i); break; endend a=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)hold on;plot(x,z,-r)axis(0 7 0 1.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
展开阅读全文