校验位位数的确定
设数据位有m(message)位,校验位有p(parity)位,则校验码一共有2^p种取值,其中只有一种取值是正确的,所以为了保证校验和对错误数据的修改,必须满足:
2^p-1 >= m + p
解释:右侧是传输数据的总位数(由于校验码也进行传输,所以也有可能出错)。
校验码的位置
按照规定校验码应该放在2^n(n=0,1, 2…)位置上
校验码生成过程
假设要传输的数据是1010,m=4, p=3
位数(二进制编号) | 1(001) | 2(010) | 3(011) | 4(100) | 5(101) | 6(110) | 7(111) |
---|---|---|---|---|---|---|---|
位数对应的编码 | p1 | p2 | 1 | p3 | 0 | 1 | 0 |
从表中可以看到由于校验码p的位数总是处于2的整数倍,所以其位数对应的二进制编码只有一位为1,其余全是0,这也说明任何位数都可以由p表示。
求取p
要求p首先需要校验位和信息位建立关系
第三位为1 | p1(001) | m3(011) | m5(101) | m7(111) |
---|---|---|---|---|
第二位为1 | p2(010) | m3(011) | m6(110) | m7(111) |
第一位为1 | p3(100) | m5(101) | m6(110) | m7(111) |
代入数据1010
校验位 | 奇校验 | 偶校验 | - | - | - |
---|---|---|---|---|---|
p1(001) | 0 | 1 | 1 | 0 | 0 |
p2(010) | 1 | 0 | 1 | 1 | 0 |
p3(100) | 0 | 1 | 0 | 1 | 0 |
这里说的奇校验和偶校验指的是校验位和信息位关系的二进制编码1的个数加一后为奇数还是偶数。
举例
假设发射端分别发射了奇校验的海明码(确保发射时码一定是正确的)
奇 | 0110010 |
---|
假设接收端收到的奇校验数据为
- | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
奇 | 0 | 1 | 1 | 0 | 1 | 1 | 0 |
e1 | p1 | m3 | m5 | m7 |
---|---|---|---|---|
e2 | p2 | m3 | m6 | m7 |
e3 | p3 | m5 | m6 | m7 |
带入数据
e1 | 0 | 1 | 1 | 0 |
---|---|---|---|---|
e2 | 1 | 1 | 1 | 0 |
e3 | 0 | 1 | 1 | 0 |
按照奇校验规则
e3 | e2 | e1 |
---|---|---|
1 | 0 | 1 |
说明第五位出错了,正确的二进制数应该为
- | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
奇 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
如果没有出错e3,e2,e1应该全是0