海明码解释以及海明码的纠一检二
海明码定义:具有纠正一位错误的能力。
1、确定校验位个数
核心公式:2^r ≥k+r+1 (其中r代表校验个数)
**(重要!)**从公式带入计算可得一张表:
记住这张表,选择题就可以秒答。
(A:假设有8位信息位,则需要插入____位校验码呀?Q: 4位。)
2、确定校验位的位置
核心:校验码Pi 必须是在2的n次方位置,即只能放在H1,H2,H4,H8
注意:这里指的位置都是从左向右排序,即:H5 H4 H3 H2 H1
以下以4位信息码为例进行编码。
信息码组:1011 -> 即: D3 D2 D1 D0 = 1 0 1 1
根据公式:2^r ≥k+r+1(或者表)得校验位 r=3,即校验位为 P1 P2 P4。
又因为上述Pi 只能放在2的n次方的位置,所以 P1插入H1,P2插入H2,P4插入H4。
信息码填入剩下的位置。
H7 | H6 | H5 | H4 | H3 | H2 | H1 |
---|---|---|---|---|---|---|
D3 | D2 | D1 | P3 | D0 | P2 | P1 |
1 | 0 | 1 | 0 | 1 | 0 | 1 |
3、计算校验位 Pi
P1(H1) = H3 ⊕ H5 ⊕ H7
P2(H2) = H3 ⊕ H6 ⊕ H7
P4(H4) = H5 ⊕ H6 ⊕ H7
计算可得:P1 = 1,P2 = 0,P3 = 0
所以:最终海明码: H7 H6 H5 H4 H3 H2 H1 = 1 1 0 0 1 1 0
4、纠错和检错
设检测位G1,G2,G3:
G1 = P1 ⊕ H3 ⊕ H5 ⊕ H7 ;
G2 = P2 ⊕ H3 ⊕ H6 ⊕ H7;
G3 = P3 ⊕ H5 ⊕ H6 ⊕ H7;
当偶校验时:G3 G2 G1 值皆为0则数据无误,若G3 G2 G1不全为0说明数据传输有误,且其十进制指出了错误发生的位置。
(例:G3 G2 G1 = 101,其十进制为 5 ,即:H5 发生了错误,H5的位置为D1,则说明D1传输错误,则将D1的位置取反,即可纠错。)
所以海明码定义:具有纠正一位错误的能力。
5、海明码的纠一检二

如果只有一位比特发生错误,那么可以进行检错并且纠错
如果发生了两位比特的错误,假设是P1P2位的值发生了翻转,那么G1和G2的值就会变为一,但是,如果只有H3发生了翻转(也就是一位比特发生了差错),同样会导致P1P2的值发生翻转,所以此时只能检测到错误,而不能纠错。那如果发生了三位比特的错误呢,假设现在P1P2H3发生了错误,那么G1G2的值还是00,也就是无法检测出错误,所以我们说海明码具有一位比特的纠错能力和两位比特的检错能力。
6、码距
最后我们再来说说码距,码距是什么呢?是一个编码系统中任意两个合法编码(码字)之间不同的二进数位(bit)数,而整个编码系统中任意两个码字的的最小距离就是该编码系统的码距。
在一个编码系统,用三个bit来表示八个不同信息中。在这个系统中,两个码字之间不同的比特数从1到3不等,但最小值为1,故这个系统的码距为1。如果任何码字中一位或多位被颠倒了,结果这个码字就不能与其它有效信息区分开。例如,如果传送信息001,而被误收为011,因011仍是表中的合法码字,接收机仍将认为011是正确的信息。
然而,如果用四个二进数字来编8个码字,那么在码字间的最小距离可以增加到2,8个码字相互间最少有两比特的差异。因此,如果任何信息的一个数位被颠倒,就成为一个不用的码字,接收机能检查出来。例如信息是1001,误收为1011,接收机知道发生了一个差错,因为1011不是一个合法码字。然而,差错不能被纠正。假定只有一个数位是错的,正确码字可以是1001,1111,0011或1010。接收者不能确定原来到底是这4个码字中的那一个。也可看到, 在这个系统中,偶数个(2或4)差错也无法发现。
为了使一个系统能检查和纠正一个差错,码间最小距离必须至少是“3”。最小距离为3时,或能纠正一个错,或能检二个错,但不能同时纠一个错和检二个错。编码信息纠错和检错能力的进一步提高需要进一步增加码字间的最小距离。所以从这里可以看出,海明码的码距是3。
码距越大,纠错能力越强,但数据冗余也越大,即编码效率低了。所以,选择码距要取决于特定系统的参数。数字系统的设计者必须考虑信息发生差错的概率和该系统能容许的最小差错率等因素。要有专门的研究来解决这些问题。
7、码距的性质
最后,再说说几个码距的性质
1)海明码如果要检测出D位错误,那么久需要一个码距大于等于D+1的编码方案,如果要纠正D位错误,那么需要一个码距为2D+1的编码方案
2)L - 1 = D + C 且 D>= C
其中L为码距,D为检错出D位,C为纠错出C位,这个公式也可以验证海明码,海明码码距为3,纠错为1位,检错为1位或者(检错为2位,纠错为0位),接下来我们用这个公式验证性质一,如果要检测出D位错误,那么C=0,L>=D+1,如果要纠正D位错误,那么至少需要检测出D位错误 ,也就是L >= 2D+1,成立。
8、参考链接
http://blog.sina.com.cn/s/blog_642463640102vngp.html
https://blog.csdn.net/woshinia/article/details/22381075