说明:可以先看实际举例再回头看其他说明便于快速理解。
一、特点
既可检错也可纠错
二、用途背景
原因:信息传输时因为种种原因会出现部分信息发生改变的情况,即二进制信息的某个别位出现错误的情况。
用途:通过在原信息的特定位置加上海明码的方法,来实现对一串数据位中的某个(注意是“某个”,大多数情况下只会出现一个位出错,
若多位出错则该校验法失效)出错位的纠错(即错误定位和纠正)
二、预备定义和文本约定
- 信息位:用于存放要传输信息数据的二进制0和1;
- 校验位:即在原本信息位中插入的二进制校验码0和1。
- 信息码:信息位构成的二进制序列
- 海明校验码(后面简称校验码):由所有校验位组成的二进制序列
- I 1 _ 1 1……I n _ n n:第一到第n个信息位
- r 0 _0 0……r n _ n n:第一到第n个校验位
三、主要步骤
- 确定校验位个数:根据要传输的信息位个数,确定要插入的校验位个数,要满足2r ≥ I + r + 1(r为校验位个数,I为信息位个数)
- 确定校验位插入位置:由低位到高位依次插入所有位,要求2n位置下插入的都是校验位
- 确定校验码并插入:1. 求出每个信息位的位置十进制拆解成2的幂次方多项式之和,每个系数不为0的幂次方(假设为n)确定将影响r n _n n的值的信息位。(比如:第7位要插入I 4 _4 4,十进制位置7拆解为22+21+20,即说明这个信息位I 4 _4 4会影响r 2 _2 2,r 1 _1 1,r 1 _1 1)。然后r n _n n=每个会影响该校验位的信息位的异或
- 数据传输
- 接收数据
- 重新求校验码:因为接受的数据校验位的位置可以确定,即用忽略掉所有2n位后得到的信息位按照3重新求得校验码
- 校验码比对:取接收的校验码和重新求得的校验码按位进行异或操作,得到一个与校验码的等长二进制序列.
- 错误定位 : 将上述等长序列化为十进制,即得到出错位所在的位置。
- 纠错:对接收数据中的出错位取反
四、核心思想
n个校验位能记录至多2n-1个位的奇偶信息:
- **为什么-1?**这里是为了巧妙利用校验位的安插位置,使得校验位的改变,能表示出错的十进制位置化成二进制后,对应位的改变。传输数据的n个位从1开始。因此去掉全0的序列。
- (去掉全0的序列后) n个校验位组成的二进制序列有2n种,每种序列化为十进制d,确定传输数据中d位置的位的状态,通过传输前后校验码的异或比对,即能确定状态发生改变的位的位置,即实现的错误定位。而对二进制的纠错,只需对出错位取反即可。
四、实际举例
假设要传输二进制信息10111,五位信息位为I5I4I3I2I1,而接收到的信息码为11111,整个传输及纠错流程又是怎样?
- 确定校验位个数r
代入公式2r ≥ I + r + 1 后,2r ≥ 5 + r + 1,得到r=4. - 确定校验位插入位置
校验位个数确定,总位数就确定为9位了。对应2n位置下将插入的都是校验位,剩下的依次将插入信息位,如下表:
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 总位数 |
---|---|---|---|---|---|---|---|---|---|
I5 | I4 | I3 | I2 | I1 | 信息位 | ||||
r3 | r2 | r1 | r0 | 校验位 |
- 确定校验码并插入
∵I5的位置为9 = 23+20,影响r3,r0.
I4的位置为7 = 22+21+20,影响r2,r1,r0.
I3的位置为6 = 22+21,影响r2,r1.
I2的位置为5 = 22+20,影响r2,r0.
I1的位置为3 = +21+20,影响r1,r0.
r0 = I1 ⊕I2⊕ I4⊕I5 = 1
r1 = I1 ⊕ I3⊕I4 = 0
r2 = I2⊕ I3⊕ I4 = 0
r3 = I5 = 1
得到校验码为:1001
插入后如下表:
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 总位数 |
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 1 | 1 | 信息位 | ||||
1 | 0 | 0 | 1 | 校验位 |
- 传输后接收后重新计算海明校验码
接收到的数据如下表
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 总位数 |
---|---|---|---|---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 信息位 | ||||
1 | 0 | 0 | 1 | 校验位 |
同步骤3,求得新校验码为:1110
-
校验码比对
用新校验码1111与接收到的旧校验码1001进行按位异或运算,得到:0111 -
错误定位
将5求得的比对结果化为十进制为7,即得出接收数据中,错误位置为7 -
纠错
对错误位置按位取反
9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 总位数 |
---|---|---|---|---|---|---|---|---|---|
1 | 1->0 | 1 | 1 | 1 | 信息位 | ||||
1 | 0 | 0 | 1 | 校验位 |
得到信息码为10111,即为正确信息
## 如有谬误,欢迎指正