海明码的计算方法详解

海明码详解

发现双比特错,纠正单比特错

计算方法:

海明不等式:2^r>=k+r+1
其中r为冗余校验位,
k为该数据信息位
最后的信息数据位数位:k+r

举例:

要发送的数据为:101101

1、则k=6; 求得r=4满足海明不等式

因此有4冗余校验码,因此最终要发送的数据为:信息位+冗余位=10

这4位冗余校验码再数据中的位置是2^r-1

2、因此令这四位用p1,p2,p3,p4来表示

所在位置位为p1=1,p2=2,p3=4,p4=8,如下列表格所示

将原本数据以D1,D2,D3,D4,D5,D6来表示,填入下面表格

3、填入初始数据到相应位置:如下面表格所示

二进制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 十进制 1 2 3 4 5 6 7 8 9 10 代码 P1 P2 D1 P3 D2 D3 D4 P4 D5 D6 原始数据 1 0 1 1 0 1

4、下面将求出冗余码的各个数

方法:将所有要检验的位异或=0

P1: P1所在二进制中的1位为最后一个,因此表中最后一位是1的则是P1要校验的位:

因此:p1⊕D1⊕D2⊕D4⊕D5 令其等于0 将D的实际值代入 求得P1=0

P2⊕D1⊕D3⊕D4⊕D6 令其等于0 将D的实际值代入 求得P2=0

P3⊕D2⊕D3⊕D4 令其等于0 将D的实际值代入 求得P3=0

P4⊕D5⊕D6 令其等于0 将D的实际值代入 求得P4=1

因此要发送的数据为0010011101

接收方怎么判断出错的是哪位呢?

我们可以假设第5位出错,因此接收方接收到的数据是:0010111101

令所有要检验的位异或运算

p1⊕D1⊕D2⊕D4⊕D5=1

P2⊕D1⊕D3⊕D4⊕D6=0

P3⊕D2⊕D3⊕D4=0

P4⊕D5⊕D6 =1

最后从P4~P1方向写出 1001=5

因此判断出第5位出错,只需将第5位进行取反即可对该数据纠错

经验分享 程序员 微信小程序 职场和发展