海明码的概念:
海明码是一种可以纠正一位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式:2^r>=n+1 或 2^r>=k+r+1
例如:要发送的信息为1011 0101 0011求发送的实际信息是什么?从高位到低位,如果第四位出现错误,计算海明码校验值?
解:要发送的信息为12位,即k = 12;
2^r > k+r 可求得 r = 5;
设五位冗余位为 A,B,C,D,E
将五位冗余位插入信息位中,插入规律为2^n(n = 0,1,2,3...)
插入后为 A B 1 C 0 1 1 D 0 1 0 1 0 0 1 E 1
位数: b1 b2 b3 b4 b5 b6 b7 b8 b9 b10 b11 b12 b13 b14 b15 b16 b17
计算出校验因子即A,B,C,D,E的值,校验因子的值为所有校验位的值的抑或,一个校验因子的校验位为 : 它在第几位就从它开始校验几个数然后跳过几个数,以此循环,如A在第一位所以它的校验位为: b1,b3,b5,b7,b9,b11,b13,b15,b17;B在第二位,所以它的校验位为b2,b3,b6,b7,b10,b11,b14,b15;
A = 1⊕0⊕2⊕0⊕0⊕0⊕1⊕1 = 0
B = 1⊕1⊕1⊕1⊕0⊕0⊕1 = 1
C = 0⊕1⊕1⊕1⊕0⊕0⊕1 = 0
D = 0⊕1⊕0⊕1⊕0⊕0⊕1 = 1
E = 1
将校验位插入信息码中就得到实际发送的信息为 0 1100 1110 1010 0111
假如第四位发生错误,即信息码变为 1010 0101 0011
第四位影响的校验因子有A,B,C重新按照上面的方法算出A',B',C'的值分别为1,0,1
所以校验组的值S5,S4,S3,S2,S1
S5 = E⊕E' = 0 S4 = D ⊕D' = 0 S3 = C⊕C' = 1 S2 = B⊕B' = 1 S1 = A⊕A' = 1
所以校验组为00111即第七位发生错误,将接收到的海明码第七位取反就得到正确的发送信息,再去掉校验因子就得到实际的信息;