一:海明码的计算
牢记公式:2^r>=k+r+1 其中
k是已知的,是原本就提供了的信息码的位数
r是未知的,是需要通过该公式计算的
举例:信息码1011,求海明码以及校验方式
(1)1011一共四位,所以k=4
2^r>=4+r+1 得到满足公式的最小整数r为3,所以海明码一共七位,这三个校验位的位置分别为2^0, 2^1, 2^2 (如果不止三位,则按2的N次方递增)
H7 | H6 | H5 | H4 | H3 | H2 | H1 |
1 | 0 | 1 | R3 | 1 | R2 | R1 |
现在信息码的位置分别为7,6,5,3 校验码的位置为4,2,1
7=4+2+1
6=4+2
5=4+1
3=2+1
R1(7,5,3) PS:R1在1号位置,1在上面的等式里在7,5,3中都有出现,以下同理
R2(7,6,3)
R3(7,6,5)
∴R1=H7⊕H5⊕H3=1⊕1⊕1=1
R2=H7⊕H6⊕H3=1⊕0⊕1=0
R3=H7⊕H6⊕H5=1⊕0⊕1=0
由此可得 最终海明码为 1010101
二:海明码校验
因为有三个校验位,所以进行校验时也是三个值,这三个值用G1,G2,G3来表示
G1=R1⊕H7⊕H5⊕H3
G2= R2⊕H7⊕H6⊕H3
G3=R3⊕H7⊕H6⊕H5
用收到的数据对应的位置上的值代入以上公式计算,三个值都为0则没有出错,如果值为1,则数据传输错误。