Hamming code的检错、纠错原理

本文详细介绍了海明码的检错和纠错原理,通过理论分析和举例说明了码距为3和4的海明码在检错、纠错上的能力。码距为3的海明码能检错2位,纠错1位(未知具体哪位出错),而码距为4的海明码不仅能检错2位,还能确定并纠错1位。通过计算和校验过程,展示了海明码如何在接收端检测和纠正错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

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

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

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

二、纠错理论

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

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

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

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

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

三、举个例子

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

H7H6H5H4H3H2H1
D4D3D2P3D1P2P1
1010010

校验位的计算过程如下:

P1=D1⊕D2⊕D4=0⊕1⊕1=0P_{1}=D_{1} \oplus D_{2} \oplus D_{4}=0 \oplus 1 \oplus 1=0P1=D1D2D4=011=0

P2=D1⊕D3⊕D4=0⊕0⊕1=1P_{2}=D_{1} \oplus D_{3} \oplus D_{4}=0 \oplus 0 \oplus 1=1P2=D1D3D4=001=1

P3=D2⊕D3⊕D4=1⊕0⊕1=0P_{3}=D_{2} \oplus D_{3} \oplus D_{4}=1 \oplus 0 \oplus 1=0P3=D2D3D4=101=0

校验方程如下:

S1=P1⊕D1⊕D2⊕D4S_{1}=P_{1} \oplus D_{1} \oplus D_{2} \oplus D_{4}S1=P1D1D2D4

S2=P2⊕D1⊕D3⊕D4S_{2}=P_{2} \oplus D_{1} \oplus D_{3} \oplus D_{4}S2=P2D1D3D4

S3=P3⊕D2⊕D3⊕D4S_{3}=P_{3} \oplus D_{2} \oplus D_{3} \oplus D_{4}S3=P3D2D3D4

接收方收到海明码后计算出S1S_{1}S1S2S_{2}S2S3S_{3}S3后可能有如下取值:

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

四、总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值