Hamming code的检错、纠错原理

一、前言

书上、网上大多只有以下没加粗的两句话,经过我的一番理解之后又加上了小括号里的那两句话:

  1. 码距为3的海明码:可以检错2位,或者纠错1位 (不知道是错了1位还是2位)
  2. 码距为4的海明码:可以检错2位,并且纠错1位 (知道是错了1位还是2位,但也有可能错了3位)

注意“检错”和“纠错”的区别,检错只能检测到这一串数字里错了几位,并不知道是哪几位错了,而纠错能知道具体是哪一位错了,所以能够纠正过来。

二、纠错理论

L − 1 = D + C 且 D ≥ C L-1=D+C且D \geq C L1=D+CDC

其中 L L L是编码最小码距, D D D是检错的位数, C C C是纠错的位数,且纠错能力恒小于等于检错能力。如果出错的位数大于等于码距,则校验码可能无法正常检错、纠错,所以思考这些出错位数过多的情况是没有意义的。

  1. 码距为3的海明码有 L − 1 = 2 = D + C L-1=2=D+C L1=2=D+C,所以 D + C D+C D+C的可能的组合有两种,一种是 D = 2 D=2 D=2 C = 0 C=0 C=0,一种是 D = 1 D=1 D=1 C = 1 C=1 C=1,但具体是哪种情况并不知道。

  2. 码距为4的海明码有 L − 1 = 3 = D + C L-1=3=D+C L1=3=D+C,所以 D + C D+C D+C的可能的组合也有两种,一种是 D = 3 D=3 D=3 C = 0 C=0 C=0,一种是 D = 2 D=2 D=2 C = 1 C=1 C=1,但具体是哪种情况并不知道。

码距为4的海明码比码距为3的海明码多了一位奇偶校验位,所以码距多了1。这个奇偶校验位将码距为3的海明码的每一位(包括信息位和校验位)作为信息位进行校验。

三、举个例子

假设信息位为1010B,则对应的码距为3的海明码各位的分布如下(其中 D n D_{n} Dn代表信息位, P n P_{n} Pn代表校验位):

H7H6H5H4H3H2H1
D4D3D2P3D1P2P1
1010010

校验位的计算过程如下:

P 1 = D 1 ⊕ D 2 ⊕ D 4 = 0 ⊕ 1 ⊕ 1 = 0 P_{1}=D_{1} \oplus D_{2} \oplus D_{4}=0 \oplus 1 \oplus 1=0 P1=D1D2D4=011=0

P 2 = D 1 ⊕ D 3 ⊕ D 4 = 0 ⊕ 0 ⊕ 1 = 1 P_{2}=D_{1} \oplus D_{3} \oplus D_{4}=0 \oplus 0 \oplus 1=1 P2=D1D3D4=001=1

P 3 = D 2 ⊕ D 3 ⊕ D 4 = 1 ⊕ 0 ⊕ 1 = 0 P_{3}=D_{2} \oplus D_{3} \oplus D_{4}=1 \oplus 0 \oplus 1=0 P3=D2D3D4=101=0

校验方程如下:

S 1 = P 1 ⊕ D 1 ⊕ D 2 ⊕ D 4 S_{1}=P_{1} \oplus D_{1} \oplus D_{2} \oplus D_{4} S1=P1D1D2D4

S 2 = P 2 ⊕ D 1 ⊕ D 3 ⊕ D 4 S_{2}=P_{2} \oplus D_{1} \oplus D_{3} \oplus D_{4} S2=P2D1D3D4

S 3 = P 3 ⊕ D 2 ⊕ D 3 ⊕ D 4 S_{3}=P_{3} \oplus D_{2} \oplus D_{3} \oplus D_{4} S3=P3D2D3D4

接收方收到海明码后计算出 S 1 S_{1} S1 S 2 S_{2} S2 S 3 S_{3} S3后可能有如下取值:

  1. S 3 S 2 S 1 = 000 B S_{3}S_{2}S_{1}=000B S3S2S1=000B:没有出错(在只有1位或者2位可能出错的前提下)
  2. S 3 S 2 S 1 = 001 B S_{3}S_{2}S_{1}=001B S3S2S1=001B H 1 ( P 1 ) H_{1}(P_{1}) H1(P1)出错(对应 D = 1 D=1 D=1 C = 1 C=1 C=1),或者, H 6 ( D 3 ) H_{6}(D_{3}) H6(D3) H 7 ( D 4 ) H_{7}(D_{4}) H7(D4)同时出错(对应 D = 2 D=2 D=2 C = 0 C=0 C=0),或者, H 2 ( P 2 ) H_{2}(P_{2}) H2(P2) H 3 ( D 1 ) H_{3}(D_{1}) H3(D1)同时出错(对应 D = 2 D=2 D=2 C = 0 C=0 C=0),或者其它情况
  3. S 3 S 2 S 1 = 011 B S_{3}S_{2}S_{1}=011B S3S2S1=011B H 3 ( D 1 ) H_{3}(D_{1}) H3(D1)出错,或者, H 1 ( P 1 ) H_{1}(P_{1}) H1(P1) H 2 ( P 2 ) H_{2}(P_{2}) H2(P2)同时出错,或者, H 4 ( P 3 ) H_{4}(P_{3}) H4(P3) H 7 ( D 4 ) H_{7}(D_{4}) H7(D4)同时出错,或者其它情况
  4. S 3 S 2 S 1 = … S_{3}S_{2}S_{1}=… S3S2S1=:其它类似情况,这里不再赘述

四、总结

  1. 如果我们假设一串码距为3的海明码在传输过程中只有一位会出错(对应 D = 1 D=1 D=1 C = 1 C=1 C=1),则我们可以利用码距为3的海明码纠错1位;如果假设可能有多位会出错(对应 D = 2 D=2 D=2 C = 0 C=0 C=0),那么码距为3的海明码只能检错不能纠错。
  2. 但对于码距为4的海明码来说,由于增加了1位奇偶校验位,所以在假设只有1位或者2位出错的情况下(对应 D = 2 D=2 D=2 C = 1 C=1 C=1)我们会知道是错了1位还是2位。但如果奇偶校验位也出错了,那么这种情况是未知的,所以也可能是有3位出错了(对应 D = 3 D=3 D=3 C = 0 C=0 C=0)。
  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值