纠错编码----海明码(汉明码)
纠错编码----海明码(汉明码)
可以发现双比特错,但只能纠正单比特错。
纠错编码:
不仅可以发现错位,还可以指出错位的位置,为自动纠错提供数据。
海明码:
可以发现双比特错,但只能纠正单比特错。
海明码工作原理:
动一发而牵全身(在数据中有多个校验码,可能一个比特受多个校验码校验,当一个比特出了差错,可以通过校验码看出哪个比特出错)
海明码工作流程:
1.确定校验码位数r
n为有效信息的位数,k位校验码位数: 2^k>=n+k+1; 例如:D=1010 (n=4) 带入上述公式得出 : k = 3 得出对应的海明码位数为 4+3=7位
2.确定校验码和数据的位置
Note:二进制从0001开始,千万不要从0开始 校验码只能放在2的几次方的位置 p1 放在2的0次方 = 1 p2 放在2的1次方 = 2 p3 放在2的2次方 = 4 D = 1 0 1 0 (D4--D1) | 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 | | 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1 | | 0 | | | 剩下的位置放置原数据
3.求出校验码的值
Note:二进制从0001开始,千万不要从0开始 | 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 | | 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1 | | 0 | | | 以p1为例,p1二进制位末位是 1 找所有二进制位位 1 的校验位 p1,D1,D2,D4 ==(?,0,1,1) 令所有要校验的位 异或 = 0: p1,D1,D2,D4 相互异或 (同0异1) 得到p1 = 0 同理求出剩余 p2 找第二位是 1 p3 找第三位是 1 | 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 | | 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
4.检错并纠错
| 二进制 | 0111 | 0110 | 0101 | 0100 | 0011 | 0010 | 0001 | | 数据位 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | | 代 码 | D4 | D3 | D2 | p3 | D1 | p2 | p1 | | 实际值 | 1 | 0 | 1->0 | 0 | 0 | 1 | 0 | 假设D2从 1变成了0 接收端做第三步的逆操作 令所有要检验的位异或运算 p1 = (0,0,0,1) = 1 p2 = 0 p3 = 1 可以看出出错的是第 三 位和第 一 位是 1 的数 也就是 D2 出错了 将D2改正