海明码运算过程详解

一.什么是海明码?

    要了解海明码,首先我们需要知道什么是校验码。即计算机系统运行时,为了确保数据在传送过程中正确无误,一是提高硬件电路的可靠性,二是提高代码的校验能力,包括查错和纠错。通常使用校验码的方法来检测传送的数据是否出错。其基本思想是把数据可能出现的编码分为两类:合法编码和错误编码。合法编码用于传送数据,错误编码是不允许在数据中出现的编码。合理地设计错误编码以及编码规则,使得数据在传送中出现某种错误时会变成错误编码,这样就可以检测出接收到的数据是否有错。
    海明码是由贝尔实验室的Richard Hamming设计的,是一种利用奇偶性来检错和纠错的校验方法。

二.海明码的运算规则

海明码的运算规则:设 k k k个校验位为 P k , P k − 1 , … , P 1 P_{k},P_{k-1},\ldots ,P_{1} Pk,Pk1,,P1 n n n个数据位为 D n − 1 , D n − 2 , … , D 1 , D 0 D_{n-1},D_{n-2},\ldots ,D_{1},D_{0} Dn1,Dn2,,D1,D0,对应的海明码为 H n + k , H n + k − 1 , … , H 1 H_{n+k},H_{n+k-1},\ldots ,H_{1} Hn+k,Hn+k1,,H1,那么:
(1) P i P_{i} Pi在海明码的第 2 i − 1 2^{i-1} 2i1位置,即 H j H_{j} Hj= P i P_{i} Pi,且 j = 2 i − 1 j=2^{i-1} j=2i1,数据位则依序从低到高占据海明码中剩下的位置。
(2)海明码中的任何一位都是由若干个校验位来校验的。其对应关系如下:被校验的海明位的下标等于所有参与校验该位的校验位的下标之和,而校验位由自身校验。

【例】设数据为01101001,试采用4个校验位求其偶校验方式的海明码。
解: 该数据共有8个数据位,根据公式:
2 k − 1 ≥ n + k 2^k-1 \geq n+k 2k1n+k
2 k − 1 ≥ 8 + k 2^k-1 \geq 8+k 2k18+k知: k k k=4。即进行海明校验需要4个校验位。

(1)确定D与P在海明码中的位置,如下表所示:

H 12 H_{12} H12 H 11 H_{11} H11 H 10 H_{10} H10 H 9 H_{9} H9 H 8 H_{8} H8 H 7 H_{7} H7 H 6 H_{6} H6 H 5 H_{5} H5 H 4 H_{4} H4 H 3 H_{3} H3 H 2 H_{2} H2 H 1 H_{1} H1
D 7 D_{7} D7 D 6 D_{6} D6 D 5 D_{5} D5 D 4 D_{4} D4 P 4 P_{4} P4 D 3 D_{3} D3 D 2 D_{2} D2 D 1 D_{1} D1 P 3 P_{3} P3 D 0 D_{0} D0 P 2 P_{2} P2 P 1 P_{1} P1
01101001

(2)确定校验关系,如下表所示:

海明码海明码的下标校验位组
H 1 ( P 1 ) H_{1}(P_{1}) H1(P1)1 P 1 P_{1} P1
H 2 ( P 2 ) H_{2}(P_{2}) H2(P2)2 P 2 P_{2} P2
H 3 ( D 0 ) H_{3}(D_{0}) H3(D0)3=1+2 P 1 , P 2 P_{1},P_{2} P1P2
H 4 ( P 3 ) H_{4}(P_{3}) H4(P3)4 P 3 P_{3} P3
H 5 ( D 1 ) H_{5}(D_{1}) H5(D1)5=1+4 P 1 , P 3 P_{1},P_{3} P1P3
H 6 ( D 2 ) H_{6}(D_{2}) H6(D2)6=2+4 P 2 , P 3 P_{2},P_{3} P2P3
H 7 ( D 3 ) H_{7}(D_{3}) H7(D3)7=1+2+4 P 1 , P 2 , P 3 P_{1},P_{2},P_{3} P1P2P3
H 8 ( P 4 ) H_{8}(P_{4}) H8(P4)8 P 4 P_{4} P4
H 9 ( D 4 ) H_{9}(D_{4}) H9(D4)9=1+8 P 1 , P 4 P_{1},P_{4} P1P4
H 10 ( D 5 ) H_{10}(D_{5}) H10(D5)10=2+8 P 2 , P 4 P_{2},P_{4} P2P4
H 11 ( D 6 ) H_{11}(D_{6}) H11(D6)11=1+2+8 P 1 , P 2 , P 4 P_{1},P_{2},P_{4} P1P2P4
H 12 ( D 7 ) H_{12}(D_{7}) H12(D7)12=4+8 P 3 , P 4 P_{3},P_{4} P3P4

⨁ \bigoplus :异或,又称半加运算。二进制下用1表示真,用0表示假
运算法则: 0 ⨁ 0 = 0 0\bigoplus0=0 00=0 1 ⨁ 0 = 1 1\bigoplus0=1 10=1 0 ⨁ 1 = 1 0\bigoplus1=1 01=1 1 ⨁ 1 = 0 1\bigoplus1=0 11=0

