【细碎知识4】数据校验——如何求海明码?

1 海明码功能介绍

通过向数据位(Di)中插入几位校验位(Ci),能够做到既能发现有没有错,又能发现错误出现的位置。海明码H由数据码D和校验码C组成。

2 求海明码的步骤

根据题目来说明海明码的求解步骤

题目:对8位数据01101100:
(1)求其海明码;
(2)如果接收数据为01001100,说明如何根据海明码找到出错位置。

符号说明:

rkCiDiHi
校验位C的个数数据位D的个数第i位校验码第i位数据码第i位海明码

2.1 由数据个数k得到校验位个数r

公式为:
在这里插入图片描述
这道题中,k=8,所以得到r=4

2.2 按照校验码对海明码进行分组

由2.1可知,有8位数据码,4位校验码,因此海明码有12位,列如下表格:

海明码H1H2H3H4H5H6H7H8H9H10H11H12
数据/校验码C1C2D8C4D7D6D5C8D4D3D2D1

注意:
(1)先写第一行海明码,从H1到H12
(2)然后写校验码:校验码的下标和海明码一致,第i位校验码的下标位2^i
(3)最后从后往前补充数据码Di

然后根据校验码对海明码进行分组,即将海明码分为4组:C1,C2,C3,C4,分组依据为:
对于Ci组,若i = m + n + j + …,(其中,m、n、j为校验码的下标,即只能是2的某次方)则Hm,Hn,Hj,…属于Ci组
看这个题:
在这里插入图片描述
因此,分组情况为:
C1:H3,H5,H7,H9,H11
C2:H3,H6,H7,H10,H11
C4:H5,H6,H7,H12
C8:H9,H10,H11,H12
注意:Ci组中不包含Ci本身,如:C1组中不包含H1(即C1)

2.3 根据分组情况,求校验位Ci

我们现在已知数据位Di,需要求Ci,才能得到海明码:

海明码H1H2H3H4H5H6H7H8H9H10H11H12
数据/校验码C1C2D8C4D7D6D5C8D4D3D2D1
结果未知未知0未知110未知1100

求Ci的方法:将Ci组的组员进行异或:
C1 = H3异或H5异或H7异或H9异或H11=0
同理,C2=0,C3=0,C4=0
所以:

海明码H1H2H3H4H5H6H7H8H9H10H11H12
数据/校验码C1C2D8C4D7D6D5C8D4D3D2D1
结果000011001100

海明码为:000011001100

2.4 如何检验某一位出错

在2.2分组中,如果Ci的分组里加上Ci本身,就构成了Pi分组,即
P1:H1,H3,H5,H7,H9,H11
P2:H2,H3,H6,H7,H10,H11
P4:H4,H5,H6,H7,H12
P8:H8,H9,H10,H11,H12
Pi的求法和Ci类似:将组员进行异或
P1 = H1异或H3异或H5异或H7异或H9异或H11
在这道题中,如果接收的数据为01001100(H6变成0),则
P1 = H1异或H3异或H5异或H7异或H9异或H11=0
同理,
P2=1
P4=1
P8=0
即位置为0110(6),将H6位置的取反即可得到正确数据。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SinHao22

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值