管你以前会不会,看完都变会。哈哈哈哈哈
海明码,是一种利用奇偶性来检错和纠错的校验方法。
首先要了解一下,海明码由校验码和题目给出的原数据组合而成。
例如:
用偶校验方式的海明码校验数据01101001
1. 第一步:确定校验码的位数k
- 首先
题目中的原数据01101001的位数n=8,这8位数分别用Di表示。(注意顺序是反着的,也就是依次为D7,D6,D5,D4,D3,D2,D1,D0) - 知识点来了
校验码位数k与原数据n的关系为:
可以将k=1,2,3,4,5等代入很快就求得k=4是最小的满足者,第一步完成。
2. 第二步:确定校验码以及原数据的位置
-
综上所述
海明码共8+4=12位,分别用Hi表示;
校验码4位分别有Pi表示;
原数据8位有D(0-7)表示。 -
小知识
校验码总是放在海明码下标为2的幂次方的位置,如:1,2,4,8… -
先安排校验码的位置
H1 | P1 |
---|---|
H2 | P2 |
H3 | |
H4 | P3 |
H5 | |
H6 | |
H7 | |
H8 | P3 |
H9 | |
H10 | |
H11 | |
H12 |
- 剩下的是题目中给出的原数据的位置哦
H1 | P1 |
---|---|
H2 | P2 |
H3 | D0——1 |
H4 | P3 |
H5 | D1——0 |
H6 | D2 ——0 |
H7 | D3 ——1 |
H8 | P4 |
H9 | D4——0 |
H10 | D5——1 |
H11 | D6——1 |
H12 | D7——0 |
3. 第三步:求校验码
我们要知道需要校验的是题目中给出的原数据,也就是D(0-7)
在海明码中,结合上面的表格,看看我的思路(以下例子看几个就好,后面有结论表格),下面的加法纯属看下标,没有实际的值
D0—对应H3—H3=H2+H1—H2,H1对应P2,P1—所以D0由P1,P2验证。
D1—对应H5—H5=H4+H1—H4,H1对应P3,P1—所以D1由P1,P3验证。
D2—对应H6—H6=H4+H2—H4,H2对应P3,P2—所以D2由P2,P3验证。
D3—对应H7—H7=H4+H2+H1—H4,H2,H1对应P3,P2,P1—所以D1由P1,P2,P3验证。
D4—对应H9—H9=H8+H1—H8,H1对应P4,P1—所以D4由P1,P4验证。
D5—对应H10—H10=H8+H2—H8,H2对应P4,P2—所以D5由P2,P4验证。
D6—对应H11—H11=H8+H2+H1—H8,H2,H1对应P4,P2,P1—所以D6由P1,P2,P4验证。
D7—对应H12—H12=H8+H4—H8,H4对应P4,P3—所以D7由P3,P4验证。
由以上得出
需验证的数据 | 由那个校验码验证 |
---|---|
D0 | P1,P2 |
D1 | P1,P3 |
D2 | P2,P3 |
D3 | P1,P2,P3 |
D4 | P1,P4 |
D5 | P2,P4 |
D6 | P1,P2,P4 |
D7 | P3,P4 |
- 知识点来了,求校验码的值
验证码=需要它验证的所有原数据(题目中给出的)相异或,也就是说
P1=D0异或D1异或D3异或D4异或D6(10101)
P2=D0异或D2异或D3异或D5异或D6(10111)
P3=D1异或D2异或D3异或D7(0010)
P4=D4异或D5异或D6异或D7(0110)
- 知识点来了
若采用奇校验,则将各校验位的偶校验值取反即可
3. 最后一步:校验
四个校验位由Gi表示
Gi=Pi和所有由它校验的原数据相异或,即,
G1=P1异或D0异或D1异或D3异或D4异或D6(P1,10101)
G2=P2异或D0异或D2异或D3异或D5异或D6(P2,10111)
G3=P3异或D1异或D2异或D3异或D7(P3,0010)
G4=P4异或D4异或D5异或D6异或D7(P4,0110)
- 结论
-若采用的是偶校验,四个校验位Gi全为0,表示收到的数据正确
-若采用的是奇校验,四个校验位Gi全为1,表示收到的数据正确
其实很简单,WO说起来有点麻烦,不知道说清楚了没有,刚复习到这一块,总结一下。