编码 | 解码 | 压缩

> hamming | (7,4) | ecc <

// 汉明码 – 用于可靠数据传输的错误校正码

[纠错]

错误校正

自动检测并纠正数据中的单比特错误。

[检测]

双比特错误检测

可以检测(但不能纠正)每个块中的双比特错误。

[高效]

开销极小

每 4 位数据只需 3 位校验位(效率 75%)。

>> 技术说明

汉明码的工作原理:

Hamming(7,4) 代码在每 4 位数据后添加 3 位校验位,形成 7 位数据块。校验位被放置在 2 的幂次位置(1、2、4)。当发生错误时,综合症(奇偶校验结果)会直接指示出错比特的位置。

Hamming(7,4) 结构:

数据:1011(4 位) 位置:P1 P2 D1 P3 D2 D3 D4 Hamming:1 0 1 1 0 1 1 P1 = D1 ⊕ D2 ⊕ D4 = 1 ⊕ 0 ⊕ 1 = 0 P2 = D1 ⊕ D3 ⊕ D4 = 1 ⊕ 1 ⊕ 1 = 1 P3 = D2 ⊕ D3 ⊕ D4 = 0 ⊕ 1 ⊕ 1 = 0

为什么选择汉明码:

  • >内存错误校正
  • >卫星通信
  • >数据存储系统
  • >网络传输
  • >RAID 阵列

>> 常见问题

什么是汉明码?

汉明码是一种由 Richard Hamming 于 1950 年提出的错误校正码。它通过给数据添加校验位,使系统能够自动检测并纠正单比特错误。

(7,4) 表示什么?

Hamming(7,4) 表示总共 7 位,其中 4 位是数据位,3 位是校验位。它可以纠正 7 位块中任意一个单比特错误。其他变体包括 (15,11)、(31,26) 等。

错误校正是如何工作的?

在接收数据时,会重新计算校验位。如果不匹配,综合症(差值)会直接指出哪个比特出错。通过翻转该比特即可完成修正。

汉明码与其他 ECC 编码相比如何?

对于单比特错误,汉明码简单、高效。Reed–Solomon 等更复杂的编码可以纠正多比特错误,但开销更大。汉明码非常适合低噪声信道。

// 速查表

Posbitcovered by
1p1p1
2p2p2
3d1p1 p2
4p3p3
5d2p1 p3
6d3p2 p3
7d4p1 p2 p3

// 计算示例

Data 1011 -> positions 3,5,6,7 = 1,0,1,1
p1 = d3^d5^d7 = 1^0^1 = 0     p2 = d3^d6^d7 = 1^1^1 = 1     p3 = d5^d6^d7 = 0^1^1 = 0
Codeword (pos 1..7)  0110011
Received 0110111 (bit 5 flipped)
Syndrome s3 s2 s1 = 1 0 1 = 5   ->  flip bit 5  ->  0110011 corrected

>> 更多问题

问:汉明码中的 (7,4) 是什么意思?

答:4 位数据加 3 位校验位,组成 7 位码字。校验位放在 2 的幂次位置(1、2、4)。最小距离为 3:可纠正 1 位错误,能检测 2 位错误但无法纠正。

问:伴随式如何指出错误位置?

答:每个校验位检查位置编号中对应位为 1 的那些位置。三个结果按二进制读出,就是出错位的位置(0 表示无错)。示例中 101 指向第 5 位。

问:什么是扩展汉明码(SECDED)?

答:增加一个总校验位,把 (7,4) 变成 (8,4),可纠 1 位错、检 2 位错。ECC 内存采用同样原理,通常是 (72,64):64 位数据配 8 位校验。

其他语言