纠错编码----海明码(汉明码)
可以发现双比特错,但只能纠正单比特错。
纠错编码:
不仅可以发现错位,还可以指出错位的位置,为自动纠错提供数据。
海明码:
可以发现双比特错,但只能纠正单比特错。
海明码工作原理:
动一发而牵全身(在数据中有多个校验码,可能一个比特受多个校验码校验,当一个比特出了差错,可以通过校验码看出哪个比特出错)
海明码工作流程:
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改正