海明码(汉明码)详解

海明码简介

海明码是由Richard Hanming于1950年提出的,它具有一位纠错能力。

海明码的计算

设欲检测的二进制代码为n位,为使其具有纠错能力,需要添加k位检测位,组成n+k位的代码。为了能准确对错误定位以及指出代码没错,新添加的检测位数k应满足:2k ≥ n+k+1
由此关系可求得不同代码长度n所需要检测位的位数k。

海明码的编码规则如下:
设k个校验位为Pk,Pk-1,·····,P1, n个数据位为 Dn-1,Dn-2,·····,D1,D0,对应的海明码为Hn+k,Hn+k-1,······,H1,那么
(1)Pi在海明码的第2i-1位置,比如P1,21-1=1,所以在H1的位置。
(2)海明码中的任何一位都是由若干个校验位来校验的。其对应关系如下:被校验的海明位的下标等于所有参与校验该为的校验位的下标之和,而校验位由自身校验。比如H12,下标为12,等于8+4,所以是海明码的第8、第4位校验位来检测的。

举例

对于8位的数据位,进行海明校验需要4个校验位(2k ≥ n+k+1,24 ≥ 8+4+1)。令数据位为D7,D6,D5,D4,D3,D2,D1,D0,校验位为P4,P3,P2,P1,形成的海明码为H12,H11,····,H1,则编码过程如下:

(1)确定D与P在海明码中的位置

H12H11H10H9H8H7H6H5H4H3H2H1
D7D6D5D4P4D3D2D1P3D0P2P1

(2)计算校验位

这里主要讲一种简易的计算校验位的方法:
第一个校验位P1是位于H1的位置,它检验的位置是H1,H3,H5,H7,H9,H11,也就是读一位,隔一位,···
第二个校验位P2是位于H2的位置,它检验的位置是H2,H3,H6,H7,H10,H11,也就是读两位,隔两位,···
第三个校验位P3是位于H4的位置,它检验的位置是H4,H5,H6,H7,H12,也就是读四位,隔四位,···
第四个校验位P4是位于H8的位置,它检验的位置是H8,H9,H10,H11,H12,也就是读八位,隔八位,···
以此类推,就可以轻易得知,第n位校验位校验的海明位是,从自身开始,读2n-1位,隔2n-1位,·····,直到读到尽头。

知道校验位后 ,对校验位对应的数据进行异或运算(默认是偶校验),即
P1=D0⊕D1⊕D3⊕D4⊕D6
P2=D0⊕D2⊕D3⊕D5⊕D6
P3=D1⊕D2⊕D3⊕D7
P4=D4⊕D5⊕D6⊕D7

若采用奇校验,则将各校验位的偶校验值取反即可。

(3)检验错误

对使用海明码的数据进行校验差错检测很简单,根据上面的方法,我们可以很轻易得知每个校验位负责检测的海明位,只要对其进行异或运算即可。
G4=P4⊕D4⊕D5⊕D6⊕D7
G3=P3⊕D1⊕D2⊕D3⊕D7
G2=P2⊕D0⊕D2⊕D3⊕D5⊕D6
G1=P1⊕D0⊕D1⊕D3⊕D4⊕D6

若采用偶校验,则G4G3G2G1全为0是表示数据没有错误,奇校验应全为1,否则即出现了错误。当发生错误时,将G4G3G2G1的值转化为十进制即可知道发生错误的位置,如G4G3G2G1=0110,即表示H6这个位置的数据发生了错误,只要将其取反即可纠正。

以上就是海明码的运算思想,欢迎大家来交流学习。

  • 43
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值