设数据位是n位,校验位是k位,则n和k必须满足关系: 2ᵏ-1>=n+k
设有数据为8位,那么 2⁴-1=15>8+4=12,则校验位为4位,即这个海明码长12位
令信息位为D7,D6,D5,D4,D3,D2,D1,D0,信息位从高往低占据编码位;
令校验位为P3,P2,P1,P0,校验位P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;
形成的海明码编码过程如下:
位数 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
信息位 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | ||||
校验位 | P3 | P2 | P1 | P0 |
信息位D7的位数为12,12=8+4,所以D7的校验位组为P3(位数:8)和P2(位数:4),即信息位的位数=校验位组的位数之和。
信息位 | 信息位检验计算 | 校验位组 |
---|---|---|
D7 | 12=8+4 | P3,P2 |
D6 | 11=8+2+1 | P3,P1,P0 |
D5 | 10=8+2 | P3,P1 |
D4 | 9=8+1 | P3,P0 |
D3 | 7=4+2+1 | P2,P1,P0 |
D2 | 6=4+2 | P2,P1 |
D1 | 5=4+1 | P2,P0 |
D0 | 3=2+1 | P1,P0 |
由上表可得,P0参与了D0,D1,D3,D4,D6的检验,其他由此类推
P0=D0⊕D1⊕D3⊕D4⊕D6
P1=D0⊕D2⊕D3⊕D5⊕D6
P2=D1⊕D2⊕D3⊕D7
P3=D4⊕D5⊕D6⊕D7
这样子就可以算出整个海明码的值了。
例子:
设数据为01101001,求海明码。
数据位为8,则2⁴-1=15>8+4=12,则校验位为4位,即这个海明码长12位;
D7D6D5D4D3D2D1D0=01101001;
P0=2⁰=1,P1=2¹=2,P2=2²=4,P3=2³=8;
P0=D0⊕D1⊕D3⊕D4⊕D6=1⊕0⊕1⊕0⊕1=1
P1=D0⊕D2⊕D3⊕D5⊕D6=1⊕0⊕1⊕1⊕1=0
P2=D1⊕D2⊕D3⊕D7=0⊕0⊕1⊕0=1
P3=D4⊕D5⊕D6⊕D7=0⊕1⊕1⊕0=0
则海明码为011001001101