一文搞懂海明校验码的原理及编码方式、检验和纠错方式

本文介绍了海明校验码的原理,包括如何通过增大校验位和码距提高错误检测能力,以及具体的编码方式、计算校验位的方法和案例分析。重点讲述了接收端如何利用校验码进行错误检测和纠正。

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

海明校验码校验码

一、海明校验码原理

合理地增大校验位、增大码距,能够提高校验码发现错误的能力。因此如果在奇偶校验的基础上增加校验位的位数,构成多组奇偶校验,就能够发现更多位的错误并可自动纠正错误。这就是海明校验码(Hamming Code)的实质所在

 海明编码的实现原理是:在数据编码中加入几个校验位,并把数据的每一个二进制位分配在几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验组的值发生变化,这样不但可以发现出错,还能指出是哪一位出错。

二、编码方式

设有效信息位的位数为n,校验位的位数为k,则组成的海明校验码共长n+k位。

校验时需进行k组奇偶校验,将每组的奇偶校验结果组合,可以组成一个k位的二进制数,共能够表示2^k种状态。在这些状态中,必有一个状态表示所有奇偶校验都是正确的,用于判定所有信息均正确无误,剩下的 (2^k - 1) 种状态可以用来判定出错代码的位置。

因为海明校验码共长n+k位,所以校验位的位数k与有效信息位的位数n应满足关系:

2^k - 1 ≥ n + k                                     (2-14)

三、案例分析

假设原始数据为 01101110

位置

8

7

6

5

4

3

2

1

数据位

0

1

1

0

1

1

1

0

1.根据2^k - 1 ≥ n + k计算出K=4

2.确定校验码的位置,海明校验码放在索引号为2^(i - 1)的位(i = 0,1,2,...,k)上

本例中k=4,所以校验位的索引为第1,2,4,8位。即校验码的位置一般在1,2,4,8,16,32上,位置不大于加入校验码后新的编码。

在1, 2, 4, 8位置上,分别设校验码为H1,H2,H4,H8,并把原始信息位插入,得到新的信息位:

位置

12

11

10

9

8

7

6

5

4

3

2

1

新的信息位

0

1

1

0

H8

1

1

1

H4

0

H2

H1

3.计算校验位的值

数据位的应当由比它小的若干个校验位所校验,即看数据位位数可以由哪些校验位位数相加得到。

比如数据位3=1+2, 7=1+2+4,说明3号数据位应当由1,2号校验位校验,7号数据位应当由1,2,4号校验位校验。

数据位位数

12

11

10

9

7

6

5

3

校验位

H4+

H8

H1+H2+H8

H2+

H8

H1+

H8

H1+H2+H4

H2+

H4

H1+

H4

H1+

H2

统计各个校验位负责校验的数据位位置,对位置数进行异或运算,得到该位校验位信息。

校验位

出现的位置

对应位置上的值异或

结果

H1

3,5,7,9,11

0⊕1⊕1⊕0⊕1

1

H2

3,6,7,10,11

0⊕1⊕1⊕1⊕1

0

H4

5,6,7,12

1⊕1⊕1⊕0

1

H8

9,10,11,12

0⊕1⊕1⊕0

0

校验码H8 H4 H2 H1 = 0101

4.最终的信息位为

位置

12

11

10

9

8

7

6

5

4

3

2

1

最终信息位

0

1

1

0

0

1

1

1

1

0

0

1

四、接收端如何检验和纠错

假设 0110 0111 1001传输为 0111 0111 1001

011 1 0111 1001 按上文重新算出校验码:H8H4H2H1=1100

出错的位数 = 原信息的校验码  出错后信息校验码

0101⊕1100=1001 转化为10进制就是第9位,属于出错位

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值