通信系统课程设计报告
● 编码流程图及打包生成的分立元件
编码器分立元件: 编码程序的设计流程图:
开始 输入信息码 a3a2a1a0
编出监督位 b2b1b0 输出(7,4)汉明码b6b5b4b3b2b1b0 结束
4.3 (7,4)汉明码编码程序的编译及仿真
用QuartusII进行编译仿真,在编译没有出错的的情况下选择新建波形文件,根据程序验证的需要设置波形,即设置好输入信息码a3a2a1a0的初始值,点击“波形仿真”,出现如下波形:
(7,4)汉明码的编码仿真波形 <部分>
第11页 共22页
通信系统课程设计报告
从上图的波形中可以看出,datain输入4 位信息码0000~1111,分别对应编码输出为b,输出了对应的7 位(7,4)汉明码,对照表1 汉明码全部码字,可见本次(7,4)汉明码编码的正确性。
第5 章 (7,4)汉明码的译码器的设计
5.1 (7,4)汉明码译码方法
(7,4)汉明码的译码器的功能就是把输入的7 位汉明码B=[b6b5b4b3b2b1b0] 译为4位信息码a3a2a1a0,并且根据伴随矩阵S 从而纠正编码中可能出现的1 位错码。
根据监督矩阵H和生成矩阵G的关系,即:
H = [P Ir] ,其中Ir是3?3的单位阵, G = [Ik Q] ,其中Ik 是4?4的单位阵,
P?QT (式5.1.1) 生成矩阵?
?1000....111?0100....110? G=??0010....101??0001....011??1110???=?I,Q? 由式(5.1.1),得P=?1101k????1011??? ???监督矩阵 ??
??1110?? ?H?1101???1011?100???010??PIr???001??由式(3.3.2)知S?B?HT?(A?E)HT?E?HT,其中E=[en?1,en?2,...,e1,e0] 从而即可得到校正子S与(7,4)汉明码各位之间的关系:
S2?a6?a5?a4?a2 S1?a6?a5?a3?a1
?? S0?a6?a4?a3?a0
第12页 共22页
通信系统课程设计报告
算出校正子S(S2S1S0)后,对照表2,即可判断出哪位出错,并纠正出错的那位,从而输出正确的码字。
5.2 (7,4)汉明码译码程序的设计
根据前面分析的译码原理,由于译码器的输入为7 位汉明码:
B=[b6b5b4b3b2b1b0]
输出是4 位信息码:a3a2a1a0,并且同时输出校正子S与错误的码位C。可得:
译码器的7为汉明码输入语句:port(b:in std_logic_vector(6 downto 0); 译码器的信息码输出语句:port(a: out std_logic_vector(3 downto 0); 译码器的校正子输出语句:port(s: out std_logic_vector(2 downto 0); 译码器的错码位置输出语句:port(c: out std_logic_vector(2 downto 0); 译码器的校正子S 与(7,4)汉明码各位之间的关系语句:
sss(2):=b(6) XOR b(5) XOR b(4) XOR b(2); sss(1):=b(6) XOR b(5) XOR b(3) XOR b(1); sss(0):=b(6) XOR b(4) XOR b(3) XOR b(0);
判定校正子S 与0 的关系,可以使用if 语句。如果S 为0,则表示没有错误;如果S 不为0,则表示有一位出错。然后根据表2可以得到校正子S 与错误图样E 之间的关系,再使用case 语句,编写如下程序:
when \when \when \when \when \when \when \
在上述程序中,bb、sss 是设置的变量。bb 存放的是译码器的7 位汉明码输入
b6b5b4b3b2b1b0。当
S=\,时,表示b0出错,则只要将这一位的值取反,然后
再送给b0输出,就可以纠正错码了。b1b2b3b4b5b6的纠错原理同b0。
第13页 共22页
通信系统课程设计报告
程序最后的译码输出表示为:a<=bb(6)&bb(5)&bb(4)&bb(3);
在程序中,C 表示错误在哪一位。若第0 位(a0)出错,则C 输出0;若第1 位出错,则C 输出1;??;若无错,则C 输出7。这样译码程序就可以编出来了。译码源程序见附录。
● 译码流程图及打包生成的分立元件
译码程序设计的流程图:
开始 译码输入七位码 b6b5b4b3b2b1b0 根据输入求出校正子 校正子N S=0? 根据S与E的关Y 系纠正错码 输出四位信息码 a3a2a1a0 结束
第14页 共22页
译码器分立元件:
通信系统课程设计报告
5.3 (7,4)汉明码译码程序的编译及仿真
编好程序后,用QuartusII软件进行编译仿真,设置好输入的7位汉明码为
b6b5b4b3b2b1b0,根据输入求出校正子S,判断
S是否为零,若为0,则说明无错,
直接输出;若不为0,则根据S与E的对应关系判断出出错的那位并纠正之,然后输出纠正后的码字。
(7,4)汉明码的译码仿真波形
在以上波形中可见,a 为译码输入,输入7 位信息码,分别对应译码输出的b输出了对应的4 位信息码,对照表1可以验证(7,4)汉明码的译码结果是否正确。并且在输入码有单个错码的情况下能纠正错码,纠错情况对应表2。如波形图中输入a 为1000000,输出b 为0000,并且校正子s 为111,错码位置c 为6,表示错码为b6。如波形图中输入a 为0000000,输出b为0000,并且校正子S为000,错码位置C为7,表示无错。
译码器的输入输出情况如下表所示:
第15页 共22页