软考——海明校验码

  当计算机存储或移动数据时,可能会产生数据位错误,这时可以利用汉明码来检测并纠错,相对于其它校验码,海明码可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太局域网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。(官方说法)

一、计算原理:

  1、计算校验位数

  2、确定校验码位置

  3、确定校验码

  4、实现校验和纠错

  

  1、计算校验位数

   假设被校验的位数为K,需要添加的校验码个数为N,两者满足下列关系:

    K+1+N ≤ 2^N(2的N次方)


    例如:信息码(被校验的码)有5个,那么需要4个校验码,信息码有12个,那么需要5个校验码


  2、确定校验码的位置

   校验码的位置只能放在2的次方位置上,也就是说,2的0次方(第一位),2的1次方(第二位),2的2次方(第四位),2的3次方(第八位)…………

  3、确定被校验的各个位置

   这里有个原则:第i位校验码从当前位开始,每次连续校验i(这里是数值i,不是第i位,下同)位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。最后根据所采用的是奇校验,还是偶校验即可得出第i位校验码的值。

  比较拗口,举个例子讲:

  第1个校验位,也是整个码字的第1位)的校验规则是:从当前位数起,校验1位,然后跳过1位,再校验1位,再跳过1位
  第2个校验位,也是整个码字的第2位)的校验规则是:从当前位数起,连续校验2位,然后跳过2位,再连续校验2位,再跳过2位
  第3个校验位,也是整个码字的第4位)的校验规则是:从当前位数起,连续校验4位,然后跳过4位,再连续校验4位,再跳过4位,
  …………………………
  第i位校验码从当前位开始,每次连续校验i(这里是数值i,不是第i位,下同)位后再跳过i位,然后再连续校验i位,再跳过i位,以此类推。

  4、根据是奇校验还是偶校验确定校验结果

   奇校验:1的个数为奇数个
   偶校验:1的个数为偶数个

二、实例讲解:

  假如被校验码为:01101001,求其偶校验的海明码?

  1)计算校验位数。被校验的个数为8位,8+1+N ≤ 2^N 得到N为4,所以需要添加4个校验码

  2)确定校验码的位置。校验码只能放在第一位,第二位,第四位……(2的n次方位)。所以添加校验码后的总码为0110d100c1ba

  3)确定被校验的各个位置。

    a是第一位,所以根据规则校验1位,然后跳过1位,再校验1位,再跳过1位……最后校验的各位(标红),0110d100c1ba因为是偶校验,所以可以得到a为1。

    b是第二位,校验2位,然后跳过2位,再连续校验2位,再跳过2位……最后校验的各位(标红如下)0110d100c1ba,采用偶校验,所以b可以得到结果为0

    c是第四位,校验4位,然后跳过4位,再连续校验4位,再跳过4位……最后校验的各位(标红如下)0110d100c1ba,采用偶校验,所以c可以得到结果为1

    d是第八位,校验8位,然后跳过8位,再连续校验8位,再跳过8位……最后校验的各位(标红如下)

0110d100c1ba,采用偶校验,所以可得d的结果为0

  4)所以01101001,其偶校验的海明码为011001001101

三、小结

  看似很难的计算题,第一次看完过后,觉得很失败,这TMD讲的是啥?一种失败感迎面扑来。失败?败了就败了,一败涂地也只不过是把“地”给“涂”了一遍而已。涂完之后,回来继续看结果还是不明白讲的是啥,但是会计算了,谢谢青山,谢谢我自己^_~……

你可能感兴趣的:(软考——海明校验码)