******************实践教学*******************兰州理工大学计算机与通信学院2014年春季学期通信系统仿真训练题目:汉明码的编译码设计与仿真专业班级:姓名:学号:指导教师:成绩:摘要与其他的错误校验码类似,汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。在接收端通过纠错译码自动纠正传输中的差错来实现码纠错功能,成为前向纠错FEC。在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。通过传输码列中假如冗余位(也称纠错位)。可以实现前向纠错。但这种方法比简单重传协议的成本要高。汉明码利用奇偶块机制降低了前向纠错的成本。利用汉明码(HammingCode)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(SingleErrorCorrecting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。本文主要利用MATLAB中通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制编译码图。在此基础上,对汉明码的性能进行分析,得出结论。关键词:MATLAB汉明码性能目录1.前言........................................................................12.汉明码的构造原理.............................................................22.1汉明码的构造原理.......................................................22.2监督矩阵H和生成矩阵G..................................................32.3校正子(伴随式)S......................................................43.汉明码编码器的设计...........................................................63.1汉明码编码方法.........................................................63.2汉明码编码程序设计.....................................................63.3汉明码编码程序的编译及仿真.............................................74.汉明码的译码器的设计........................................................104.1汉明码译码方法........................................................104.2汉明码译码程序的设计..................................................114.3汉明码译码程序的编译及仿真............................................135.总结........................................................................176.参考文献....................................................................187.附录........................................................................1911.前言线性分组码是指将信息序列划分为长度为K的序列段,在每一段后面附加r位的监督码,且监督码和信息码之间构成线性关系,即它们之间可由线性方程组来联系。这样构成的抗干扰码称为线性分组码。它是一种能够纠正一位错码或检测两位错码的一种效率较高的线性分组码。汉明码是一种线性分组码。MATLAB(MatrixLaboratory,矩阵实验室)是Mathwork公司推出的一套高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码/解码函数、纠错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED—SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。本次课程设计的任务就是利用MATLAB技术实现汉明码的编译码的设计和仿真。从而进一步加深对汉明码编译码原理的理解。22.(7,4)汉明码的构造原理2.1汉明码的构造原理线性分组码是一类重要的纠错码,应用很广泛。在(n,k)分组码中,若监督码元是按线性关系模2相加而得到的,则称其为线性分组码。现在以(7,4)分组码为例来说明线性分组码的特点。设其码字为A=[6a,012345,,,,,aaaaaa],前4位是信息元,后3位是监督元,可用下列线性方程组来描述该分组码产生监督元:265416530643aaaaaaaaaaaa显然,这3个方程是线性无关的。代入上述公式可得(7,4)码的全部码组,如表1所示。表1(7,4)汉明码的全部码组信息位a6a5a4a3监督位a2a1a0信息位a6a5a4a3监督位a2a1a00000000100011100010111001100001010110100100011110101100101001101100001010110111010100110011111010001110001111111由上表可知:(7,4)汉明码的最小码距0d=3,它能纠1位错或检2位错。3由此可见,汉明码是能够纠正单个错误的线性分组码,其特点是:最小码距0d=3,码长n与监督位r满足关系式:nr12,说明上述所说的(7,4)线性分组码就是汉明码。同时,由于码率nrnrnnk1)(,故当n很大和r很小时,码率接近1,可见:汉明码是一种高效码。2.2监督矩阵H和生成矩阵G●监督矩阵H式(3.1)所示的(7,4)汉明码的监督方程可以改写为:654265316430000aaaaaaaaaaaa(式3.2.1)用矩阵的形式可以将上式表示为:(式3.2.2)并简记为:TTAH0或0AHT其中,H成为监督矩阵,只要H给定,信息位和监督位的关系也就随即确定下来了。H的行数就是监督矩阵的数目,等于监督数目r。H序列可分为两部分:101100111010101110100H(式3.2.3)6543210111010001101010010110010aaaaaaa4其中P为kr阶矩阵,rI为rr阶单位阵。因为0TTHA或0TAH,所以可以用这个关系式来作为判断接收码字A是否出错的依据。若0AHT,则说明码字A有错,反之则说明码字A无错。●生成矩阵G若将(3.2.1式)的监督方程补充完整并写成矩阵的形式:(式3.2.4)即:A=G·[6a345aaa]=G·M即汉明码的编码原理上式中G=011....0001101....0010110....0100111....1000(式3.2.5)G成为生成矩阵,根据式3.2.4知:由G和信息码就能产生所有码字。生成矩阵也可分为两部分,即G=QIk,(式3.2.6)上式中Q=TP011101110111(式3.2.7)Q为rk阶矩阵,kI为k阶单位阵。2.3校正子(伴随式)S设一发送码组A=[0121,,...,aaaann],在传输的过程中可能发生误码。接受码组656453423101000010000100001111011011011aaaaaaaaaaa5B=[0121,,...,,bbbbnn],收发码组之差定义为错误图样E。E=B-A(式3.3.1)其中,E=[0121,,...,,eeeenn],令S=THB,称为校正子(伴随式)。TTTHEHEAHBS)((式3.3.2)可见:校正子S与错误图样E之间由确定的线性变换关系。(7,4)汉明码的校正子和错误图样之间的对应关系如表2所示。表2(7,4)汉明码S与E对应关系错误码位错误图样E校正子S错误位置C6e5e4e3e2e1e0e012SSS0b000000100111b000001001022b000010010033b000100001144b001000010155b010000011066b10000001117无错0000000000无错由上表可知:当S=001时,则出错在0位,即b0出错;当S=010时,则出错在1位,即b1出错;当S=100时,则出错在2位,即b2出错;当S=011时,则出错在3位,即b3出错;当S=101时,则出错在4位,即b4出错;当S=110时,则出错在5位,即b5出错;当S=111时,则出错在6位,即b6出错;当S=000时,则无错。63.(7,4)汉明码编码器的设计3.1(7,4)汉明码编码方法(7,4)汉明码的编码就是将输入的4位信息码M=[3456aaaa]加上3位监督码012bbb从而编成7位汉明码[6a012345,,,,,aaaaaa],编码输出B=[6a5a4a3a2a1a0a].由式A=M·G=[3456aaaa]·G可知,信息码M与生成矩阵G的乘积就是编好以后的(7,4)汉明码。3.2(7,4)汉明码编码程序设计最后将上式计算所得的监督位和输入的信息位一起输出,则此次编码就算完成了。(7,4)汉明码的编码源程序functionf=hammingencod(a)G=[1000111;0100110;0010101;0001011];%(7,4)汉明码的生成矩阵a=input('输入信息元序列:');c=mod(a*G,2);%编码的码字cdisp('编码后序列为:');disp(c);End●编码流程图编码程序的设计流程图:73.3(7,4)汉明码编码程序的编译及仿真functionf=hammingencod(a)G=[1000111;0100110;0010101;0001011];a=input('输入信息元序列:');c=mod(a*G,2);disp('编码后序列为:');disp(c);x=.01:.01:4;开始输入信息码a6a5a4a3编出监督位b2b1b0输出(7,4)汉明码a6a5a4a3a2a1a0结束8[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('hanminge