通信原理课程设计报告书课题名称基于VHDL语言的(7,4)汉明码编译码的设计姓名***学号**********院系通信与电子工程学院专业通信工程指导教师***2011年12月30日※※※※※※※※※※※※※※※※※※※※※※※※2009级通信工程专业通信原理课程设计2一、设计任务及要求:设计任务:设计基于VHDL的(7,4)汉明码的编译码要求:1.用VHDL语言编写(7,4)汉明码编码和译码的程序2.用QuartusⅡ5.0来观察并分析仿真结果指导教师签名:2011年12月30日二、指导教师评语:指导教师签名:年月日三、成绩验收盖章年月日3基于VHDL语言的(7,4)汉明码编译码的设计1设计目的通过本课程设计巩固并扩展通信原理课程的基本概念、基本理论、分析方法和实现方法。掌握(7,4)汉明码编码和译码的原理和设计步骤,掌握运用VHDL语言对(7,4)汉明码的编译码的设计,有效地将理论和实际紧密结合,培养自己的创新思维和设计能力,增强软件编程实现能力和解决实际问题的能力。2设计思路通过应用硬件描述语言VHDL,编写(7,4)汉明码的编码和译码的程序,并对编译码程序进行编译和仿真分析。通过运用相关工具画出(7,4)汉明码的编译码流程图和仿真图,并对相关结果进行分析,得出结论。3设计过程3.1(7,4)汉明码的编码的原理和程序设计(nk,)汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件。它属于线性分组码,由于汉明码的抗干扰能力较强,至今仍是应用比较广泛的一类码。在(nk,)汉明码中,(n-k)可附加的监督码元是又信息马元的线性运算产生的。码长为n,信息码元长度为k,2k个码组(nk,)构成n维线性空间中的一个k维子空间,编码的实质就是要在n维线性空间中,找出一组为n的k个线性无关的矢量,使得每个码组a都可以表示为k个矢量的线性组合,其中,1{01}01ai,,,,…,k-1。因此,[1na,2na,…0a]是带编码信息的信息组,G是一个k*n阶矩阵,G称为(nk,)汉明码的生成矩阵。当G确定以后,编码的问题也就解决了。根据监督码元由信息码元的线性运算产生的关系可知,监督码0a,1a,2a满足以下关系式:265416530643aaaaaaaaaaaa(3.1-1)由式(3.1-1)可算出三位监督位,再与信息位结合,可得到(7,4)汉明码。然后根据(7,4)汉明码的编码原理,画出程序设计的流程图。4图1(7,4)汉明码的编码流程图然后根据图1编写程序。首先,输入信息码3a4a5a6a,就可以得到监督位与信息码之间的对应关系,使用异或运算,即:2a6axor5axor4a(3.1-3)1a6axor5axor3a(3.1-3)0a6axor4axor3a(3.1-4)最后,将算好的监督码与原来输入的信息码一起输出,这样,编码程序就完成了。3.2(7,4)汉明码的编码的原理和程序设计若码长为n,信息位数为k,监督位数为rnk。如果希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求21rn或21rkr。(7,4)汉明码中,7n,4k,为了纠错一位码,用650aa…a表示要进行译码的码元,用1s、2s和3s表示监督关系式的校正子,则1s、2s和3s的值与错码对应关系可以规定如表1所示,由表1可知,当一位错码的位置在2a、4a、5a或6a时,校正子1s为1;否则1s为0。这就意味着2a、4a、5a和6a4个码元构成偶数监督关系:1s=6a5a4a2a(3.2-1)同理,1a、3a、5a和6a构成偶数监督关系:2s=6a5a3a1a(3.2-2)输出编好的(7,4)汉明码根据信息码算出监督码0a1a2a输入信息码6a5a4a3a结束开始5以及,0a、3a、4a和6a构成偶数监督关系:3s=6a4a3a0a(3.2-3)接收到每个码组之后,先按照以上三个等式计算出1s,2s,3s,再按照表1判断错码情况。例如,若接收码组为0000011,可计算出1s=0,2s=1,3s=1。由于1s2s3s等于011,可知在3a位有一错码,对其取反即可。表1(7,4)汉明码校正子与错码位置的关系1s2s3s错码位置1s2s3s错码位置0010a1014a0101a1105a1002a1116a0113a000无错码根据(7,4)汉明码的译码原理,画出程序设计的流程图如图2所示。然后根据流程图编写译码程序。首先,输入7位汉明码6543210aaaaaaa,然后,根据这7位汉明码6543210aaaaaaa计算校正子1s2s3s的值,可知校正子与(7,4)汉明码各位之间的关系,即:1s:=6axor5axor4axor2a(3.2-4)2s:=6axor5axor3axor1a(3.2-5)3s:=6axor4axor3axor0a(3.2-6)6图2(7,4)汉明码的译码流程图4程序设计4.1编码程序libraryieee;useieee.std_logic_1164.all;entityyihanisport(a6,a5,a4,a3:instd_logic;a2,a1,a0:bufferstd_logic;s:outstd_logic_vector(6downto0));endyihan;architecturezhuyutingofyihanisbegina2=a6xora5xora4;a1=a6xora5xora3;a0=a6xora4xora3;s=a6&a5&a4&a3&a2&a1&a0;YN校正子123sss是否为0?根据输入的码算出校正子123sss开始根据123sss的值,对照表1纠正出错的位输出4位信息码结束输出7位汉明码7endzhuyuting;4.2译码程序libraryieee;useieee.std_logic_1164.all;entityxuanisport(a6,a5,a4,a3,a2,a1,a0:instd_logic;s1,s2,s3:bufferstd_logic;z:outstd_logic_vector(3downto0));endxuan;architecturezytofxuanissignals:std_logic_vector(2downto0);begins1=a6xora5xora4xora2;s2=a6xora5xora3xora1;s3=a6xora4xora3xora0;s=s1&s2&s3;z=a6&a5&a4&a3whens=000elsea6&a5&a4&a3whens=001elsea6&a5&a4&a3whens=010elsea6&a5&a4&a3whens=100elsea6&a5&a4&(nota3)whens=011elsea6&a5&(nota4)&a3whens=101elsea6&(nota5)&a4&a3whens=110else(nota6)&a5&a4&a3whens=111elseXXXX;endzyt;5设计结果及仿真5.1编码仿真将(7,4)汉明码的编码程序用QuartusⅡ5.0进行仿真,得波形图如图3所示。8图3(7,4)汉明码的编码波形仿真图编码文件编译之后的仿真结果与预期结果一致。比如,分析图3中第二列可知,当输入的信息码6a=1,5a=0,4a=0,3a=0时,2a=1,1a=1,0a=1,输出码为1000111。由式3.1-1可计算出理论结果与实际结果一致。5.2译码仿真当编好的(7,4)汉明码随机出现一位错码,再用QuartusⅡ5.0将出错的(7,4)汉明码的译码程序进行仿真后,得波形图如图4所示。图4(7,4)汉明码的译码波形仿真图由3.2-1、3.2-2和3.2-3可知,当输入的(7,4)汉明码为1001111时,1s2s3s等于011,参照表1可知,3a位是错码,应纠正为1000111,故输出的4位信息码应为1000,正如图4中第二列所示。经验证,图4所示结果与理论结果一致。6设计体会与建议这次课程设计选的题目是对基于VHDL语言的(7,4)汉明码编译码的设计,虽然在上《通信原理》课程时对(7,4)汉明码的编解方法有所了解,但在这要用《EDA技术与应用》中学到的QuartusII软件的VHDL语言来实现这功能还是有9点困难的,设计过程中也遇到很多困难,主要是加噪声的问题,虽然结果还是不甚满意,但在老师和同学的热情帮助下基本解决了。通过这次对基于VHDL语言的(7,4)汉明码编译码的设计,终于领会了(7,4)汉明码的编译码的原理、方法和本次课程设计需要实现的基于VHDL的汉明码的编译码方案,同时也学会了科学地分析实际问题,通过查资料、分析资料及请教老师和同学等多种途径,独立解决问题。参考文献[1]江国强.EDA技术与应用.北京:电子工业出版社,2010年4月[2]樊昌信曹丽娜.通信原理.北京:国防工业出版社,2011年