标签:校验位 内容 纠错 需要 head 因此 不等式 出错 理解
海明码(Hamming Code)是利用奇偶性来检错和纠错的校验方法。海明码的构成方法是在数据位之间的确定位置插入k个校验位,通过扩大吗距来实现检错和纠错。对于数据位m的数据,加入k位的校验码,它应满足:
2^k>m+k+1
我一直感觉很难理解是因为校验位的位置每次都是20,21,23,..2k
为什么是这个位置呢?
我的理解是为了使用二进制表示所有的数,对于k位的2进制,最大可用表示的数字为2k-1,所以为码的长度m+k不能超过2k - 1
这就是加入k位校验码的所能表示的极限。
那么位于2^k的数字能表现的位只能是k位上取1的数。
接下来举一个具体的例子来解释我的理解
以1010110这个二进制数为例解释海明码的编码和校验方法。
设数据有n位,校验码有x位。则校验码一共有2x种取值方式。其中需要一种取值方式表示数据正确,剩下2x-1种取值方式表示有一位数据出错。因为编码后的二进制串有n+x位,因此x应该满足
2x-1 ≥ n+x
使不等式成立的x的最小值就是校验码的位数。在本例中,n=7,解得x=4。
校验码在二进制串中的位置为2的整数幂。剩下的位置为数据。如图所示。
位置 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|
内容 | x1 | x2 | 1 | x3 | 0 | 1 | 0 | x4 | 1 | 1 | 0 |
位置 | 0001 | 0010 | 0011 | 0100 | 0101 | 0110 | 0111 | 1000 | 1001 | 1010 | 1011 |
---|---|---|---|---|---|---|---|---|---|---|---|
内容 | x1 | x2 | 1 | x3 | 0 | 1 | 0 | x4 | 1 | 1 | 0 |
为了求出x2,要使所有位置的第二位是1的数据(即形如**1*的位置的数据)的异或值为0。即x21101^0 = 0。因此x2 = 1。
在图中是2、3、6、7、10、11位置是第二位是1的数据
假设位置为1011的数据由0变成了1,校验过程为:
将所有位置形如xxx1, xx1x, x1xx, 1xxx的数据分别异或。
xxx1: 01001^1 = 1
xx1x: 11101^1 = 1
x1xx: 101^0 = 0
1xxx: 011^1 = 1
以上四组中,如果一组异或值为1,说明该组中有数据出错了。xxx1 xx1x 1xxx的异或都为1,说明出错数据的位置为1011。
总结:海明码具有纠错的能力但只是错一位的情况
如果需要纠错d位,需要码距为2d+1,检错d位需要的码距位d+1
注:用例来自https://www.cnblogs.com/scrutable/p/6052127.html
标签:校验位 内容 纠错 需要 head 因此 不等式 出错 理解
原文地址:https://www.cnblogs.com/shuibeng/p/13624478.html