汉明码
编码过程
- 先根据信息位位数确定校验位个数
- 按规则排列信息位与校验位
- 给信息位分组并且分配一个相应的校验位
- 根据分组中的信息位确定校验位的取值
校验位位数
k个校验位必须能确定n个信息位和k个校验位传输时是否发生bit跳变
k个校验位能表示2k种情况,其中1种为无错误,剩下的2k-1种情况要能表示n个信息位和k个校验位哪一个出错了
因此校验位的位数k必须满足\(2^{k} - 1 \ge n + k\)
信息位与校验位的位置
- 将校验位放入2k(k>=0)的位置其余位置依次放入信息位
分组规则
- 将所有序号写成2k(k>=0)之和(如 15=8+4+2+1),其中含有相同的2k(k>=0)的为一组(如下图)
- 也可以这样理解 将序号转为k位(k为校验位个数)2进制数, 第i位为1的分到第i分组
校验位的取值
由于海明(汉明)码采用的是偶校验的策略, 所以每个分组中1的个数为偶数个
- 肉眼观察分组中1的个数, 然后判断校验位为1还是0
- 或者将分组中的信息位相异或
纠错
1bit发生错误可以纠错 2bit发生错误可以发现但无法纠错
将P1,P2,P3……所在的分组中的bit位相异或得到S1,S2,S3……
将S1,S2,S3……按照低位到高位的顺序组成二进制数,若为0则无错,若不为零则其对应的十进制数就是发生bit跳变的bit的序号