当前位置:文档之家› 通信原理课程设计报告以及CPLD汉明码编译

通信原理课程设计报告以及CPLD汉明码编译

课程设计报告课程名称通信原理课程设计系别:专业班级:学号:姓名:课程题目:汉明码编译码CPLD实现完成日期:指导老师:附件:汉明码编译码CPLD 实现摘要:通过利用CPLD实现对汉明码进行编译。

利用ALTERA公司的FLEX10K系列芯片设计和实现了汉明码的编译码,详细地阐述了设计的方法和实现的过程。

首先进行电路设计,然后在MAX+PLUSII编辑环境下,采用自顶向下的层次设计方法,以及VHDL文本输入的输入方法编制程序,经编译正确后进行波形仿真,经过仿真、调试,验证了功能和时序正确性后,将编辑的程序烧写到CPLD。

关键词:CPLD 汉明码编译MAX+PLUSII正文一.汉明码理论:汉明码是一种能够纠正一位错码且编码效率较高的线性分组码。

汉明码的编译码原理:汉明码的编码是对信源端发出的原始码字上加入一些监督码,得到新的码字,这的码字增加了信息的冗余,但保证了传输的质量,设其码字为A=[a6,a5,a4,a3,a2,a1,a0],其中前4位是信息元,后3位是监督元,使信息码元与监督码元通过线性方程式联系起来,可用下列线性方程组来描述该分组码,产生监督元:发送端计算监督位 a n = a n-1 ⊕a n-2⊕…. ⊕a 0=0 ,接收端解码计算S = a n-1 ⊕a n-2 ⊕…. ⊕a n-2⊕a0 ,校正子S =0则无错、S=1则有错,该式为监督关系式;S称为校正子。

由于校正子S只有两种取值,故它只能代表有错和无错这两种信息,而不能指出错码的位置。

一般来说,若码长为n,信息位数为k,则监督位数r=n-k。

用r个监督位构造出r个监督关系式来指示1位错码的n种可能位置,则2r -1 ≥ n 即2r ≥ k+r+1满足此汉明不定式。

(7, 4)汉明码,为了纠正1位错码,由上式可知,要求监督位数r≥ 3。

若r = 3,则n = k + r = 7。

我们用a6 a5⋯a0表示这7个码元,用S1、S2和S3表示3个监督关系式中的校正子,则S1、S2和S3的值与错码位置的对应关系可以规定如下:表格一:S2= a6 ⊕a5 ⊕a3 ⊕a1S3 = a6⊕a4 ⊕a3 ⊕a0错码位置a0 a1 a2 a3 a4 a5 a6 无错码仅当一位错码的位置在a2 、a4、a5或a6时,校正子S1为1;否则S1为零。

这就意味着a2 、a4、a5和a6四个码元构成偶数监督关系;同理,a1、a3、a5和a6构成偶数监督关系;以及a0、a3、a4和a6构成偶数监督关系。

在发送端编码时,信息位a6、a5、a4和a3的值决定于输入信号,因此它们是随机的。

监督位a2、a1和a0应根据信息位的取值按监督关系来确定,即监督位应使上3式中S1、S2和S3的值为0(表示编成的码组中应无错码):a6 ⊕ a5⊕ a4⊕a2=0 a2=a6⊕ a5⊕ a4a6 ⊕a5 ⊕a3 ⊕a1=0 移项运算,解出监督位a1= a6 ⊕a5 ⊕a3a6⊕a4 ⊕a3 ⊕a0=0 a0= a6⊕a4 ⊕a3根据上面三个表达式,可以得到16个许用码组如下表许用码组表表格二:(7,4)码的三个监督方程式可以重新改写为如下形式:可以用矩阵形式来表示:记作:或,其中通常H称为监督矩阵,A称为信道编码得到的码字。

在这个例子中H为r×n阶矩阵,P为r×k 阶矩阵,Ir为r×r(3x3)阶单位矩阵,具有这种特性的H矩阵称为典型监督矩阵,这是一种较为简单的信道编译码方式。

典型形式的监督矩阵各行是线性无关的。

接收端收到每个码组后,先计算出S1、S2和S3,再查表判断错码情况。

例如,若接收码组为0000011,按上述公式计算可得:S1 = 0,S2 = 1,S3 = 1。

由于S1 S2 S3 等于011,故查表可知在a3位有1错码。

按照上述方法构造的码称为汉明码。

表中所列的(7, 4)汉明码的最小码距d0 = 3。

因此,这种码能够纠正1个错码或检测2个错码。

由于码率k/n = (n - r) /n =1 –r/n,故当n很大和r很小时,码率接近1。

可见,汉明码是一种高效码。

二.软件部分:1、(7,4)汉明码的编码、程序流程图汉明码的编码就是将输入的四位信息码编成七位的汉明码,即加入三位监督位。

