汉明码或者海明码的计算或者纠错

  • 汉明码简介:汉明码又叫海明码是在1950年被Richard Hamming提出的,目前仍是广泛采用的一种有效的校验码。汉明码实际上是一种多重奇偶校验。
  • 校验原理:在有效信息位中加入几个校验位形成汉明码,使码距比较均匀地拉大,并把汉明码的每一个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化,这不但可以发现错误,还可以指出错误发生的位置,为自动纠错提供了依据。
  • 海明码能检测出2位错误,并能纠正1位错误
  • 汉明码纠错应满足的条件:设K为有效信息的位数,r为校验位的位数,则整个码字的位数N应满足不等式:NKr ≤2r1(是2的r次方)。若要求海明码能检测出2位错误,则再增加1位校验位。
  • 计算海明码的步骤:

            A、确定海明码校验位的位数

                设K为有效信息的位数,r为校验位的位数,则整个码字的位数N应满足不等式:NKr ≤2r1(是2的r次方)。若要求海明码能检测出2位错误,则再增加1位校验位。

例如:二进制编码位10101100,共8位所以K=8,可以得出校验位r的位数为4位。

           B、确定校验位的位置

               位号(1~N)是那些权值为2的那些位,即2^0、2^1、2^2、……、2^r-1的位置作为校验位,记作P1、P2、P3、……、Pr余下的为有效信息位。

校验位P1=2^(1-1)其他校验位同理。

D8D7D6……D2D1对应数据10101100

海明码P5D8D7D6D5P8D4D3D2P4D1P2P1
位号H13H12H11H10H9H8H7H6H5H4H3H2H1
数据填入 1010 110 0  
求得的海明码             

           ​​C、分组

               将N位分为r组,第i位由校验位号之和等于i的那些校验位所校验。

               个人是这样分组的(Pi校验的位是从Mi开始连续i位,然后间隔i位,再校验连续i位,再间隔…….)

海明码P13D8D7D6D5P8D4D3D2P4D1P2P1
位号H13H12H11H10H9H8H7H6H5H4H3H2H1
校验位P8        
校验位P4        
校验位P2       
校验位P1       

由表可以看出:

P1校验数据位 H1,H3,H5,H7,H9,H11,…

P2校验数据位 H2,H3,H6,H7,H10,H11,…

P4校验数据位 H4,H5,H6,H7,H12,…

P8校验数据位 H8,H9,H10,H11,H12,…(注意:P的下标对应的是海明码的下标)

           ​​D、校验位的形成

              校验位的形成是由海明码的所有位求异或得到的例如:

P1=H1⊕H3⊕H5⊕H7⊕H9⊕H11
P2=H2⊕H3⊕H6⊕H7⊕H10⊕H11
P4=H4⊕H5⊕H6⊕H7⊕H12
P8=H8⊕H9⊕H10⊕H11⊕H12

             为了能检验两个错误,增加一位校验位Pr+1,放到最高位。

Pr+1=所有位求异或

例子:求10101100的海明码

海明码P5D8D7D6D5P8D4D3D2P4D1P2P1
位号H13H12H11H10H9H8H7H6H5H4H3H2H1
数据填入 1010 110 0  
求得的海明码1101001101011

 

P1=H1⊕H3⊕H5⊕H7⊕H9⊕H11

=1⊕0⊕0⊕1⊕0⊕1=1

P2=H2⊕H3⊕H6⊕H7⊕H10⊕H11

=0⊕1⊕1⊕1⊕0=1
P4=H4⊕H5⊕H6⊕H7⊕H12

=0⊕1⊕1⊕1=1
P8=H8⊕H9⊕H10⊕H11⊕H12

=0⊕1⊕0⊕1=0

将数据填入表中即可得到最终的海明码,但是为了检验2给错误,我们再把求得的海明码的所有位在求一次异或

P13=1⊕0⊕1⊕0⊕0⊕1⊕1⊕0⊕1⊕0⊕1⊕1=1

  • 海明码纠错

现在假设第5位出错了,也就是第五位在传输的过程中被改为“1“了(D5由0变为1)。即得到的数据为(1 1011 0110 1011)。现在要找出错误的位置(假设现在不知道出错的位置)。

S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7 = 1
S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7 = 0
S3=P4⊕D2⊕D3⊕D4⊕D8 = 0
S4=P8⊕D5⊕D6⊕D7⊕D8 = 1
S5=Pv⊕D1⊕D2⊕D3⊕D5⊕D6⊕D8 = 0

然后将S5S4S3S2S1 = 01001 转为十进制 = 9,即求得(1 1011 0110 1011)第9位出错,将1改为0完成纠错

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值