纠错编码——海明码

海明码是一种可以发现双比特位错误,纠正单比特位错误的纠错编码。

冗余码的位数

在检错编码中我们用到了二进制异或的运算方式,海明码也用到了这种方式。只是它的冗余码位数并不是像奇偶校验时固定的帧首的0或1。通过海明不等式来求海明码的冗余码的位数

 例如:

已经知道信息位的个数为6时,通过海明不等式可以求出来冗余信息位个数为4。

可能有一些小伙伴会疑惑为什么这样求冗余码的个数,在下面了解原理后或许就会懂了。

 冗余码的位置

为了能够找到单比特位错误的位置,海明码的冗余码是在二进制数的每一位上,即2的几次方的位置(或许这么说不好理解,我在这里举一个二进制数的例子,其实说人话就是1,2,4,8......二的n次方)

例如:

数据信息  101101 我们在上面求过了冗余码的个数,这里可以知道冗余码的个数为4.

  • 冗余码是在二进制数的每一位上,二进制的数第一位就是000001,那么第一位冗余码p1应在第一位
  • 二进制数的第二位是000010,那么第二位冗余码p2就应在第二位。
  • 二进制数的第三位是000100,那么第三位冗余码p3就应在第四位。
  • 二进制数的第四位是001000,那么第四位冗余码p4就应在第八位

 即下图中的p1,p2等等所在的位置。

剩下的位置由数据信息顺序填满,即D1,D2等等位置。

那么现在有个新的问题出现了:只有数据部分有实际值(即我们的数据101101),我们只求了冗余码的位置,没有求冗余码的值,那里仍然是空的,下面我们就要求冗余码的实际值了。

 冗余码的实际值

以上面图为例,我们来学习怎么求冗余码的值。

第n位冗余码的实际值:通过这个公式计算实际值:

二进制数第n处所有为1的实际值进行异或后结果为0

  1. 以第一位为例冗余码P1的实际值:1⊕3⊕5⊕7⊕9=0(二进制数第一位为1的数,他们的二进制数为看上图第一行的共性为第一位为1——xxx1)即P1=1⊕0⊕1⊕0=0,所以冗余码P1的实际值为0
  2. 第二位冗余码的实际值:P2⊕3⊕6⊕7⊕10(二进制数第二位为1的数,他们的二进制数为看上图第一行的共性为第二位为1——xx1x即P2=1⊕1⊕1⊕1=0,所以冗余码P2的实际值为0
  3. 同理第三位冗余码的实际值为想x1xx进行异或和,为P3=0⊕1⊕1=0,冗余码第三位的实际值为0
  4. 第四位冗余码为1xxx进行异或和,为P4=0⊕1=1,冗余码第四位的实际值为1

 所以我们就可以得到下表,知道了冗余码的实际值就得到了海明码。

 上例中的海明码为0010011101,4位冗余码与6位数据部分。得到了海明码,发送端将其发送到接收端。

接收端接收后的处理

接收端接收到海明码以后,会和我们求冗余码的实际值一样做一个相同的操作——求所有位二进制数某一位的异或和(上例中的xxx1,xx1x,x1xx,1xxx)因为我们求冗余码时令所有的异或和结果为0,如果某一位发生跳变,那么那一位的异或和结果将会为1,如果没有发生跳变正常传输,那么结果就正常为0。

纠正单比特跳变

我们举一个发生单比特位跳变的例子来看。假设第五位发生了跳变——0101位发生跳变,在上面的例子中原来该处的实际值为0,现在跳变成1.

  1. 0101位,即二进制的第一位和第三位。
  2. 冗余码第一位在原来第五位(0101)为0时异或和为0,发生跳变后异或和结果应为1
  3. 冗余码第二位与二进制第二位为1的其它数进行异或和运算与0101无关(就不管XX1X的事情嘛),异或和结果为0
  4. 同理冗余码第三位在0101位没有发生跳变时异或和为0,发生跳变后异或和结果应为1
  5. 第四位与第二位原因相同,异或和结果为0
  6. 所以我们接收到的海明码进行处理后得到0101(第一位冗余码为个位,其次向上)
  7. 即发现第五位发生跳变可以进行纠正

 发现双比特位错误

我们在上面单比特跳变时候举了第五位发生跳变,这里举例5,6发生了跳变

第五位(0101)发生跳导致——处理结果第一位与第三位受到影响

第六位(0110)发生跳变——处理结果第二位与第三位受到影响

所以异或和后的结果应该是第一位和第二位受到影响,即0011,但我们的第三位并没有发生跳变。因此在发生双比特位跳变的情况下,我们并不能确定发现错误的位置,只能知道发生了错误

 这里有了一个新的问题——我们不知道海明码传输到底发生了几位错误,即上面单比特第五位0101错误时,我们不知道到底是发生了双比特错误还是第五位发生了跳变。

这可以通过海明校验与奇偶校验结合使用,我们在最后一位加上一位奇偶校验码。

检测的时候会计算出海明码的校验码E+奇偶校验码P,有以下四种情况:

1/ E=0,P=0 没有错误皆大欢喜

2/ E≠0,P=1 有一位错,并可以纠正错误

3/ E≠0,P=0 有两位错,但不能纠正

4/ E=0, P=1 奇偶校验位出错

缺点:海明校验的本质仍然是每一步使用的奇偶校验,如果第3位(0011),第五位(0101),第六位(0110)都发生跳变时,海明校验的结果仍为0000,会产生错误的判断,即上述的情况4

 

 

 ,

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值