(软考)傻子都能看懂的---海明码

看了很多大佬的解析,自己来整理一套详尽到通俗易懂的。

海明码定义:具有纠正一位错误的能力。

1、确定校验位个数

核心公式:2^r ≥k+r+1   (其中r代表校验个数)

(重要!)从公式带入计算可得一张表:

记住这张表,选择题就可以秒答。

(A:假设有8位信息位,则需要插入____位校验码呀?Q: 4位。) 

2、确定校验位的位置

核心:校验码Pi 必须是在2的n次方位置,即只能放在H1,H2,H4,H8...

注意:这里指的位置都是从左向右排序,即:...H5 H4 H3 H2 H1

以下以4位信息码为例进行编码。

信息码组:1101  -----即: D3 D2 D1 D0 = 1 1 0 1

根据公式:2^r ≥k+r+1(或者表)得校验位 r=3,即校验位为 P1 P2 P3。

又因为上述Pi 只能放在2的n次方的位置,所以 P1插入H1,P2插入H2,P3插入H4。

信息码填入剩下的位置。

即:D0为H3,D1为H5,D2为H6,D3为H7

整理可得: H7 H6 H5 H4 H3 H2 H1

                = D3 D2 D1 P3 D0 P2 P1

代入数字  =  1   1    0  P3  1   P2 P1

3、计算校验位 Pi

根据:H3 = H1+H2   (右下标之和等于左下标。)

           H5 = H1+H4

           H6 = H2 + H4

           H7 = H1 + H2 + H4

可得:P1(H1) = H3 ⊕ H5 ⊕ H7 (⊕表示异或,即:与H1有关的信息码进行异或)

           P2(H2) = H3 ⊕ H6 ⊕ H7

           P3(H4) = H5 ⊕ H6 ⊕ H7

计算可得:P1 = 0,P2 = 1,P3 = 0

所以:最终海明码: H7 H6 H5 H4 H3 H2 H1 = 1 1 0 0 1 1 0

4、纠错和检错

设检测位G1,G2,G3:

则有:G1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 ;

           G2 = P2 ⊕ H3 ⊕ H6 ⊕ H7;

           G3 = P3 ⊕ H5 ⊕ H6 ⊕ H7;

当偶校验时:G3 G2 G1 值皆为0则数据无误,若G3 G2 G1不全为0说明数据传输有误,且其十进制指出了错误发生的位置。

(例:G3 G2 G1 = 101,其十进制为 5 ,即:H5 发生了错误,H5的位置为D1,则说明D1传输错误,则将D1的位置取反,即可纠错。)

所以海明码定义:具有纠正一位错误的能力。

OVER,以上如有错误,温柔指出。

 

 

         

 

 

你可能感兴趣的:((软考)傻子都能看懂的---海明码)