海明校验
通过例子来说明:
设有信息码:1011,
校验码位数,公式2^r >= x + r +1
,其中 x 的值为 信息码的位数,则 2^r >= 4 + r + 1,求解的 r >= 3,去最小值 3
将校验位插入信息吗,根据 2^r 计算位置并插入
7 | 6 | 5 | 4 | 3 | 2 | 1 | 位数 |
---|---|---|---|---|---|---|---|
L4 (1) | L3 (0) | L2 (1) | L1 (1) | 信息位 | |||
r2 | r1 | r0 | 校验位 |
根据信息位的位置,对校验位的值进行拆分:
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。得到的值与正确值一致。