实验3 汉明码的编码及解码与纠错电路的设计
一、设计要求
掌握汉明码设计原理与检错纠错性能,能独立设计实现汉字GB2312编码的汉明码检验编码体系,并最终在实验环境中利用硬件电路实现对应的编解码电路。
二、方案设计
①编码:实验要求设计出22位的海明编码 (16位原始数据+5位海明检验位+1位总的奇偶校验位),但其只给出了16位的原始数据,因此只需要设计出5位海明校验位的电路与1位总奇偶校验位的电路,便可以实现编码这个过程。先计算五位海明校验位k+n<=2^n-1,此时k=16,n=5(有五位校验位),因此总的数据位数有16+5+1=22位。设此时校验位Pi (i=1,2,3,4,5),分别位于22位数据的第2^(i-1) 的位置上,故分别位于第1,2,4,8,16位上。
②解码:假设接收方接收到的数据最多只发生两位错,这是大前提;若接收到的数据无错,则“0位错”为高电平;若接收到的数据发生1位错,则“1位错”为高电平;若接收到的数据发生两位错,则“2位错”为高电平。若数据发生1位错,需要设计一个电路,对这一位数据取反纠正,得到无错的16位原始数据。若发生2位错,则此电路只能检错,不能纠错。
③纠错电路:只要指误字G5、G4、G3、G2、G1中含有1,表明汉明码发生错误,在假设1位错的前提下,可以利用指误码的值找到编码中出错位置并取反纠正。具体实现时可以将指误字的值利用译码器生成为多路出错信号,未出错的位线输出为0,出错位的位线输出为1。由于异或运算具有如下性质:,,则将D1~D16与各自对应译码器输出位进行异或运算后就可以得到纠正后的编码。
三、实验步骤
(1)设计汉明码校验编码电路
打开“data (原始版).circ”文档,设计(16,5)的汉明码,比照教材或PPT,并得出各校验码的逻辑表达式,再增加所有21位的总校验位(偶校验),即P6。根据各检验码的逻辑表达式设计电路
(2)设计汉明码校验解码及纠错电路
打开“海明解码”子电路,此电路中,输入:22位汉明码;输出:16位原始数据,1位检错位,2位检错位,0位错状态位。
(3)汉明校验传输测试1
打开“海明校验传输测试1”子电路,测试汉明码检验编码和解码电路的正确性。注意图中的随机干扰电路只能产生最多2位错误。自行设置原始数据值。可以通过修改加扰控制引脚的值来控制随机干扰模式,其中00表示无干扰,01表示1位错干扰,10表示2位错干扰,11表示0~2位错随机干扰。在测试时,注意观察各个输出端结果,对电路的正确性进行判断。
(4)汉明校验传输测试2
打开“海明校验传输测试2”子电路,测试汉明码检验编码和解码电路的正确性。该电路引入汉字显示模块,通过汉字显示可以直观地看出汉明码的纠错效果。
四、故障与调试
故障:位宽不匹配
调试:添加分线器,除去Pi
(2)
故障:不能实现一位错自动纠错
调试:译码器下方的分线器每一位对应分线端口要一一对应,根据封装区判断Pi,Di对应哪个端口
四、测试与分析
- 检一位错,自动纠错
- 检两位错