一、详细步骤
1、海明码,也称汉明码
2、海明码=数据码+校验码
3、假设数据码为1100,有4位,即n=4
4、由公式2^k>=n+k+1,解得k=3,即需3个校验码
5、校验按2^i(即2的i次幂,如1、2、4、8、16、32...)留出空来,一会填校验码
6、分组
1)我们需要确认H1、H2、H4这三个校验位都来校验哪些位置
2)将1、2、4的二进制码写出来,最高位补到3位(前面算的k=3),如下
3)将0替换为*,作为通配表,如下
4)将1到7的二进制列出来,如下
5)将这几个数与上面的通配表进行匹配(把有与通配表1相同位置的数放一列),如下
6)因此我们可以确定:
H1负责H1、H3、H5、H7的校验
H2负责H2、H3、H6、H7的校验
H4负责H4、H5、H6、H7的校验
7、用偶校验法,求出校验位是1还是0
H3、H5、H7的1的个数为奇数,因此H1=1
H3、H6、H7的1的个数为偶数,因此H2=0
H5、H6、H7的1的个数为偶数,因此H4=0
8、至此我们得出了完整的汉明码,如下
9、查错( ^ 表示按位异或)
第一组 p1 = H1 ^ H3 ^ H5 ^ H7
第二组 p2 = H2 ^ H3 ^ H6 ^ H7
第三组 p3 = H4 ^ H5 ^ H6 ^ H7
10、画圈(这样方便目视)
1)如编码完全正确,那么p1、p2、p3的结果都是0
2)如果p1 = 1,p2 = p3 = 0,则说明p2与p3组的成员2、3、4、5、6、7都没出错,则H1错误
3)以此类推
11、总结
二、参考连接
1、《汉明码(海明码)》通俗易懂https://blog.csdn.net/weixin_61985100/article/details/123300540
2、海贼宝藏https://www.haizeix.com