问题
编码前有效信息为10011101,请求解对应的海明码
位数
如何海明码(校验码)的位数?参考如下公式:
2^k >= N+k+1
其中N为有效信息位数,k为校验码位数。
如上述问题,有效信息有8位,所以N = 8 代入上述公式,满足条件成立的最小值 k = 4,所以海明码(校验码)的位数为4
位置
海明码一共有4位,那它们的具体位置在哪里呢?位置公式如下:
2^n(2^0,2^1,2^2...)
有效信息(8位)+ 校验码(4位) = 12位,我们通过表格来定位校验码位置,如下表所示,P代表校验位,D代表信息位:
码位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
码值 | P1 | P2 | D1 | P3 | D2 | D3 | D4 | P4 | D5 | D6 | D7 | D8 |
校验位 | 2^0 | 2^1 | 2^2 | 2^3 |
求值(编码)
求值公式(以偶校验求值):
- Pn的值,受验证位中所有1的个数的影响,当1为偶数个时Pn = 0,当1为奇数个时 Pn = 1。
- 验证位 = Pn所在的位数起,校验n位,然后跳过n位,以此规则循环到末尾。(例如所在位数在第5位,则校验5位,然后跳过5位)
码位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
码值 | P1 | P2 | D1 | P3 | D2 | D3 | D4 | P4 | D5 | D6 | D7 | D8 |
校验位 | ? | ? | 1 | ? | 0 | 0 | 1 | ? | 1 | 1 | 0 | 1 |
P1验证位 | √ | √ | √ | √ | √ | √ |
P1验证位目前有3个1,为保证偶校验,所以P1 = 1。
码位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
码值 | P1 | P2 | D1 | P3 | D2 | D3 | D4 | P4 | D5 | D6 | D7 | D8 |
校验位 | 1 | ? | 1 | ? | 0 | 0 | 1 | ? | 1 | 1 | 0 | 1 |
P1验证位 | √ | √ | √ | √ | √ | √ | ||||||
P2验证位 | √ | √ | √ | √ | √ | √ |
P2验证位目前有3个1,为保证偶校验,所以P2 = 1。
码位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
码值 | P1 | P2 | D1 | P3 | D2 | D3 | D4 | P4 | D5 | D6 | D7 | D8 |
校验位 | 1 | 1 | 1 | ? | 0 | 0 | 1 | ? | 1 | 1 | 0 | 1 |
P1验证位 | √ | √ | √ | √ | √ | √ | ||||||
P2验证位 | √ | √ | √ | √ | √ | √ | ||||||
P3验证位 | √ | √ | √ | √ | √ |
P3验证位目前有2个1,为保证偶校验,所以P3 = 0。
码位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
码值 | P1 | P2 | D1 | P3 | D2 | D3 | D4 | P4 | D5 | D6 | D7 | D8 |
校验位 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
P1验证位 | √ | √ | √ | √ | √ | √ | ||||||
P2验证位 | √ | √ | √ | √ | √ | √ | ||||||
P3验证位 | √ | √ | √ | √ | √ | |||||||
P4验证位 | √ | √ | √ | √ | √ |
P4验证位目前有3个1,为保证偶校验,所以P4 = 1。
至此所有编码工作结束:111000111101
纠错(解码)
正确的海明码为111000111101,假设在传输过程中出现了错误,将第5位由0变成1了,则接收端实际接受的是111010111101。
将P1、P2、P3、P4所负责验证的码位取名为组,即得到对应的G1、G2、G3、G4四个组,然后分别用奇偶校验法去验证各组码值定位错误。
码位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
码值 | P1 | P2 | D1 | P3 | D2 | D3 | D4 | P4 | D5 | D6 | D7 | D8 |
校验位 | 1 | 1 | 1 | 0 | 1(异常) | 0 | 1 | 1 | 1 | 1 | 0 | 1 |
P1验证位 | √ | √ | √ | √ | √ | √ | ||||||
P2验证位 | √ | √ | √ | √ | √ | √ | ||||||
P3验证位 | √ | √ | √ | √ | √ | |||||||
P4验证位 | √ | √ | √ | √ | √ | |||||||
G1 | 1 | 1 | 1 | 1 | 1 | 0 | ||||||
G2 | 1 | 1 | 0 | 1 | 1 | 0 | ||||||
G3 | 0 | 1 | 0 | 1 | 1 | |||||||
G4 | 1 | 1 | 1 | 0 | 1 |
- G1验证组有5个1,奇数,使用异或运算G1 = 1。
- G2验证组有4个1,偶数,使用异或运算G2 = 0。
- G3验证组有3个1,奇数,使用异或运算G3 = 1。
- G4验证组有4个1,偶数,使用异或运算G4 = 0。
计算法
校验位降序排列G4 G3 G2 G1,设出错位为N,则得到公式N = 0101 换成十进制是5,所以第5位出现了传输错误。
图表法
通过图标G1和G3共同验证的码位是5和7,使用排除法纠错确定是第5位发生了错误。
综上,纠错后的信息为:111000111101