目录
海明码:发现双比特错,纠正单比特错;
一、海明码工作流程
确定校验码位数r
海明不等式:
2
r
>
=
k
+
r
+
1
2^r >= k+r+1
2r>=k+r+1 r为冗余信息位,k为信息位。
确定校验码和数据的位置
校验位按照顺序分别放在2的几次方的位置,数据按照顺序把剩余空格填满即可。
求出校验码的值
假如要求
P
1
P_1
P1校验码的实际值,
P
1
P_1
P1对应的二进制位为0001,
P
1
P_1
P1的二进制位中最后一位为1,
P
1
P_1
P1能够校验所有二进制位中最后一位为1的数据,分别为
D
1
D_1
D1,
D
2
D_2
D2,
D
4
D_4
D4,
D
5
D_5
D5,接着令所有要检验的位异或值为0(包括
P
1
P_1
P1本身):
P
1
⊕
D
1
⊕
D
2
⊕
D
4
⊕
D
5
=
0
P_1\oplus D_1\oplus D_2 \oplus D_4 \oplus D_5=0
P1⊕D1⊕D2⊕D4⊕D5=0通过上述公式可以得到
P
1
=
0
P_1=0
P1=0。
同理,对于 P 2 P_2 P2, P 2 P_2 P2的二进制位0010,则 P 2 P_2 P2能够校验在二进制中第二位为1的所有数据。
因此,可以求得101101的海明码为0010011101。
检错并纠错
假设0010011101数据在传输过程中第五位出错,则接收端接收到的数据为0010111101。
现在开始检错并纠错,令所有要校验的位进行异或运算,类似于第三步【求出校验码的值】。
&P_1&异或得到的值为1,&P_2&异或得到的值为0,&P_3&异或得到的值为1,&P_4&异或得到的值为0。将其拼接为二进制值,则该值为0101,对应的十进制数为5,这样就找到了出错的位置,即出错位是第5位。
注意,海明码只能发现双比特错但是无法纠正,海明码可以纠正单比特错。