要想生成海明校验码一共需要完成以下四步:

  • 确定海明校验位的位数

  • 确定校验位的位置

  • 确定校验位的值

  • 得出海明编码:信息位+校验位

1. 确定海明检验位的位数

       首先需要对待编码信息进行分组,每组一个检验位。假设待编码信息K位,分成r组,则:

       校验位个数为:r位,海明编码总长:N=k+r位。代码检验时,每组能产生1个指误码,若分成了r组,则指误码为r位,可能的指误代码有(2r-1)种。例如,现假设分成了4组(r=4),则有4位指误码G4,G3,G2,G1; 24种可能的指误代码如0000、0001、0010、….

       若指误码为全0则说明海明编码无错,其余(2^r-1)种指误代码分别用于指示(2r-1)种只有1位错的情况。

       海明检验位的位数与待编码信息的分组是直接相关的,k位有效信息位,r位奇偶校验位,k+r位新的海明编码需满足关系式: 2r -1≧k+r,其中r要取满足该不等式的最小值。

2.确定校验位的位置

       假设一段待编码信息为 01110011010,采用偶校验。01110011010 共11位,所以k=11,满足上述关系式的最小r应是4。那么海明校验码共有11+4=15位.由此可确定初步的表格:

码字位置 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
信息位
校验位

       校验位记为Pi(i=1,2,…,r),分别位于第2(i-1) (i=1,2,…,r)位上,其余位依次放置被校验的数据位。

码字位置 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
信息位 0 1 1 1 0 0 1 1 0 1 0
校验位
复合码字 d15 d14 d13 d12 d11 d10 d9 P8 d7 d6 d5 P4 d3 P2 P1

3.确定校验位的值

       分组原则:有效信息位的下标等于所有参与校验该位的校验位下标之和。即:要校验的信息位的位置 i 等于校验位的位置值相加。例如:有效信息位d3,3=2+1,表明第3位分别位于P1和P2所形成的校验组里。由此原则得到每一个位置相对应的校验位表,如下:

信息位的位置 对应校验位的位置值相加 位于校验位对应的校验组
d3 3=1+2 P1,P2
d5 5=1+4 P1,P4
d6 6=2+4 P2,P4
d7 7=1+2+4 P1,P2,P4
d9 9=1+8 P1,P8
d10 10=2+8 P2,P8
d11 11=1+2+8 P1,P2,P8
d12 12=4+8 P4,P8
d13 13=1+4+8 P1,P4,P8
d14 14=2+4+8 P2,P4,P8
d15 15=1+2+4+8 P1,P2,P4,P8

       每个校验位参与了哪些信息位的偶校验呢?就可写出分组方案:

P1=(d3,d5,d7,d9,d11,d13,d15)=0
P2=(d3,d6,d7,d10,d11,d14,d15)=0
P4=(d5,d6,d7,d12,d13,d14,d15)=1
P8=(d9,d10,d11,d12,d13,d14,d15)=0

       这样就得到了各个校验位的值。

4. 得出海明编码:信息位+校验位

       将各个校验位放置到其指定的位置上,得到海明编码为011100101011000

       指误字G=G4G3G2G1

       G1=d15⊕d13⊕d11⊕d9⊕d7⊕d5⊕d3⊕P1

       G2=d15⊕d14⊕d11⊕d10⊕d7⊕d6⊕d3⊕P2

       G3=d15⊕d14⊕d13⊕d12⊕d7⊕d6⊕d5⊕P4

       G4=d15⊕d14⊕d13⊕d12⊕d11⊕d10⊕d9⊕P8

       假设d6位出错则G1=0,G2=1,G3=1,G4=0,指误字G=0110,其中指误字0110指示的是d6位置。要想纠正错误,只需对d6位进行求反操作。