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

海明校验码校验码

一、海明校验码原理

合理地增大校验位、增大码距,能够提高校验码发现错误的能力。因此如果在奇偶校验的基础上增加校验位的位数,构成多组奇偶校验,就能够发现更多位的错误并可自动纠正错误。这就是海明校验码(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. 确定数据位数和校验位数 首先需要确定数据位数和校验位数,通常情况下,校验位数是数据位数的一个函数,函数的形式为:$2^r-1\geq m+r$,其中 $m$ 表示数据位数,$r$ 表示校验位数。这个函数中,$2^r-1$ 表示校验位数可以表示的最大二进制数,$m+r$ 表示总位数。我们需要找到一个满足条件的最小的 $r$ 值。 2. 构造校验位和数据位的位置关系 海明码的校验位和数据位有一定的位置关系,通常情况下,第 $2^k$ 个位置是校验位,其他位置为数据位。例如,对于一个 $m=4$ 的海明码,校验位的位置为 1、2、4,数据位的位置为 3、5、6、7。 3. 计算校验位的值 校验位的值可以通过数据位的异或操作计算得到。具体地,对于第 $i$ 个校验位,它需要检查所有包含第 $i$ 位的数据位,将它们的值进行异或操作,得到一个校验位的值。例如,对于一个 $m=4$ 的海明码,第一个校验位需要检查第 1、3、5、7 个位置的数据位,将它们的值进行异或操作,得到第一个校验位的值。 4. 将数据和校验位组成海明码 将数据和计算得到的校验位组合在一起,得到最终的海明码。例如,对于一个 $m=4$ 的海明码,数据位为 1011,计算得到的校验位为 011,最终的海明码为 1011011。 5. 检测和纠正错误 在传输过程中,可能会发生数据位的错误,此时我们可以通过海明码进行检测和纠正。具体地,我们可以将接收到的海明码与原始数据进行比较,如果发现不同的位数不超过一个,则可以认为该数据没有发生错误;否则,可以根据校验位的值来确定错误的位置,并进行纠正。 希望这些步骤可以帮助你理解海明码的检错和纠错过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值