以下为偶校验,奇校验同理(加码1为奇数)

1.算出校验位数k
正常情况下我们需要如下此操作:
2^k >= k + 数据位数 + 1
拿4位数做例题
这里等于3

2.确定校验位在海明码中的位置
这里按2^k次幂留出来,就像1,2,4,8,16,32。
1

3.分组(重点,很多人蒙圈就在此)
我们需要确认H1,H2,H4这三个校验位都来校验哪些位置。
我们按这个规则进行分配。

将1,2,4(海明码下标为1,2,4)
的二进制码写出来,并且最高位补到3位(前面算的K数)
如下所示:

2

然后我们将0替换为*,作为通配表

3

我们将1到7的二进制序列,列出来如下表
4

!!!重点!!!!
我们将7->1依次与上面的通配表进行匹配

5

因此我们可以确定
H1 负责 1 3 5 7 位数的校验
H2 负责 2 3 6 7 位数的校验
H4 负责 4 5 6 7 位数的校验

4.求出校验位是0还是1

因为上面我们得出以下结论:

H1 负责 1 3 5 7 位数的校验
H2 负责 2 3 6 7 位数的校验
H4 负责 4 5 6 7 位数的校验
那 根据

6

这张表,我们根据偶校验很容易就求出以下结论:
H3,H5,H7 1的个数为奇数 因此H1=1
H3,H6,H7 1的个数为偶数 因此H2=0
H5,H6,H7 1的个数为偶数 因此H4=0
至此我们得出了完整的汉明码

7

5.查错

查错比较简单,如果以下三组

H1,H3,H5,H7
或者
H2,H3,H6,H7
或者
H4,H5,H6,H7
偶校验出错,则出错。

比方说 如果 H1,H3,H5,H7由1100 变成了 1110 (1的个数为偶数)就是出错了

这里该不赘述

6.纠错

8

总结
我们通常遇到8位校验,因此本人总结其p1p2p4p8的校验值如下
p1: 1 3 5 7 9 11
p2: 2 3 6 7 10 11
p3: 4 5 6 7 12
p8: 8 9 10 11 12

参考文章https://www.cnblogs.com/godoforange/p/12003676.html