> 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 等更复杂的编码可以纠正多比特错误,但开销更大。汉明码非常适合低噪声信道。
// 速查表
| Pos | bit | covered by |
|---|---|---|
| 1 | p1 | p1 |
| 2 | p2 | p2 |
| 3 | d1 | p1 p2 |
| 4 | p3 | p3 |
| 5 | d2 | p1 p3 |
| 6 | d3 | p2 p3 |
| 7 | d4 | p1 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 位校验。