码迷,mamicode.com
首页 > 其他好文 > 详细

计算机组成结构 海明校验码

时间:2020-09-17 16:50:13      阅读:21      评论:0      收藏:0      [点我收藏+]

标签:校验位   内容   纠错   需要   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这个二进制数为例解释海明码的编码和校验方法。

编码

1.确定校验码的位数x

设数据有n位,校验码有x位。则校验码一共有2x种取值方式。其中需要一种取值方式表示数据正确,剩下2x-1种取值方式表示有一位数据出错。因为编码后的二进制串有n+x位,因此x应该满足

2x-1 ≥ n+x

使不等式成立的x的最小值就是校验码的位数。在本例中,n=7,解得x=4。

2.确定校验码的位置

校验码在二进制串中的位置为2的整数幂。剩下的位置为数据。如图所示。

位置 1 2 3 4 5 6 7 8 9 10 11
内容 x1 x2 1 x3 0 1 0 x4 1 1 0

3.求出校验位的值

位置 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的数据

因此:因此1010110的海明码为01110100110。

校验

假设位置为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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!