因为A = [a6 a5 a4 a3] ·G,信息码与生成矩阵G的乘积就是编好以后的(7,4)汉明码,而生成矩阵G又是已知的,可得1 0 0 0 1 1 10 1 0 0 1 1 0G =0 0 1 0 1 010 0 0 10 1 1所以,可以得出如下方程组a6 = a6a5 =a5a4 =a4a3=a3(方程组2)a2 = a6 + a5 + a4a1 = a6 + a5+ a3a0 = a6+ a4 + a3根据上式就可以完成设计编码程序。

编码流程图如下图:(7,4)汉明码的编码仿真图2、(7,4)汉明码的译码、程序流程图及仿真(7,4)汉明码的译码思路:(7,4)汉明码的译码就是将输入的七位汉明码翻译成四位的信息码,并且纠正其中可能出现的一个错误。

由于生成矩阵G是已知的,由G = [I k Q] ,(其中Ik是4x4阶单位阵)可以得到矩阵Q的值1 1 1Q = 1 1 0=P T(3.2.1)1 0 10 1 1那么1110P=1101(3.2.2)101 1而监督矩阵H与P T又存在一定的关系,即H =[PI r](3.2.3)那么就可以算出监督矩阵H的值,即1 1 1 0 1 0 0H = 1 1 0 1 0 10(3.2.4)1 0 1 1 0 0 1所以11 111010 1H T=011(3.2.5)10001000 1根据式S = BH T =(A + E)H T= EH T (S称为伴随式或校正子,收发码组之差定义为错误图样E,即 E = B - A),可以看出校正子S与错误样E之间有确定的线性变换关系如下表所示。

表格三:(7,4)汉明码S与E的对应关系表E =[ en-1,en-2,…,e1,e],算出校正子S与(7,4)汉明码各位之间的关系表达式为S2= a2+ a6+ a5+ a4S1= a1+ a6+ a5+a3S0 = a+ a6+ a4+ a3明显可以确定每一位出错时,对应的校正子s2s1s的值。

译码流程图如右图所示:(7,4)汉明码的译码仿真图三.程序清单:(7,4)汉明码的编码程序:library ieee;use ieee.std_logic_1164.all;entity bm isport(a:in std_logic_vector(3 downto 0);b:out std_logic_vector(6 downto 0));end ;architecture one of bm isbeginb(6)<=a(3);b(5)<=a(2);b(4)<=a(1);b(3)<=a(0);b(2)<=a(3) xor a(2) xor a(1);b(1)<=a(3) xor a(2) xor a(0);b(0)<=a(3) xor a(1) xor a(0);end;(7,4)汉明码的译码程序:library ieee;use ieee.std_logic_1164.all;entity ym isport(a:in std_logic_vector(6 downto 0);s:out std_logic_vector(2 downto 0);b:out std_logic_vector(3 downto 0);c:out std_logic_vector(2 downto 0)); end ;architecture one of ym isbeginprocess(a)variable ss:std_logic_vector(2 downto 0); variable bb:std_logic_vector(6 downto 0); beginss(2):=a(6) xor a(5) xor a(4) xor a(2);ss(1):=a(6) xor a(5) xor a(3) xor a(1);ss(0):=a(6) xor a(4) xor a(3) xor a(0); bb:=a;if ss> "000"thencase ss iswhen "001" =>bb(0):= not bb(0);c<="000"; when "010" =>bb(1):= not bb(1);c<="001"; when "100" =>bb(2):=not bb(2);c<="010"; when "011" =>bb(3):=not bb(3);c<="011";when "101" =>bb(4):=not bb(4);c<="100"; when "110" =>bb(5):=not bb(5);c<="101"; when "111" =>bb(6):=not bb(6);c<="110"; when others => null;c<="111";end case;else b<= a(6)&a(5)&a(4)&a(3);end if;s<=ss;b<=bb(6)&bb(5)&bb(4)&bb(3);end process;end;四.编译结果及分析编译结果:图1 (7,4)汉明码的编码程序的仿真在max+plus Ⅱ采用波形编辑器:先建立一个仿真通道文件bm·scf,如下图示:图二编辑的wdf文件如图所示:图三编译结果如下:图四(7,4)汉明码的编码程序的编译和仿真分析按照上述编码程序的编写思路,编写好程序,点击,进行编译,出现一些错误,列举如下:图五Error 1表明在使用"std_logic_vector"时,没有打开可以使用这个函数的库,应该在程序的最前面加上如下语句:library ieee;use ieee.std_logic_1164.all;图六Error 2: vhdl syntax error:the ending simple name “bm”must match the entity identifier “ym”. Error 2表明程序中的文件名与保存时的文件名不一致,两者应该相同。

相关主题