1 海明码功能介绍
通过向数据位(Di)中插入几位校验位(Ci),能够做到既能发现有没有错,又能发现错误出现的位置。海明码H由数据码D和校验码C组成。
2 求海明码的步骤
根据题目来说明海明码的求解步骤
题目:对8位数据01101100:
(1)求其海明码;
(2)如果接收数据为01001100,说明如何根据海明码找到出错位置。
符号说明:
r | k | Ci | Di | Hi |
---|---|---|---|---|
校验位C的个数 | 数据位D的个数 | 第i位校验码 | 第i位数据码 | 第i位海明码 |
2.1 由数据个数k得到校验位个数r
公式为:
这道题中,k=8,所以得到r=4
2.2 按照校验码对海明码进行分组
由2.1可知,有8位数据码,4位校验码,因此海明码有12位,列如下表格:
海明码 | H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | H9 | H10 | H11 | H12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数据/校验码 | C1 | C2 | D8 | C4 | D7 | D6 | D5 | C8 | D4 | D3 | D2 | D1 |
注意:
(1)先写第一行海明码,从H1到H12
(2)然后写校验码:校验码的下标和海明码一致,第i位校验码的下标位2^i
(3)最后从后往前补充数据码Di
然后根据校验码对海明码进行分组,即将海明码分为4组:C1,C2,C3,C4,分组依据为:
对于Ci组,若i = m + n + j + …,(其中,m、n、j为校验码的下标,即只能是2的某次方)则Hm,Hn,Hj,…属于Ci组
看这个题:
因此,分组情况为:
C1:H3,H5,H7,H9,H11
C2:H3,H6,H7,H10,H11
C4:H5,H6,H7,H12
C8:H9,H10,H11,H12
注意:Ci组中不包含Ci本身,如:C1组中不包含H1(即C1)
2.3 根据分组情况,求校验位Ci
我们现在已知数据位Di,需要求Ci,才能得到海明码:
海明码 | H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | H9 | H10 | H11 | H12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数据/校验码 | C1 | C2 | D8 | C4 | D7 | D6 | D5 | C8 | D4 | D3 | D2 | D1 |
结果 | 未知 | 未知 | 0 | 未知 | 1 | 1 | 0 | 未知 | 1 | 1 | 0 | 0 |
求Ci的方法:将Ci组的组员进行异或:
C1 = H3异或H5异或H7异或H9异或H11=0
同理,C2=0,C3=0,C4=0
所以:
海明码 | H1 | H2 | H3 | H4 | H5 | H6 | H7 | H8 | H9 | H10 | H11 | H12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
数据/校验码 | C1 | C2 | D8 | C4 | D7 | D6 | D5 | C8 | D4 | D3 | D2 | D1 |
结果 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
海明码为:000011001100
2.4 如何检验某一位出错
在2.2分组中,如果Ci的分组里加上Ci本身,就构成了Pi分组,即
P1:H1,H3,H5,H7,H9,H11
P2:H2,H3,H6,H7,H10,H11
P4:H4,H5,H6,H7,H12
P8:H8,H9,H10,H11,H12
Pi的求法和Ci类似:将组员进行异或
P1 = H1异或H3异或H5异或H7异或H9异或H11
在这道题中,如果接收的数据为01001100(H6变成0),则
P1 = H1异或H3异或H5异或H7异或H9异或H11=0
同理,
P2=1
P4=1
P8=0
即位置为0110(6),将H6位置的取反即可得到正确数据。