汉明码:能检测2位比特错误,能纠正1位比特错误。
纠错流程(重点是求出校验码):
1.确认校验码位数r
2.确认校验码和数据的位置
3.求出校验码的值
4.在接收端检错并纠错
1.确认校验码位数r
汉明不等式
解释:k为原信息码的码长,编码后作为信息位的位数;r为编码后添加的监督位。r个监督位共有种情况,选择其中一种表示正确,那么其余
种能够表示编码后传输过程中出现的(k+r)种错误(在传输过程中假设只能出现1位错误,并且每位出现概率均等),故得此汉明不等式。
假设发送方要发送的数据为101101,满足不等式的最小r为4,故发送的汉明码为10位。
2.确认校验码和数据的位置
假设这4位校验码为s1、s2、s3、s4,把它们放在2的次方的位置,数据从左到右为d1、d2、d3、d4、d5、d6,把它们按序填满空缺位置。
二进制 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 |
数据位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
代表位 | s1 | s2 | d1 | s3 | d2 | d3 | d4 | s4 | d5 | d6 |
实际值 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 |
3.求出校验码的值
将所有要检验的位(将二进制位用不同的颜色区分开)异或,令其为0。
代入实际值,由以上4个式子得出s1s2s3s4=0001。
故发送的汉明码为0010011101。
4.在接收端检错并纠错
假设在传输过程中第5位发生错误,即0变1,那么在接收端接收的数据为0010111101,此时接收端并不知道哪一位出错,纠错方法是将所有要检验的位异或,得出的数倒着写。
二进制序列为0101,对应的十进制数为5,即出错位为第5位,将其改正即可。