本篇校验均以偶校验为基础
引:因为奇偶校验码只有一个校验位,它只能发现这组数据的错误,但不能明确知道哪一位的编码发生错误,无法纠错,海明码就能解决这一问题。
海明码的设计思路:引入多个校验位,对信息位分组偶校验,通过每个分组校验后的结果,得出错误的位置。
1.需要多少个校验位
编码由信息码+校验码组成
设有n个信息位,k个校验位
则发生错误的情况有n+k种,校验位有种可能性,用校验位的可能性来表示编码的所有可能(正确和错误的),那么要满足
n+k+1。
若有4个信息位(n=4),则校验位至少需要3位(k=3)
n | 1 | 2-4 | 5-11 | 12-26 | 27-57 | 58-120 |
k | 2 | 3 | 4 | 5 | 6 | 7 |
2.确定校验位的位置(信息位:1010)
校验位放在编码的第
的位置
即第一个校验位(i=1)放在编码的第一个位置,第二个校验位放在第二个位置,第三个校验位放在第四个位置,以此类推……(1,2,4,8,16……)
7 | 6 | 5 | 4 | 3 | 2 | 1 |
信息位 | 信息位 | 信息位 | 校验位 | 信息位 | 校验位 | 校验位 |
1 | 0 | 1 | 0 |
3.求校验位的值
有几个校验位就有几个分组
将上段编码分为3组,然后把每个信息位的位置用二进制表示出来
信息位位置 | 二进制表示 |
3 | 011 |
5 | 101 |
6 | 110 |
7 | 111 |
二进制的每一位对应一个校验位,什么意思呢?
举例:十进制3 -->011
二进制 | 0 | 1 | 1 |
对应的校验码位置 | 4 | 2 | 1 |
如果信息码某一位的数字为1,则对应位置的校验码和这个信息码就是一个分组(一个信息码可能和多个校验码是一组)(看不懂这句话看下方表格颜色与分组后结果)
例如:3,5,7的低位都是1,低位对应第一个位置的校验码,则第一个位置的校验码和第3,5,7位的信息码为一组。
总结:将信息码的位置转为二进制形式,从低位开始对应一个位置的校验码,如果这位为1,则这个信息码与对应的校验码是一组
信息位位置 | 二进制表示 |
3 | 011 |
5 | 101 |
6 | 110 |
7 | 111 |
分组后:
第一组: (1,3,5,7)
第二组: (2,3,6,7)
第三组:(4,5,6,7)
成功分组后就把位置对应的二进制抛到脑后了。
接着把每组的每个信息位对应的编码异或,得到这组校验码的值。
7 | 6 | 5 | 4 | 3 | 2 | 1 |
信息位 | 信息位 | 信息位 | 校验位 | 信息位 | 校验位 | 校验位 |
1 | 0 | 1 | 0 |
第一组:位置3位置5
位置7:0
1
1=0
第二组:位置3位置6
位置7:0
0
1=1
第三组:位置5位置6
位置7:1
0
1=0
得到完整的海明码:
7 | 6 | 5 | 4 | 3 | 2 | 1 |
信息位 | 信息位 | 信息位 | 校验位 | 信息位 | 校验位 | 校验位 |
1 | 0 | 1 | 0 | 0 | 1 | 0 |
4.纠错
按照以上步骤得到的编码刚好具有纠察哪一位错误的功能(妙啊)
校验码配合对应组的信息位异或即可纠错(信息位与校验位的异或一定是0)
例:
原信息码:1010010
错误信息码:1010000
将校验码与对应的信息码异或:
第一组:位置1位置3
位置5
位置7:0
0
1
1=0
第二组:位置2位置3
位置6
位置7:0
0
0
1=1
第三组:位置4位置5
位置6
位置7:0
1
0
1=0
010,说明在第二个位置出现错误(注意位序)
如果位置6发生错误,那么第二组与第三组的异或结果为1,最后得到110,说明位置6错误
为什么这么奇妙?
拿有3个校验码这个特例说明一下。
图中p为校验码,d为信息码
若d1(第一位信息码)错误,则p1,p2检验失败,结果异或为1,与p3最终得到011,d1就是在位置3上
若d4错误,则p1,p2,p3检验失败,异或结果全为1,最终得到了111,而d4就是在位置7上
5.补充
海明码的纠错能力:1位
检错能力:2位
增加一位全校验位,使海明码变为偶校验码。
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
全校验位 | 信息位 | 信息位 | 信息位 | 校验位 | 信息位 | 校验位 | 校验位 |
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 |
若每组校验位异或值=0,则信息无错误
每组校验位异或值≠0,且全体偶校验失败,则有一位错误,可纠正
每组校验位异或值≠0,且全体偶校验成功,则有两位错误,需重传。
参考:王道考研b站计算机组成原理视频【2021版】2.1.5_海明校验码_哔哩哔哩_bilibili
百度海明码 汉明码_百度百科
我说的不是很清楚(以我的思路想的),不明白的,可以去看视频。
如有错误和意见,请尽管提出。