海明码
海明码(Hamming Code)是由贝尔实验室的Richard Hamming设计的,是一种利用奇偶性来验错和纠错的校验方法.海明码的构成方法是在数据位之间的特点位置上插入K个校验位.通过扩大码距来实现检错和纠错.
设数据位是n位,校验位是k为,则n和k必须满足一下关系
2
k
−
1
>
=
n
+
k
2^{k}-1>=n+k
2k−1>=n+k
海明码的编码规则如下
设k个校验位为
p
k
p
k
−
1
.
.
.
.
p
1
p_k p_{k-1} ....p_1
pkpk−1....p1
设n个数据位
D
n
−
1
D
n
−
2
.
.
.
.
D
2
D
1
D_{n-1} D_{n-2} ....D_2D_1
Dn−1Dn−2....D2D1
对应的海明码为
H
n
+
k
H
n
+
k
−
1
.
.
.
.
H
1
H_{n+k} H_{n+k-1} ....H_1
Hn+kHn+k−1....H1
(1)
p
i
在
海
明
码
的
第
2
i
−
1
的
位
置
,
H
j
=
P
i
,
且
j
=
2
i
−
1
,
数
据
位
则
依
序
从
低
到
高
占
据
海
明
码
中
剩
下
的
位
置
p_i在海明码的第2^{i-1}的位置,H_j=P_i,且j=2^{i-1},数据位则依序从低到高占据海明码中剩下的位置
pi在海明码的第2i−1的位置,Hj=Pi,且j=2i−1,数据位则依序从低到高占据海明码中剩下的位置
(2)海明码中的任何一位都是由若干个校验为来校验的.其对应关系如下:被校验的海明码的下标等于所有参与校验该为的校验为的下标之和,而校验位由自身校验.
来一个Demo
求101101100的海明码
解题思路:
(1)求校验位的个数,
(2)将列出海明码,既校验位和数据位混合在一起,类似于下图的H代表的位置,未求出的校验位的位置用k代表
(3)写出每一个海明码对应的校验位组合
(4)写出每一个校验的算式,进行异或运算,得出每个k的值,最后写出海明码