海明码的校验和纠错

以数据码1010为例,海明码的编码原理如下

(1)确定海明码的位数

设n是有效信息的位数(数据码1010,所以n=4),k是校验码的位数,n和k应满足

 n+k\leq2^{k}-1

这里k取3。

将信息位分为4位:

D_{4}D_{3}D_{2}D_{1}(1010)

校验位3位:

P_{3}P_{2}P_{1}

对应的海明码是7位:

H_{7}H_{6}H_{5}H_{4}H_{3}H_{2}H_{1}

(2)确定校验码的分布

需要将数据码和校验码按一定规律,插入到对应的海明码位置上。

直接给出规定:P_{i} 放在海明码号为 2^{i-1} 的位置上。

那么 P_{1} 就放在 H_{1} 上,P_{2} 放在 H_{2} 上,P_{3} 放在 H_{4} 上,再将数据码按原来顺序插入,可以得到:

H_{7}H_{6}H_{5}H_{4}H_{3}H_{2}H_{1}
D_{4}D_{3}D_{2}P_{3}D_{1}P_{2}P_{1}

(3)分组形成校验关系

这一步需要确定的是,每个信息位由哪几个校验位进行管理

P_{1}P_{2}P_{3}
D_{1} 放在 H_{3} 上,3 = 1 + 2,所以由P_{1}P_{2}校验12
D_{2} 放在 H_{5} 上,5 = 1 + 4,所以由P_{1}P_{3}校验14
D_{3} 放在 H_{6} 上,6 = 2 + 4,所以由P_{2}P_{3}校验24
D_{4} 放在 H_{7} 上,7 = 1 + 2 + 4  ,所以由P_{1}P_{2}​​​​​​​P_{3}校验124

将下标转换为二进制更容易理解,P_{1}P_{2}​​​​​​​P_{3} 的对应的海明码号(H)的下标二进制表示为

P_{1}H_{1}1
P_{2}H_{2}10
P_{3}H_{4}100

假如有第四位校验位,那么他对应的海明码微应该是8,二进制为 1000,依次类推。

二进制分组的表示为

P_{1}P_{2}P_{3}
D_{1} 放在 H_{3} 上,11(3) = 1 + 10(2),所以由P_{1}P_{2}校验110
D_{2} 放在 H_{5} 上,101(5) = 1 + 100(4),所以由P_{1}P_{3}校验1100
D_{3} 放在 H_{6} 上,110(6) = 10(2) + 100(4),所以由P_{2}P_{3}​​​​​​​校验10100
D_{4} 放在 H_{7} 上,111(7) = 1 + 10(2) + 100(4)  ,所以由P_{1}P_{2}​​​​​​​P_{3}校验110100

信息位是可以由多个校验位的唯一组合确定。

(4)校验位取值

校验位 P_{i} 的取值,由和这个校验位有关的信息位全部求异或

P_{1} = D_{1}\bigoplus D_{2}\bigoplus D_{4} = 0\bigoplus 1\bigoplus 1 = 0

P_{2} = D_{1}\bigoplus D_{3}\bigoplus D_{4} = 0\bigoplus 0\bigoplus 1 = 1

P_{3} = D_{2}\bigoplus D_{3}\bigoplus D_{4} = 1\bigoplus 0\bigoplus 1 = 0

那么1010对应的海明码为101010,加出的是校验码,其余的是信息位。

(5)海明码校验原理

分别用校验位和对应的所有信息位求异或,如果得到的值为0,说明没有出错,反之出错

S_{1} = P_{1}\bigoplus D_{1}\bigoplus D_{2}\bigoplus D_{4}

S_{2} = P_{2}\bigoplus D_{2}\bigoplus D_{3}\bigoplus D_{4}

S_{3} = P_{3}\bigoplus D_{2}\bigoplus D_{3}\bigoplus D_{4}

可以看到,在每个式子中,与校验位异或的信息位,正是求得其本身的数据。

S的取值有以下三种情况:

1.假如数据传输没有出错,那么相当于S1就等于P1与P1进行异或,结果一定是0。

2.S1中出现了一位传输错误,那么P1或者后面数据一定会发生变化,一定不等于P1,得到的结果就是1。

3.S1中出现了多位传输错误,但是P1的值没有发生变化。因为一个数据变化会影响多个S的值,所以其他S一定会出现不等于0的情况,那么相当于回到了第二种情况

如何找到出错的是哪位:

将三个S组合,得到的值就是出错的位数,假设 S_{3}S_{2}S_{1} = 001 ,那么出错的位数就是

H_{1}(001)

直接将该位取反,就达到了纠错的目的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值