校验位的规则
1. 校验位的位置
规则(位置从右边算起):
第一个位置为 20= 1
第二个位置为21 = 2
第三个位置为22 = 4
第n个位置为 2n
2. 校验位的个数规则
满足为:2r > x+r+1 (其中 r 为校验位的个数, x 为员信息码的个数)
例如: 有一个信息吗为:1011
则 x = 4
23 > 4 + 3 + 1 成立
所以: r = 3
总共就是7位,下面用一个表格来说明下:
第七位 | 第六列 | 第五位 | 第四位 | 第三位 | 第二列 | 第一位 |
---|---|---|---|---|---|---|
1 | 0 | 1 | r3 | 1 | r2 | r1 |
其中r0 r1 r2就是 海明校验码的位置
3. 海明码的解析规则
接下来还是用上面的表格说明:
第七位 | 第六列 | 第五位 | 第四位 | 第三位 | 第二列 | 第一位 |
---|---|---|---|---|---|---|
111 | 110 | 101 | 100 | 011 | 010 | 001 |
x4=1 | x3=0 | x2=1 | r3 | x1=1 | r2 | r1 |
这里我添加了一列记录所在位数的2进制,在下面的解析过程中可以用到
解析r1 : r1为第一位,所以找 x1 x2 x3 x4 中的第一位为1的数为: x1 x2 x4 将这些数作亦或运算
推导出 r1 = x1 (XOR) x2 (XOR) x4 = 1 (异或:同0异1)
解析r2 : r2为第二位,所以找 x1 x2 x3 x4 中的第二位为1的数为: x1 x3 x4 将这些数作亦或运算
推导出 r2 = x1 (XOR) x3 (XOR) x4 = 0
解析r3 : r3为第三位,所以找 x1 x2 x3 x4 中的第三位为1的数为: x2 x3 x4 将这些数作亦或运算
推导出 r3 = x2 (XOR) x3 (XOR) x4 = 0
得出海明码为: 001
最终得出的海明码转码后的结果为: 1010101
3. 海明码的纠错过程
数据没有出错得到的结果为: 1010101
如果修改第6位数据为:1110101
根据这个数据可以导出:
r1 = 1 r2 = 0 r3 = 0
x1 = 1 x2 =1 x3 =1 x4 = 1
按照原来的规则亦或操作:
r1 (XOR) x1 (XOR) x2 (XOR) x4 = 0 (如果没有出现错误值应该为位 0)
r2 (XOR) x1 (XOR) x3 (XOR) x4 = 1 (如果没有出现错误值应该为位 0)
r3 (XOR) x2 (XOR) x3 (XOR) x4 = 1 (如果没有出现错误值应该为位 0)
得到 110 = 6 故第6位出现错误(将第6位的数据取反就可以实现纠正);