汉明码的编译码设计与仿真_第1页
汉明码的编译码设计与仿真_第2页
汉明码的编译码设计与仿真_第3页
汉明码的编译码设计与仿真_第4页
汉明码的编译码设计与仿真_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*实践教学* 兰州理工大学计算机与通信学院2014年春季学期 通信系统仿真训练 题 目: 汉明码的编译码设计与仿真 专业班级: 姓 名: 学 号: 指导教师: 成 绩: 摘要与其他的错误校验码类似,汉明码也利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。利用一个以上的校验位,汉明码不仅可以验证数据是否有效,还能在数据出错的情况下指明错误位置。在接收端通过纠错译码自动纠正传输中的差错来实现码纠错功能,成为前向纠错FEC。在数据链路中存在大量噪音时,FEC可以增加数据吞吐量。通过传输码列中假如冗余位(也称纠错位)。可以实现前向纠错。但这种方法比简单重传协议的成本要高。汉

2、明码利用奇偶块机制降低了前向纠错的成本。利用汉明码(Hamming Code)是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(Single Error Correcting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。本文主要利用MATLAB中通信系统仿真模型库进行汉明码建模仿真,并调用通信系统功能函数进行编程,绘制编译码图。在此基础上,对汉明码的性能进行分析,得出结论。关键词:MATLAB 汉明码 性能 目录1.前 言12.汉明码的构造原理22.1 汉明码的构造原理22.2 监督矩阵H和生成矩阵G32.3 校正子(伴随式)S43.汉明码编码器的设计63.1 汉明码编码方法63

3、.2 汉明码编码程序设计63.3 汉明码编码程序的编译及仿真74.汉明码的译码器的设计104.1 汉明码译码方法104.2 汉明码译码程序的设计114.3 汉明码译码程序的编译及仿真135.总结176.参考文献187.附录191.前 言线性分组码是指将信息序列划分为长度为K的序列段,在每一段后面附加r位的监督码,且监督码和信息码之间构成线性关系,即它们之间可由线性方程组来联系。这样构成的抗干扰码称为线性分组码。它是一种能够纠正一位错码或检测两位错码的一种效率较高的线性分组码。汉明码是一种线性分组码。 MATLAB(Matrix Laboratory,矩阵实验室)是Mathwork公司推出的一套

4、高效率的数值计算和可视化软件。其中,MATLAB通信工具箱是一套用于在通信领域进行理论研究、系统开发、分析设计和仿真的专业化工具软件包。MATIAB通信工具箱由两大部分组成:通信系统功能函数库和SIMULINK通信系统仿真模型库。MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码解码函数、纠错控制编码解码函数、调制解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉明码、循

5、环码、BCH码、里德一索洛蒙码(REEDSOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。 本次课程设计的任务就是利用MATLAB技术实现汉明码的编译码的设计和仿真。从而进一步加深对汉明码编译码原理的理解。 2.(7,4)汉明码的构造原理2.1 汉明码的构造原理 线性分组码是一类重要的纠错码,应用很广泛。在(n,k)分组码中,若监督码元是按线性关系模2相加而得到的,则称其为线性分组码。现在以(7,4)分组码为例来说明线性分组码的特点。设其码字为A=,前4位是信息元,后3位是监督元,可用下列线性方程组来描述该分组码产生监督元: 显

6、然,这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、式:,说明上述所说的(7,4)线性分组码就是汉明码。同时,由于码率,故当很大和很小时,码率接近1,可见:汉明码是一种高效码。2.2 监督矩阵H和生成矩阵G 监督矩阵H式(3.1)所示的(7,4)汉明码的监督方程可以改写为:(式3.2.1)用矩阵的形式可以将上式表示为: (式3.2.2)并简记为:或其中,H成为监督矩阵,只要H给定,信息位和监督位的关系也就随即确定下来了。H的行数就是监督矩阵的数目,等于监督数目r。H序列可分为两部分:(式3.2.3) 其中P为阶矩阵,为阶单位阵。因为或 ,所以可以用这个关系式来作为判断接收码字A是否出错的依据。若,则说明码字A有错,反之则说明码字A无错。 生成矩

8、阵G若将(3.2.1式)的监督方程补充完整并写成矩阵的形式:(式3.2.4)即:A=G·=G·M即汉明码的编码原理 上式中 G= (式3.2.5)G成为生成矩阵,根据式3.2.4知:由G和信息码就能产生所有码字。生成矩阵也可分为两部分,即 G= (式3.2.6) 上式中 Q= (式3.2.7) Q为阶矩阵,为阶单位阵。2.3 校正子(伴随式)S设一发送码组A=,在传输的过程中可能发生误码。接受码组B=,收发码组之差定义为错误图样E。E=B-A (式3.3.1) 其中,E=,令S=,称为校正子(伴随式)。 (式3.3.2)可见:校正子S与错误图样E之间由确定的线性变换关系。(

9、7,4)汉明码的校正子和错误图样之间的对应关系如表2所示。表2 (7,4)汉明码S 与E 对应关系错误码位错误图样E校正子S错误位置C 0 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时,则出错在0 位,即b0 出错;当S=010时,则出错在1 位,即b1 出错;当S=100时,则出错在2 位,即b2 出错;当S

10、=011时,则出错在3 位,即b3 出错;当S=101时,则出错在4 位,即b4 出错;当S=110时,则出错在5 位,即b5 出错;当S=111时,则出错在6 位,即b6 出错;当S=000时,则无错。3.(7,4)汉明码编码器的设计3.1 (7,4)汉明码编码方法 (7,4)汉明码的编码就是将输入的4 位信息码M= 加上3 位监督码从而编成7位汉明码,编码输出B= .由式A = M·G=·G 可知,信息码M与生成矩阵G 的乘积就是编好以后的(7,4)汉明码。3.2 (7,4)汉明码编码程序设计最后将上式计算所得的监督位和输入的信息位一起输出,则此次编码就算完成了。 (7

11、,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; %(7,4)汉明码的生成矩阵 a=input('输入信息元序列:'); c=mod(a*G,2); %编码的码字c disp('编码后序列为:'); disp(c); End 编码流程图编码程序的设计流程图:开始输入信息码a6a5a4a3编出监督位b2b1b0输出(7,4)汉明码a6a5a4a3a2a1a0结束3.3 (7,4)汉明码编码程序的编译及仿真function

12、 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,&

13、#39;YTick',0:0.5:1.5);title('hanmingencode')xlabel('value')ylabel('value')end输入信息元序列1 0 0 0输出序列为: 1 0 0 0 1 1 1 输入信息元序列1 0 0 1输出序列为: 1 0 0 1 1 0 0输入信息元序列1 0 1 0输出序列为: 1 0 1 0 0 1 0输入信息元序列1 1 1 1输出序列为: 1 1 1 1 1 1 1 4.(7,4)汉明码的译码器的设计4.1 (7,4)汉明码译码方法(7,4)汉明码的译码器的功能就是把输入的7 位

14、汉明码B= 译为4位信息码,并且根据伴随矩阵S 从而纠正编码中可能出现的1 位错码。根据监督矩阵H和生成矩阵G的关系,即:H = ,其中是的单位阵,G = ,其中 是的单位阵, (式5.1.1)生成矩阵 G= 由式(5.1.1),得P=监督矩阵 由式(3.3.2)知,其中E=从而即可得到校正子S与(7,4)汉明码各位之间的关系:算出校正子S()后,对照表2,即可判断出哪位出错,并纠正出错的那位,从而输出正确的码字。4.2 (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;

15、 B=input('输入接收序列B='); S=mod(B*H',2); %计算B的伴随式 if S=0 disp('接收到的码字无错误。'); E=dec2bin(0,7); end for i=1:1:7if S=H(:,i)' E=dec2bin(2(7-i),7); %计算R的错误图样 fprintf('错误出现在第%1.0f位n',i); break; end end a=mod(B-E,2); %计算原发送码序列 disp('原发送码字为:'); disp(a) 译码流程图译码程序设计的流程图:开始译码

16、输入七位码b6b5b4b3b2b1b0b2b1b0根据输入求出校正子校正子S=0?输出四位信息码a3a2a1a0结束根据S与E的关系纠正错码NY4.3 (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); end for i=1:1:7if S=H(:,i)

17、' E=dec2bin(2(7-i),7); %计算R的错误图样 fprintf('错误出现在第%1.0f位n',i); break; end end 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

18、(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输入接收序列B=0 0 1 1 1 0 1错误出现在第4位原发送码字为: 0 0 1 0 1

19、 0 1 输入接收序列B=0 1 0 1 0 1 0错误出现在第1位原发送码字为: 1 1 0 1 0 1 0 输入接收序列B=0 0 0 1 1 0 1错误出现在第2位原发送码字为: 0 1 0 1 1 0 1 输入接收序列B=0 1 0 0 0 1 1错误出现在第3位原发送码字为: 0 1 1 0 0 1 1 5.总结这次通信原理课程设计的题目是汉明码的编码、译码的仿真。通过到图书馆查阅相关的资料,得知汉明码的编码、译码仿真可以用FPGA和MATLAB来做。刚接到这个题目时,感觉有点迷茫和彷徨,不知道从何入手。尽管上学期刚学的信息论与编码中也讲过线性分组码中的(7,4)汉明码的编解码方法,

20、在本次课题中,(7,4)汉明码的编码相对来说比较容易,程序也就一小段;解码方面相对就比较复杂,用到了很多的变量。但是通过反复实践和观察,最终还是有所突破,并顺利完成了课题要求。其次在画图和设置参数的时候遇到了不少困难。通过学习相关的教程和查阅MATLAB中的help,这些困难都迎刃而解,分别绘出编码和译码的码型。这其中我深刻地体会到专业知识的重要性。可想而知,理论知识对实际的操作有极大的帮助。通过本次学习,我再一次体会到MATLAB的强大。丰富的库函数、强大的数据处理能力,出色的绘图功能,友好的工作平台,简单一用的操作语言等等,这些优点都促使MATLAB成为数学处理软件发展史上的巅峰之作。这激

21、发了我之后学习MATLAB的决心。知识的构架是千枝交错的。学到大学,知识之间相互渗透的现象可谓比比皆是,这启发我们不仅要发散思维的领域,也要拓宽知识的领域。6.参考文献1 李建新.现代通信系统分析与仿真-MATLAB 通信工具箱.西安:西安电子科技大学,2000。2 樊昌信,曹丽娜.通信原理.北京:国防工业出版社,2008年.3赵静.基于MATLAB的通信系统仿真.北京:北京航空航天大学出版社,2008年.4韩利竹,王华.MATLAB电子仿真与应用.北京:国防工业出版社,2003年.5陈萍.现代通信实验系统的计算机仿真. 北京:国防工业出版社,20056吴伟陵等著. 移动通信原理. 北京:电子

22、工业出版社,20057.附录1. 汉明码编码程序: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; %(7,4)汉明码的生成矩阵 a=input('输入信息元序列:'); c=mod(a*G,2); %编码的码字c disp('编码后序列为:'); disp(c); End 2. 汉明码编码作图程序: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

23、 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(&

24、#39;value')ylabel('value')end3. 汉明码译码程序: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); end for i=1:1:7if S=H(:,i)' E=dec2bin(2(7-i),7); %计算R的错误图样 fprintf('错误出现在第%1.0f位n',i); break; end end a=mod(B-E,2); %计算原发送码序列

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论