前言
海明(汉明)码是广泛采用的一种有效的校验码,它实际上是一种多重奇偶校验码。
海明码的原理就是在有效信息位中加入几个校验位形成海明码,并把海明码的每一个二进制分配到几个奇偶校验中。当某一位出错的时候,不仅能检错,还能发现出错位的位置。假设校验位有k位,那么校验码最多有2k个,显然其中有一个校验码是正确的,那么就能校验出2k-1个错位。所以,如果能满足一个n位数n+k<=2k-1,则在理论上即可判断出哪一位数出错。
奇偶校验
奇校验:序列为1的个数如果为偶数则在前面加个1,使1的个数变成奇数,否则加0。
偶校验:序列为1的个数如果为奇数则在前面加个1,使1的个数变成偶数,否则加0。
举例:
1111 奇校验就是 11111 偶校验就是 01111
1110 奇校验就是 01110 偶校验就是 11110
海明码计算原理
1、 计算校验位数k的公式
k2 ≥ k + n + 1
2、 确定校验位在海明码中的位置,并将序列由右至左顺序依次填入h3->…
按照2k留出来,例1、2、4、8、16…
H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|
x4 | x2 | x1 |
3、 分组
根据值查看统配是否出现得出:
例,配合下表:
x1 = 1⊕3⊕5⊕7⊕9 备注:查看通配=号后是否出现该1的值,若出现则提出值即可。
x2 = 2⊕3⊕6⊕7⊕10 备注:查看通配=号后是否出现该2的值,若出现则提出值即可。
x4 = 4⊕5⊕6⊕7 备注:查看通配=号后是否出现该4的值,若出现则提出值即可。
x8 = 9⊕10 备注:查看通配=号后是否出现该8的值,若出现则提出值即可。
值 | 通配 - (出现的值必须为2^n) |
---|---|
1 | 1 = 1 |
2 | 2 = 2 |
3 | 3 = 1 + 2 |
4 | 4= 4 |
5 | 5 = 1 + 4 |
6 | 6 = 2 + 4 |
7 | 7 = 1 + 2 + 4 |
8 | 8 = 8 |
9 | 9 = 1 + 8 |
10 | 10 = 2 + 8 |
… | … |
4、 整合
根据步骤3得出的通配,计算出x1…,带入步骤2中的表格内。得出海明校验码即可。
举例
求出10001序列的海明校验码结果。
解:
1、 求出k2≥k+n+1中的k值。
因为n=5,那么k=4
2、 得出海明码表格
3、计算通配
x1 = 1⊕3⊕5⊕7⊕9 = 3⊕5⊕7⊕9 = 1⊕0⊕0⊕1 = 0
x2 = 2⊕3⊕6⊕7 = 3⊕6⊕7 = 1⊕0⊕0 = 1
x4 = 4⊕5⊕6⊕7 = 5⊕6⊕7 = 0⊕0⊕0 = 0
x8 = 9 = 1
4、整合表格
关注
笔者 - jxd
微信公众号搜索 “码农总动员” 或 微信扫描下方二维码,了解更多你不知道的XX,O(∩_∩)O