海明码 : 本质也是利用奇偶性来检错和纠错的检验方法,构成方法是在数据位之间的确定位置上插入k个校验位 ,通过扩大码距实现检错和纠错 。
如果数据位是n位 , 校验位是k位 , 则n和k必须满足以下关系 ; 2^k-1>=n+k。
例 求1011的海明码
带入海明码的关系:
n=4;
设k=1,则2^1-1>=4+1则1>=5不成立,所以k != 1;
设k=2,则2^2-1>=4+2则3>=6不成立,所以k != 2;
设k=3,则2^3-1>=4+3则7>=7成立,所以k = 3;
则1011海明码的校验位需要3位。
海明码的校验位需要放置在2^N位置上,n = 0,1,2,3,4……,而上面得出海明码只需3位,所以2 ^0=1,2 ^1=2,2 ^2=4,校验位放置在1,2,4上。
计算海明码
所有信息位的编号都用2的N次方表示:
7 = 2 ^ 2 + 2 ^ 1 + 1 = 4 + 2 + 1;
6 = 2 ^ 2 + 2 ^ 1 = 4 + 2;
5 = 2 ^ 2 + 1 = 4 + 1;
3 = 2 ^ 1 + 1 = 2 + 1;
7 = 4 + 2 + 1,代表第7位由校验位的4,2,1共同校验,其他位置的信息位同理。
通过上面信息位的位置编号可知,第4位校验位为7、6、5位置的信息位进行了校验,把这三个位置的数进行异或得出校验位。
校验位4是【编号7的信息位】异或【编号6的信息位】异或【编号5的信息位】:1异或 0 异或 1 》1 异或 1 》 0;(相同为0,不同为1);
校验位2:1异或 0 异或 1 》 1 异或 1 》 0;
校验位1:1异或 1 异或 1 》 0 异或 1 》 1;
最终得出1011的海明码是1010101