本文由AI系统依据所引资料撰写并翻译,按News编辑方法进行了自动检查。
AI生成的概念封面:结构化检查使受扰动的流恢复秩序;不是实际电路,也不是无限纠错能力的证据。
1. 用有结构的冗余提高可靠性
1950年4月,Richard W. Hamming在Bell System Technical Journal发表了《Error Detecting and Error Correcting Codes》。问题来自实际计算:无人值守时,发现故障可能意味着停机;若能定位并修复,计算就可能继续。论文给出的是明确的二进制构造,并不承诺修复任意损坏。[1,2]
进步在于让冗余携带诊断信息。将四个比特各重复三遍,需要传输十二位;汉明码用七位保护同样的四个数据位,使其能够抵抗该块中任意一个比特翻转。这是组织冗余的不同方式,并不证明一种码适用于所有信道。压缩减少冗余,纠错则有控制地增加冗余。
2. 七个位置,三项检查
把传输位置编号为1至7。位置1、2、4放校验位,位置3、5、6、7放数据d₁、d₂、d₃、d₄。符号⊕表示异或,即模2加法,所以1 ⊕ 1 = 0。下式设置偶校验。p的下标指位置,而不是校验的先后顺序。[1, §3]
p1=d1⊕d2⊕d4
p2=d1⊕d3⊕d4
p4=d2⊕d3⊕d4
接收端检查{1,3,5,7}、{2,3,6,7}和{4,5,6,7}。校验不满足时得到伴随式位1,满足时为0,分别记作s₁、s₂、s₄。在至多一个比特翻转的假设下,错误位置j为:
j=s1+2s2+4s4
只有在这一假设下,伴随式为零才意味着没有错误;它不是普遍的完整性保证。
3. 可以复算的纠错过程
取数据1010,算得p₁ = 1、p₂ = 0、p₄ = 1。按位置从左向右写,发送码字为1011010。若第6位翻转,接收字就是1011000。第一项校验为偶数,第二和第三项为奇数。因此(s₁,s₂,s₄) = (0,1,1),j = 0 + 2 + 4 = 6。把第6位翻转回来,再读位置3,5,6,7,恢复数据1010。
用代码制作的科学示意图;比特串精确,不是实验数据。
这是为本文设计的计算示例,不是实验测量。校验位本身翻转也能纠正。前提是块边界和比特位置已知;插入或删除比特属于另一种错误模型。
4. 为什么这种构造有效
三个二进制校验结果共有八种,恰好可以区分七个单错位置和无错状态。一般而言,含r个校验位、总长n位的二进制码,为纠正一个翻转至少需要n + 1种不同的伴随式:
2r≥n+1
汉明构造在n = 2ʳ − 1、数据位数k = n − r时达到这一计数。r = 3时,n = 7、k = 4。最小汉明距离,即两个不同合法码字之间不同位置数的最小值,为3。如果某接收字与两个合法码字都只差一位,那两个码字最多相差两位,产生矛盾。
共有16个合法码字,每个码字连同其七个单次翻转邻居组成一个集合。这些集合互不重叠,覆盖全部128种七位字:16 × 8 = 128。“完美码”描述的是这种填充性质,并不表示在任意噪声下都不会出错。[1, §§5,7]
5. 两个错误造成的陷阱
两个比特翻转总会产生非零伴随式,所以只负责标记非法字的检测器能够发现它们。但若译码器把每个非零伴随式都解释为单错,就可能误纠。位置2和5同时翻转,与仅位置7翻转产生相同的伴随式。再“纠正”第7位,便留下三个错误位,并得到另一个合法码字。
增加第八位,使八位整体保持偶校验,最小距离就提高到4。这种扩展码支持单错纠正、双错检测,即SECDED。下表的判断以至多两个翻转为前提。q是八个接收位的整体奇偶校验值。[1, §4]
| 伴随式 j | 整体校验 q | 上述假设下的处理 |
|---|---|---|
| 0 | 0 | 无错 |
| 0 | 1 | 修复第8位 |
| 非零 | 1 | 修复第j位 |
| 非零 | 0 | 报告双错,不纠正 |
三个及以上错误超出了这一保证。SECDED译码器可能对其中一些情况误纠;“双错检测”不等于能诊断所有更严重的故障。
6. 明确假设下的数值收益
假设每个传输比特独立地以p = 0.01的概率翻转,对0和1相同;编码和译码均无误,块边界已知。对这里的七位码和译码器,恢复出的四位消息出错,当且仅当块中至少有两位翻转:
Pfail=1−(1−p)7−7p(1−p)6.
结果约为0.002031,即0.2031%的块。若直接发送四个数据位,则1 − (1 − p)⁴ = 0.039404,即3.9404%的消息含错。这是消息错误概率,不是残余比特错误率,也不是设备性能的实测值。
代价是每四个数据位增加三位,传输位数增加75%,码率为4/7 ≈ 0.5714数据位/传输位。比较固定了p,但没有同时固定带宽、传输时间和每条消息的能耗。
7. 结果保证什么,不保证什么
这一工作的持久贡献,是把代数与可靠性以可构造的方式连接起来:让合法码字保持距离,计算简短校验,再定位有限范围内的故障。七位例子可以穷举验证。本文检查了16条消息及其无错或单错的128种情况,还检查了扩展码中448种双错情况。
它不能修复任意突发错误、损坏的软件、恶意篡改或同步丢失。真实系统必须使编码适合故障模型,并保护编码器、译码器与周边逻辑。汉明论文没有给出现代硬件的测量数据,本文的数值例子也不作这种主张。它用一个明确的有限构造补充香农的通信极限理论,而不是提供在所有条件下都达到信道容量的万能方案。
本文的News编辑方法
参考修订:HAMMING-EN-1。已通过归档扫描件及其OCR通读1950年一次文献,并在扫描页上核对构造与SECDED分类。出版社记录用于确认书目日期。MIT讲义用于比较现代记法。数值计算和有限码检查由可复现脚本执行。撰写及七种翻译由AI完成,这些检查不等于独立专家评审或人工验证。本地化示意图由代码生成。封面为AI生成的概念插画,不是照片、仪器或实验数据图。
资料来源
[1] R. W. Hamming — Error Detecting and Error Correcting Codes — DOI: 10.1002/j.1538-7305.1950.tb00463.x.
[2] Nokia Bell Labs — Error Detecting and Error Correcting Codes.
[3] MIT 6.02 — Coping with Bit Errors using Error Correction Codes.
