要想生成海明校验码一共需要完成以下四步:
确定海明校验位的位数
确定校验位的位置
确定校验位的值
得出海明编码:信息位+校验位
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 |
每个校验位参与了哪些信息位的偶校验呢?就可写出分组方案:
这样就得到了各个校验位的值。
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位进行求反操作。