网络工程师-海明码

时间:2021-08-23 14:34:34

本文只是介绍对于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