海明码是奇偶校验的一种扩充。它采用多位校验码的方式,在这些校验位中的每一位都对不同的信息数据位进行奇偶校验,通过合理地安排每个校验位对原始数据进行校验位组合,可以达到发现错误,纠正错误的目的。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
假设数据位有m位,如何设定校验位k的长度才能满足纠正一位错误的要求呢?我们这里做一个简单的推导。
k位的校验码可以有2^k个值。如果能够满足: 2^k–1>=m + k (m + k为编码后的总长度),在理论上k个校验码就可以判断是哪一位(包括信息码和校验码)出现问题。
1.编码步骤
(1)根据信息位数,确定校验位数,2^r >= k+r+1,其中,k为信息位数,r为校验位数。求出满足不等式的最小r,即为校验位数。
(2)计算机校验位公式。
表1-3校验位公式表
… | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
… | I8 | I7 | I6 | I5 |
| I4 | I3 | I2 |
| I1 |
|
| 信息位 |
… |
|
|
|
| r3 |
|
|
| r2 |
| r1 | r0 | 校验位 |
表1-3其实可以当成一个公式来套用,如有已经编码的数据 1100 1001 0111。我们只需把这些数据填充到校验公式,即可得到信息位与校验位。填充的方法是这样的,首先看数据的最低位(即右边第1位),最低位为1,把1填充在公式表的r0位置,接着取出数据的次低位数据(即右边第2位),把它填充到r1位置,把右边第3位数填充到I1位置。依此类推,我们可以得到表1-4。
表1-4校验位公式实例表
… | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
… | 1 | 1 | 0 | 0 |
| 0 | 0 | 1 |
| 1 |
|
| 信息位 |
… |
|
|
|
| 1 |
|
|
| 0 |
| 1 | 1 | 校验位 |
表中第2行数据为1100 001 1,这就是数据1100 1001 0111的编码信息,而表格第3行是1 011,这便是校验位。
注意:
n 校验位rn所在位数为2^n,其余由信息位填充;
n 信息位下标从1开始,而校验位下标从0开始。
例如:I8对应的第十二位12=2^3+2^2,I7对应的第十一位11=2^3+2^1+2^0,I6对应的第十位10=2^3+2^1,I5对应的第九位9=2^3+2^0,一直写到I1对应的第三位。
校验位rn由前面位数写成2的幂之和中包含2^n的位数对应的信息位之和构成
例如: r3=I8⊕I7⊕ I6⊕ I5
(3)求校验位。根据上面我们所说的计算公式可以求出校验位。
(4)求海明码。根据上面的表格填充后,写出海明码。
2.纠错步骤
1) 根据海明码的信息位和校验位的分布规则,找出接收到的数据的信息位以及校验位。
表1-5校验位公式表
… | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
… | I8 | I7 | I6 | I5 |
| I4 | I3 | I2 |
| I1 |
|
| 信息位 |
… |
|
|
|
| r3 |
|
|
| r2 |
| r1 | r0 | 校验位 |
如有已经编码的数据 1100 1001 0111,则可以根据上表得到编码的信息为:1100 001 1;校验位为:1 011,详细过程在“编码步骤”已详细说明。
2) 接收端对校验位进行验证
Sn= rn (校验) ⊕rn (接收)
3) 判断校正因子是否有错,并改正。
Sn Sn-1 Sn-2……S0二进制对应的是那位就是那位出错,将其改正完成纠错。如1001为第九位,将第九位1变0 (或0变1)即可。
文章评论(0条评论)
登录后参与讨论