海明校验码是由RichardHamming于1950年提出、目前还被广泛采用的一种很有效的校验方法。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。
这种海明校验的方法只能检测和纠正一位出错的情况。所以如果有多个错误,就不能查出了。
什么是码距?
两个码组对应位上数字的不同位的个数称为码组的距离,简称码距,又称海明(Hamming)距离。
计算码距的一种方法,就是对两个位串进行异或(xor)运算,并计算出异或运算结果中1的个数。
例如110和011这两个位串,对它们进行异或运算,其结果是:
110⊕011=101;
异或结果中含有两个1,因此110和011之间的码距就等于2。
简单来说,就是,两对应相同位数的不同即码距+1,从首位开始对应;
例如00110和00100码距为1,12345和13344码距为2,Caus和Daun码距为2,1011001和10110110码距d=2
校验码
海明校验码公式(假设为k个数据位设置r个校验位)
2^r-1>=k+r(能得知r和k的关系)
码:101
即
k=3
2^r-r>=k+1=4
易错点:2^r=r个2相乘,不是2乘r
选最小的码距
最小r为3
海明码长度:r+k=3+3=6
注意:海明校验码是放在2的幂次位上的,即“1,2,4,8,16,32······”
所以校验码位数有规律,相对码位对应相对的校验码位数
1: 2
2~4: 3
5~11: 4
12~26: 5
27~57: 6
58~120:7
海明吗1234567
1,2,4是校验位,3,5,6,7是数据位
那么101:
信息位的位置分配是从高位到低位依次存放
第一个1是表格的第6位
1 | 2 | 3 | 4 | 5 | 6 |
---|---|---|---|---|---|
1 | 0 | 1 | |||
r1 | r2 | r3 |
校验原则:被校验的海明位的下标等于所有参与校验该为的校验位的下标之和
1 | r1 | |
---|---|---|
2 | r2` | |
3=1+2 | r1,r2 | 1 |
4 | r3 | |
5=4+1 | r3,r1 | 0 |
6=4+2 | r3,r2 | 1 |
同0,异1
r1:101 =1//101是校验了3、5、6
r2:10=1
r3:01=1
按照从低位到高位的排列顺序得到海明码:111101