海明验证示例

海明校验

通过例子来说明:

设有信息码:1011,

校验码位数,公式2^r >= x + r +1,其中 x 的值为 信息码的位数,则 2^r >= 4 + r + 1,求解的 r >= 3,去最小值 3

将校验位插入信息吗,根据 2^r 计算位置并插入

7654321位数
L4 (1)L3 (0)L2 (1)L1 (1)信息位
r2r1r0校验位

根据信息位的位置,对校验位的值进行拆分:

7 = 2^2 + 2^1 + 2^0

6 = 2^2 + 2^1

5 = 2^2 + 2^0

3 = 2^1 + 2^0

计算校验位:

观察上面式子中,校验位的使用频率和位置,取该位置的信息码,做异或运算。

r2 <=> 2^2 ,r1 <=> 2^1,r0 <=> 2^0

r2 = L4 ⊕ L3 ⊕ L2 = 1 ⊕ 0 ⊕ 1 = 0

r1 = L4 ⊕ L3 ⊕ L1 = 1 ⊕ 0 ⊕ 1 = 0

r0 = L4 ⊕ L2 ⊕ L1 = 1 ⊕ 1 ⊕ 1 = 1

将计算完成的校验码插入到信息码,获得海明码:1010101

关于校验与纠错

校验

获取到一个海明码(1110101),未知正确值(1010101)。当前只知道 1110101,验证是否正确。

由 海明码 1110101 可知,共有7位,所以,信息码为 1111,校验码为001

根据信息码重新计算校验码,重复上方的步骤,可以得到校验码 111,校验码不一致,所以内容出错。

纠错

由于重新计算的校验码与接收到的校验码不一致,所以出错,通过对这两个校验码做异或运算可以得到出错的位置。

001 ⊕ 111 = 110 => 6

所以第六位出错。因为每个位置的值只有 0 1 两种值,所以取反即可。得到 1010101。得到的值与正确值一致。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值