P 1 校验: P 1 、 D 0 、 D 1 、 D 3 、 D 4 、 D 6 P_{1}校验:P_{1}、D_{0}、D_{1}、D_{3}、D_{4}、D_{6} P1校验:P1D0D1D3D4D6
P 1 = D 0 ⨁ D 1 ⨁ D 3 ⨁ D 4 ⨁ D 6 = 1 P_{1}=D_{0}\bigoplus D_{1}\bigoplus D_{3}\bigoplus D_{4}\bigoplus D_{6}=1 P1=D0D1D3D4D6=1

P 2 校验: P 2 、 D 0 、 D 2 、 D 3 、 D 5 、 D 6 P_{2}校验:P_{2}、D_{0}、D_{2}、D_{3}、D_{5}、D_{6} P2校验:P2D0D2D3D5D6
P 2 = D 0 ⨁ D 2 ⨁ D 3 ⨁ D 5 ⨁ D 6 = 0 P_{2}=D_{0}\bigoplus D_{2}\bigoplus D_{3}\bigoplus D_{5}\bigoplus D_{6}=0 P2=D0D2D3D5D6=0

P 3 校验: P 3 、 D 1 、 D 2 、 D 3 、 D 7 P_{3}校验:P_{3}、D_{1}、D_{2}、D_{3}、D_{7} P3校验:P3D1D2D3D7
P 3 = D 1 ⨁ D 2 ⨁ D 3 ⨁ D 7 = 1 P_{3}=D_{1}\bigoplus D_{2}\bigoplus D_{3}\bigoplus D_{7}=1 P3=D1D2D3D7=1

P 4 校验: P 4 、 D 4 、 D 5 、 D 6 、 D 7 = 0 P_{4}校验:P_{4}、D_{4}、D_{5}、D_{6}、D_{7}=0 P4校验:P4D4D5D6D7=0
P 4 = D 4 ⨁ D 5 ⨁ D 6 ⨁ D 7 P_{4}=D_{4}\bigoplus D_{5}\bigoplus D_{6}\bigoplus D_{7} P4=D4D5D6D7
对校验位进行校验看那些数据位使用该校验位,例如 D 0 、 D 1 、 D 3 、 D 4 、 D 6 D_{0}、D_{1}、D_{3}、D_{4}、D_{6} D0D1D3D4D6 使用 P 1 P_{1} P1 从而可得 P 1 P_{1} P1 对应的校验位
即求得的海明码为:

H 12 H_{12} H12 H 11 H_{11} H11 H 10 H_{10} H10 H 9 H_{9} H9 H 8 H_{8} H8 H 7 H_{7} H7 H 6 H_{6} H6 H 5 H_{5} H5 H 4 H_{4} H4 H 3 H_{3} H3 H 2 H_{2} H2 H 1 H_{1} H1
D 7 D_{7} D7 D 6 D_{6} D6 D 5 D_{5} D5 D 4 D_{4} D4 P 4 P_{4} P4 D 3 D_{3} D3 D 2 D_{2} D2 D 1 D_{1} D1 P 3 P_{3} P3 D 0 D_{0} D0 P 2 P_{2} P2 P 1 P_{1} P1
011001001101

补充:
(3)检验错误。
G 1 = P 1 ⨁ D 0 ⨁ D 1 ⨁ D 3 ⨁ D 4 ⨁ D 6 G_{1}=P_{1}\bigoplus D_{0}\bigoplus D_{1}\bigoplus D_{3}\bigoplus D_{4}\bigoplus D_{6} G1=P1D0D1D3D4D6=
G 2 = P 2 ⨁ D 0 ⨁ D 2 ⨁ D 3 ⨁ D 5 ⨁ D 6 G_{2}=P_{2}\bigoplus D_{0}\bigoplus D_{2}\bigoplus D_{3}\bigoplus D_{5}\bigoplus D_{6} G2=P2D0D2D3D5D6
G 3 = P 3 ⨁ D 1 ⨁ D 2 ⨁ D 3 ⨁ D 7 G_{3}=P_{3}\bigoplus D_{1}\bigoplus D_{2}\bigoplus D_{3}\bigoplus D_{7} G3=P3D1D2D3D7
G 4 = P 4 ⨁ D 4 ⨁ D 5 ⨁ D 6 ⨁ D 7 G_{4}=P_{4}\bigoplus D_{4}\bigoplus D_{5}\bigoplus D_{6}\bigoplus D_{7} G4=P4D4D5D6D7
偶校验下, G 1 G 2 G 3 G 4 G_{1}G_{2}G_{3}G_{4} G1G2G3G4全为0时表示接受到的数据无错误。若 G 1 G 2 G 3 G 4 G_{1}G_{2}G_{3}G_{4} G1G2G3G4不全为0时说明发生了差错,而且G_{1}G_{2}G_{3}G_{4}的十进制指出了发生错误的位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值