看了很多大佬的解析,自己来整理一套详尽到通俗易懂的。
海明码定义:具有纠正一位错误的能力。
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,以上如有错误,温柔指出。