最详细的“ECC-汉明码”原理讲解

前言

Error Correcting Code (ECC)校验码。

ECC校验技术最常用的就是“汉明码(Hamming Code)”

汉明码可以实现--1-bit纠错2-bit检错

“1-bit纠错,即知道哪一bit错了,并纠正它”

“2-bit检错,即知道传输的码字中错了2-bit,但不知道哪2-bit错了。这种情况,数据只能重传”

大部分都讲了“1-bit纠错”,我们讨论“1-bit纠错2-bit检错

汉明码原理

数据位宽和校验码位宽的关系

汉明码编码中,数据位宽和校验码位宽的关系,如下表所示:

数据位宽(n)

校验码位宽(k)

n=1

3

2 <= n <= 4

4

5 <= n <= 11

5

12 <= n <= 26

6

27 <= n <= 57

7

58 <= n <= 120

8

121 <= n <= 247

9

248 <= n <= 502

10

503 <= n <= 1013

11

1014 <= n <= 2036

12

2037 <= n <= 4083

13

4084 <= n <= 8178

14

汉明码编码规则

以4-bit的数据码为例,假设数据码为:D3,D2,D1,D0。

从上表可知,校验码的位宽为“4-bit”,假设为:PP,P2,P1,P0

校验码的位置,在H=2^k的位置上(k=0,1,2),而最后一个校验码"PP"在最后一个位置,如下表所示。

H8

(1000)

H7

(0111)

H6

(0110)

H5

(0101)

H4

(0100)=2^2

H3

(0011)

H2

(0010)=2^1

H1

(0001)=2^0

PP

D3

D2

D1

P2

D0

P1

P0

求校验码的值

P0的值,为H=xxx1位置上所有数据码的“异或值”,即P0=D0⊕D1⊕D3。

P1的值,为H=xx1x位置上所有数据码的“异或值”,即P1=D0⊕D2⊕D3。

P2的值,为H=x1xx位置上所有数据码的“异或值”,即P2=D1⊕D2⊕D3。

PP的值,为前面所有数据的偶校验,即PP=P0⊕P1⊕D0⊕P2⊕D1⊕D2⊕D3。

按照上述方法,可以计算出对应数据的校验码,即chkbits = {PP,P2,P1,P0}

数据传输时,一般按照“PP,P2,P1,P0,D3,D2,D1,D0”的顺序传输到内存中。

解码规则

当接收端从内存中读出“D3,D2,D1,D0”的数据后,按照上节的编码规则,重新计算出新的校验码。

得到新的4-bit校验码,如:PP',P2',P1',P0',即chkbits' = {PP',P2',P1',P0'}

对chkbits 和chkbits '进行异或,得到4-bit数据syndrome,即syndrome= chkbitschkbits'

校验规则

  1. 当syndrome[3] == 0时,

    1. 如果syndrome[2:0] == 0,则表示传输的数据中H1~H8位置中,没有任何错误。

    2. syndrome[2:0] != 0,则表示传输的数据H1~H8位置中,存在两个错误,需要重传数据。

  2. 当syndrome[3] == 1时,

    1. syndrome[2:0] > (校验码位宽+数据位宽),则传输的数据无效。

    2. syndrome[2:0] <(校验码位宽+数据位宽),则表示发生了1-bit错误,且错误位置在H[syndrome[2:0]]位置,只需要将对应位置的数据取反即可。

      1. 例如:如果syndrome[2:0] = 3,则表示H3位置的数据发生了错误,即D0传输过程中发生了错误,需要将D0取反。

注意:当数据错误1-bit和错误3-bit的结果是一样的,这种情况是无法区分的。

相关文献说,在通信系统中的一个传输块中,错误1-bit的概率很低,同时错误2-bit的概率更低,那同时错误3-bit以上的概率就更~更低了。但现在通信传输速度越来越高,每秒几十G的速率,同时错多bit的概率还是很高的。

但汉明码作为校验码,因其简单高效以及低成本的特点,依然是通信传输系统中常用的校验手段。

  • 13
    点赞
  • 94
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
汉明码是一种用于检错和纠错的编码方式,它的编码原理是在数据中添加冗余信息,以增加数据的可靠性。具体来说,汉明码通过在数据中添加一定数量的校验位,使得数据中的所有位数都满足某种特定的规律,从而可以检测出任意一位是否出现错误,并且还能够纠正一定数量的错误。 汉明码编码过程如下: 1. 确定要发送的数据,例如"1010"。 2. 确定校验位的数量。校验位的数量是指要添加到数据中的冗余位数。根据汉明码原理,校验位的数量应该满足以下公式:2^r ≥ n + r + 1,其中n为数据位数,r为校验位数。例如,如果要发送的数据为4位二进制数,那么校验位的数量应该为3。 3. 确定校验位的位置。校验位的位置是指在数据中哪些位置上要添加校验位。根据汉明码原理,校验位的位置应该是2的幂次方(从1开始计数),例如第1、2、4位。因此,在本例中,校验位应该被添加到第1、2和4位。 4. 在校验位的位置上添加校验位。校验位的值是通过对数据中对应的位进行异或操作得到的,例如,在本例中,第1、2和4位的校验位值为1、0和0。 5. 将数据和校验位合并起来,形成最终的汉明码。在本例中,最终的汉明码为"1101010"。 当接收方接收到汉明码时,它可以执行以下步骤来检测和纠正错误: 1. 计算接收到的数据中每个校验位的值。 2. 如果某个校验位的值与发送方计算出的值不同,说明该位存在错误。 3. 根据错误的校验位的位置,确定出错的数据位。 4. 对出错的数据位进行纠错,例如将0改为1或将1改为0。 通过这种方式,汉明码可以提高数据传输的可靠性,从而被广泛应用于通信和存储系统中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

垮掉一代

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值