本文只是介绍对于m位数据使用海明码编码,没有对原理进行详细介绍,相关知识还请查阅其他文章。
理解不对的地方,还望大家指正。
1.奇校验与偶校验
奇校验:传送的数据,1的个数为奇数个;
偶校验:传送的数据,1的个数有偶数个。
2.基本准则
对于m位的数据,使用k位进行校验,满足的基本关系是:
m+k+1 < 2^k
因此,传送的数据总共有m+k 位
3.海明码校验
第一步:k个校验位位置确定
数据排列从1开始,即1,2,3,4.........(m+k),其中
k个校验位,所在的位置分别是2^0,2^1,2^2......2^(k-1),即1,2,4,8,16.....2^(k-1)
m个数据位按照原来的顺序插入到剩余位置。
第二步:k个校验位数值确定
对于第1个校验位,所在位置是2^(1-1)=2^0=1,检验的数据位所在位置是(1),3,5,7,9......
对于第2个校验位,所在位置是2^(2-1)=2^1=2,检验的数据位所在位置是(2),3,6,7,10,11......
对于第3个校验位,所在位置是2^(3-1)=2^2=4,检验的数据所在的位置是(4),5,6,7,12,13,14,15.....
可以得出,对于第k个校验位而言:
所在位置是2^(k-1)
每次检验的数据的个数是2^(k-1)
本次检验与前一次检验,位置间隔,相差2^k
第k个校验位的数值是其所检验的数据位简单相加,若是采用偶校验,数据位的1的个数为偶数,则为0,否则为1;若是采用奇校验,1的个数为偶数则为1,奇数则为0;
4.实例
数据位11001100,计算其海明码,采用偶校验。
第一步:根据公式m+k+1 < 2^k,其中m=8,可知k=4,所以总共有4个校验位+8个数据位=12位
第二步:确定校验位所在的位置,根据第k个校验位所在位置是2^(k-1),可知4个校验位所在位置分别是2^(1-1)=1,2^(2-1)=2,2^(3-1)=4,2^(4-1)=8;
第三步:画图
索引下表 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
数据位 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | ||||
检验位 | 1 | 0 | 1 | 0 | ||||||||
数据编码 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 |
根据:
对于第k个校验位而言:(1)所在位置是2^(k-1);(2)每次检验的数据的个数是2^(k-1);(3)本次检验与前一次检验,位置间隔,相差2^k;
第1个校验位,所在位置 2^(1-1)=1,每次检验2^(1-1)=1个数据位,间隔是2^1=2,由此可知,
第1个校验位检验数据是(1),3,5,7,9,11,13,15.....,所以可知其值P1=1+1+0+1+0=1;
第2个校验位,所在位置2^(2-1)=2,每次检验2^(2-1)=2个数据位,间隔是2^2=4,由此可知,
第2个校验位检验的数据是(2),3,6,7,10,11,14,15......,所以可知其值P2=1+0+0+1+0=0;
第3个校验位,所在位置 2^(3-1)=4,每次检验2^(3-1)=4个数据位,间隔是2^3=8,由此可知,
第3个校验位检验数据是(4),5,6,7,12,13,14,15......,所以可知其值P3=1+0+0+0=1;
第4个校验位,所在位置2^(4-1)=8,每次检验2^(4-1)=8个数据位,间隔是2^4=16,由此可知,
第4个校验位检验的数据是(8),9,10,11,12,13,14,15,24,25......,所以可知其值P4=1+1+0+0=0;
因此,最后传送的数据编码是:101110001100