从上篇博客我们知道如何校验海明码,今天学习一下海明码的纠错。
海明码的纠错步骤我的理解是这样的:
1.根据海明码的信息位和校验位的分布规则,找出接收到的数据的信息位以及校验位;
2. 根据校验位来异或求校验位的接收码;
3.判断校正因子。将校验的最后结果转换成十进制,然后将该位1变0(或0变1)即可。
例如:
信息位8位的海明码,在接收到报文110010100000,判断传输是否出错,并求出发送端发送的信息位。
1. 首先进行分析2^r>=k+r+1,求得r=4;
2. 根据上篇的过程,可以知道
r3=I8⊕I7⊕I6⊕I5
r2=I8⊕I4⊕I3⊕I2
r1=I7⊕I6⊕I4⊕I3⊕I1
r0=I7⊕I5⊕I4⊕I2⊕I1
如图所示
12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
1 | 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 |
|
| 信息位 |
|
|
|
| 1 |
|
|
| 0 |
| 0 | 0 | 校验位 |
校验因子很简单就是将得出的校验位同校验的信息位再进行一次异或
S3=r3⊕I8⊕I7⊕I6⊕I5
S2=r2⊕I8⊕I4⊕I3⊕I2
S1=r1⊕I7⊕I6⊕I4⊕I3⊕I1
S0=r0⊕I7⊕I5⊕I4⊕I2⊕I1
得出的结果为S3S2S1S0=1001,转换为10进制为9,即第九位出错,将第九位的0改为1即可。
如果得出的结果S3S2S1S0全为0,那么证明传输正确。
结论:海明码就是这样利用多组数位的奇偶性来检错和纠错。不过这样也只能对其中的一位信息进行纠错,这是它的不足之处。