如何计算海明冗余码及如何纠错

首先要知道异或运算(xor)符号:⊕

1和1、0和0异或等于0,01和10异或等于1

怎么算海明冗余码

假如数据码长度为k,再加上长度为r的校验码,r位的校验码可以表示2^ r种不同情况,那么我们要求2^ r大于k+r这样我们才可以表示任意出错的数据码位数。

考察数据码:1011

我们规定校验码放在1,2,4,8,16等2的幂次位上,这里按照上面要求算一下r最小取多少,算完r取3,即三位校验码p1/p2/p3分别放在1,2,4位上

即我们的冗余码应该是这样的形式:p1、p2、1、p3、0、1、1 三个校验码和四个数据码组成。

下面看下四个数据位都分别被哪几个校验位校验:
1:处在第三位,3=1+2,即被p1、p2校验
0:处在第五位,5=1+4,即被p1、p3校验
1:处在第六位,6=2+4,即被p2、p3校验
1:处在第七位,7=1+2+4,即被p1、p2、p3校验

然后就依据这个被校验关系计算冗余码:
p1=1异或0异或1(1011中除了第三位的1都被p1校验了,所以把被p1校验的全部异或起来),算完等于0
同理p2=1异或1异或1=1,p3=0异或1异或1=0
故最终的海明冗余码就是:0110011

怎么纠错

还是上面的例子:上级传过来0110111(第五位和上面不一样)的海明冗余码,1、2、4位是校验位,怎么找到出错的位?
我们把每一位校验位和它校验的所有数据位做异或计算。
(每个校验位校验哪几个数据位前面讲的够清楚了)
即:p1=0,p2=1,p3=0
g1=p1异或1异或1异或1=1
g2=p2异或1异或1异或1=0
g3=p3异或1异或1异或1=1
然后我们把g1、g2、g3连起来反过来,即g3g2g1为101(当然这里不反过来也是101),101表示十进制的5,就是说第五位出错了,看一下0110111确实是第五位和上面的0110011不一样,所以这个冗余码是有效的

posted @ 2019-05-03 16:56  NeoZy  阅读(528)  评论(0编辑  收藏  举报