首页 › programming › 错误自报家门:拆解海明码的纠错内核

错误自报家门:拆解海明码的纠错内核

导语

你大概有过这样的经历:一张布满划痕的旧 CD,放进光驱居然还能流畅播放;一张被撕掉一角、沾了水的二维码,手机一扫照样秒开。这些"奇迹"背后藏着一个几乎所有数字设备都在用、却很少有人真正理解的技术——纠错码(Error Correction Code, ECC)。

3Blue1Brown 这支播放量数百万的《But what are Hamming codes?》是全网公认讲纠错码讲得最透彻的入门视频。它没有一上来就抛公式,而是从一个让人抓狂的真实故事讲起:1947 年,贝尔实验室的数学家 Richard Hamming 每到周末就用一台继电器计算机,喂进去一沓打孔纸带。机器一旦读到一个错误位就罢工,他只能从头再来。这份"周末的愤怒",催生了人类历史上第一个能自我纠错的编码。

这支视频的价值在于:它用最朴素的语言,回答了一个看似无解的问题——数据在传输中必然出错,我们凭什么还能信任它?看完你会明白,数字世界之所以可靠,不是因为它"不出错",而是因为它为出错做好了结构化的准备。本文会在复述视频核心的同时,补上它没展开的背景(海明距离、香农容量、从海明码到 LDPC/Polar 码的演化),帮你把这块知识彻底打通。

视频背景卡片

项目 内容
视频标题 But what are Hamming codes? The origin of error correction
频道 3Blue1Brown(Grant Sanderson)
时长 20 分 05 秒
播放量 数百万级(频道累计 6 亿+ 观看)
发布日期 2020-09-04
核心主题 纠错码原理,以 Hamming 码为例拆解"自我修复"机制

核心内容拆解

一、冗余的朴素起点:三份拷贝与多数表决

视频的开场非常友好:如果担心一个比特出错,最直觉的办法是什么?存三份。读出来的时候让它们"投票",少数服从多数(majority vote)。三个里面翻一个,靠 2:1 还能救回来。

这个笨办法之所以重要,是因为它揭示了纠错的本质代价——你必须为"可恢复"付出额外空间。三份拷贝意味着 3 倍的开销,也就是 200% 的冗余税,换来的却只是"纠正 1 位错误"的能力。这是视频精心设置的参照系:接下来所有的优雅设计,都要和这个"300% 开销换 1 位纠错"的基准线对比,你才能体会其中的飞跃。

我的延伸:这种"冗余换可靠"的思路,至今仍活在工程里。分布式存储里的三副本(如早期 HDFS)、航天器的三模冗余(TMR)计算机,本质都是多数表决的直系后代。它们之所以没被淘汰,是因为在某些极端场景下,"简单粗暴"反而比精巧的算法更可靠。但在带宽和存储寸土寸金的信道里,3 倍开销是不可承受之重。

二、检测 ≠ 纠正:奇偶校验的天花板

视频随即引入了奇偶校验(parity bit)——一个古老但强大的工具。原理极简:数一数一段数据里 1 的个数,如果是偶数就记 0,奇数就记 1(或反之),把这个"奇偶性"附在数据后面。接收方重算一次,对不上就知道出错了。

但奇偶校验有一个致命的短板:它只能告诉你"错了",却不知道错在哪。1 位的奇偶校验把海量可能性塌缩成一个二元信号——错或没错。出错的位置信息,在这步就被丢掉了。而且如果有偶数个位同时翻转,奇偶校验还会被骗过去,"查不出错"。

这就是 Hamming 在 1947 年面对的天花板:错误检测已经存在(奇偶校验、校验和),错误纠正却还是空白。视频在这里完成了关键的认知铺垫——纠错比检测难,难就难在你要把"位置"从噪声里捞出来。

三、历史时刻:被卡住的周末,与第一个纠错码

视频最动人的部分是这段历史(这部分是视频原话叙述)。Hamming 在贝尔实验室用 Model V 继电器计算机,靠打孔纸带输入程序。纸带难免有读错的位,机器读到错误就直接停机报警。工作日有操作员可以重读纸带纠错,可周末 Hamming 独自值班时,机器一停,他就只能把整卷纸带从头再来。

这份反复"从头开始"的挫败感,逼他开始想:机器既然能发现错误,为什么不能自己把错误改掉? 他顺着奇偶校验往下想——一个校验位只能分"错/没错"两类,但如果我用多个、相互重叠的校验位呢?每个校验位覆盖数据中一个不同的子集,当某个位出错时,会让"恰好覆盖它的那几个"校验位同时报警。这些报警校验位的组合,就成了一个能定位错误的"指纹"。

这是纠错码史上的一次范式跃迁:从"发现问题"到"定位并修复问题"。它和同事 Claude Shannon 同一时期(1948)提出的信息论遥相呼应——两个思想几乎同时诞生在贝尔实验室的走廊里。我的补充:这段历史常被讲成"天才的灵光",但更准确地说,是工程痛点驱动了理论突破。今天每一个工程师面对不可靠信道时的焦虑,Hamming 在 78 年前都替你经历过一遍。

四、核心魔术:把校验位钉在 2 的幂次位置

视频用一块 16 位的网格演示了具体构造。关键约定是:所有位置编号为 2 的幂次(1, 2, 4, 8, 16…)的位,留给校验位;其余位置放真实数据。

为什么偏偏是 2 的幂次?因为这是为了让"位置编号的二进制表示"派上用场。这是整个 Hamming 码最精巧的设计,但视频把它讲得云淡风轻,我这里把它点破——它不是随意的安排,而是为了让下面的"地址魔法"成立。

每一个校验位负责检查"位置编号中某一位为 1 的所有数据位"。具体来说,位置 1(二进制 0001)的校验位,检查所有位置编号最低位为 1 的位(1, 3, 5, 7, 9, 11, 13, 15…);位置 2(0010)的校验位检查第二位为 1 的所有位(2, 3, 6, 7, 10, 11, 14, 15…);位置 4、8、16 以此类推。结果是:数据中的任何一个位,都被若干个校验位"交叉覆盖",就像多束探照灯从不同角度打在同一个点上。

五、错误自报家门:失败的校验位组合就是地址

这是全视频、也是整个 Hamming 码最让人拍案的一刻。当某个数据位翻转出错时,它会让"恰好覆盖它的那几个"校验位报警。而你只需要做一件事:把所有报警的校验位编号,按 2 的幂次拼成一个二进制数。

举例:如果位置 2 和位置 8 的校验位报警(位置 1、4、16 都正常),那么出错的位,其位置编号的二进制就是 1010 = 10。你直接翻到第 10 位,把它改回来,错误就修好了。

注意这里发生了什么——你根本没有"搜索",你是"算"出来的。 失败的校验位组合,把错误的位置编号原原本本地告诉你,仿佛错误比特举着手自报家门:"我在第 10 号位。" 这个用来定位的二进制指纹,在编码理论里有个正式名字叫伴随式(syndrome)。视频没有刻意强调这个词,但它演示的正是:伴随式等于错误位置的地址。

这就是从"奇偶校验只能查错"到"Hamming 码能纠错"的本质跨越。奇偶校验把所有错误塌缩成一个比特(有/无);Hamming 码用 k 个校验位撑起 2^k 种不同的伴随式,每种对应一个具体的错误位置(外加一个"全正常"的零号状态)。信息量被精打细算地分配给了"位置"。

六、加一位的飞跃:从 SEC 到 SECDED

视频的后半段处理了一个微妙但关键的问题:如果同时翻了两位怎么办?

单个错误时,伴随式恰好指向出错位。但如果两位同时翻转,校验位的报警组合会落在一个"看似有效"的位置上——你会以为是某一位错了,实际却会越纠越错。这种"把多位错误当成单位错误瞎修"的失败模式很危险。

视频给出的解法简洁优美:在最前面再加一个总校验位(overall parity),覆盖所有位。 这样系统就有了两层判断: - 如果伴随式非零,且总校验也报警 → 确实是单错,按地址修正(纠正); - 如果伴随式非零,但总校验正常 → 说明偶数位翻转,是双错(只能检测,不能纠正,需要请求重传)。

这就是工业界赫赫有名的 SECDED(Single Error Correction, Double Error Detection)。我的延伸:你电脑里的 ECC 内存(服务器、工作站标配)跑的就是 SECDED 的变体。宇宙射线、放射性衰变会让内存位随机翻转(所谓"软错误 soft error"),ECC 内存之所以能让服务器 7×24 小时不宕机,靠的正是这套从 1947 年绵延至今的机制。Hamming 当年的"周末愤怒",今天护着全球数据中心的稳定。

七、海明距离:纠错能力的数学本质(视频未深入的延伸)

视频用直觉演示了"为什么能纠 1 位、查 2 位",但背后那个统摄性的数学概念——海明距离(Hamming distance)——它只是一笔带过。我把它补齐,因为这是理解所有纠错码的钥匙。

两个码字之间的海明距离,是它们"有多少位不同"。一个编码方案能纠正的最大错误数 t,由其最小码距 d_min 决定:要纠正 t 个错误,需要 d_min ≥ 2t + 1。 直觉解释:如果任意两个合法码字之间至少差 3 位(d_min = 3),那么 1 位错误只会让接收到的串偏离原码字 1 步,离任何其他合法码字还有至少 2 步——最近邻就是正确答案,纠错成立。但如果错 2 位,它就可能恰好落在两个码字的"中点",无法判定,只能检测。

三份拷贝(重复码)的最小码距正好是 3,所以它纠 1 查 2;Hamming(7,4) 码的最小码距也是 3,能力相同,但开销从 300% 暴跌到 75%。同样的纠错能力,Hamming 用结构化冗余挤掉了绝大部分水分。 理解了"码距换能力"这把尺子,你就能举一反三:想要纠 3 个错,就去找码距 ≥ 7 的码。

八、开销的断崖式下降:256 位数据只要 9 位校验

视频最后的算账极具说服力。三份拷贝法保护 N 位数据要花 2N 位冗余,开销永远 200%。而 Hamming 码的优雅在于:校验位数只随数据长度按对数增长。

保护 16 位数据需要 5 个校验位(开销约 31%);保护 256 位数据,需要约 9 个校验位(开销 3.5%);保护一个 4 KB 的内存页,校验开销可以压到 1% 以下。数据块越大,"纠错税"摊得越薄——这才是 Hamming 码真正改变世界的地方。它让"几乎不花代价地获得纠错能力"成为可能,从而让 CD、硬盘、卫星通信、移动网络敢在充满噪声的真实信道上奔跑。

我的延伸:但这有一个天花板,叫香农信道容量(channel capacity)。Shannon 证明,任何信道都有一个理论极限速率 C,只要你的传输速率低于 C,就一定存在某种编码,能让错误率任意小。Hamming 码离这个极限还很远,它是"够用"的开端而非"最优"的终点。沿着"逼近香农极限"这条线,后人发明了 Reed-Solomon 码(QR 码、CD/DVD、深空通信在用)、LDPC 码(5G 数据信道、Wi-Fi 6 在用)、Polar 码(5G 控制信道在用)。Hamming 码是这整棵家族树的根。

知识结构图

flowchart TD
    A["不可靠信道:比特必然出错"] --> B{"如何应对错误?"}
    B -->|最朴素| C["冗余拷贝 + 多数表决<br/>开销 300%,纠 1 位"]
    B -->|能查不能改| D["奇偶校验 Parity<br/>1 bit = 有错/没错"]
    D -->|"查得出但不知在哪"| E["瓶颈:丢失了'位置'信息"]
    E --> F["Hamming 的突破:重叠校验位"]

    F --> G["校验位钉在 2 的幂次位置<br/>1, 2, 4, 8, 16..."]
    F --> H["每个校验位覆盖<br/>位置编号某 bit 为 1 的所有位"]

    G --> I["核心魔法:伴随式 Syndrome"]
    H --> I
    I --> J["失败的校验位组合<br/>= 出错位置的二进制地址"]
    J --> K["错误'自报家门'<br/>无需搜索,直接算出位置"]

    K --> L["加总校验位 → SECDED<br/>纠 1 位 + 查 2 位"]
    K --> M["数学本质:海明距离 ≥ 2t+1<br/>才能纠 t 个错误"]

    L --> N["现代应用"]
    N --> N1["ECC 内存(服务器/工作站)"]
    N --> N2["Reed-Solomon:QR/CD/DVD/深空"]
    N --> N3["LDPC:5G/Wi-Fi 6"]
    N --> N4["Polar:5G 控制信道"]

    M --> O["终极目标:逼近香农容量 C<br/>Hamming 是整棵编码树的根"]

    style I fill:#fff3cd,stroke:#d39e00,stroke-width:2px
    style K fill:#d4edda,stroke:#28a745,stroke-width:2px
    style F fill:#f8d7da,stroke:#dc3545,stroke-width:2px

实战启示

对工程师:把"冗余"从浪费重新理解为预算。 视频最大的认知升级,是让你不再把冗余视为"为了保险浪费的空间",而是把它当成一种可精确计量的可靠性预算。设计任何跨不可靠信道的系统——无线链路、分布式存储、跨地域复制——你都在做同一道题:用多大约开销,换多大的纠错能力?三副本是"暴力法",而海明码、Reed-Solomon、纠删码(erasure coding)是"精算法"。对象存储(如 S3、Ceph)正是用纠删码把 3 副本的 200% 开销压到 50%–66%,同时还能容忍多块盘同时损坏——这就是结构化冗余的威力。

对架构师:理解"码距决定能力"这把尺子。 选型时先问"我要容忍几个错误",再按 d_min ≥ 2t+1 反推需要哪种码。RAID 5(单盘容错)、RAID 6(双盘容错)本质就是不同码距的取舍。把这个心智模型内化,你能避免一个常见陷阱——把"检测到错误"误当成"能恢复错误"。只做了奇偶校验或简单校验和的系统,出了错只会崩溃或返回脏数据,因为它只花钱买了"发现",没买"修复"。

对每个用电脑的人:你每天都在享受 Hamming 的馈赠。 你的服务器内存是 ECC,你扫的二维码靠 Reed-Solomon 容忍 30% 损坏,你看的流媒体能在弱网下不卡顿,靠的都是这条血脉。理解了它,你就理解了数字世界一个反直觉的真相:可靠不等于不出错,而是等于"为出错做好了结构化的准备"。

延伸学习路径

  1. 3Blue1Brown《Hamming codes part 2, the elegance of it all》——本视频的续集,从信息论视角揭示 Hamming 码与超立方体、海明距离的几何美感,适合想"知其所以然"的读者。
  2. Ben Eater《How Hamming codes work (in hardware)》——用面包板和 74 系列逻辑芯片,把 Hamming 码在硬件层面搭出来,把抽象的"校验位"变成发光的 LED,硬核又直观。
  3. David MacKay《Information Theory, Inference, and Learning Algorithms》——免费经典教材,从 Shannon 容量一路讲到 LDPC、Turbo 码,是把"编码树"看全的最佳读物。
  4. 关于 Reed-Solomon 的深度文章(如 lumi-star 的 bottom-up 讲解)——理解 QR 码为什么撕掉一角还能扫、CD 划痕为何不致命,是 Hamming 思想走向实用的下一站。
  5. 关于 5G LDPC / Polar 码的技术综述——看 Hamming 的后裔如何逼近香农极限,理解现代移动通信为什么能在极端信噪比下稳定传输。

一句话总结

数字世界的可靠,不是因为不出错,而是因为我们让错误"自报家门"——海明码用一个二进制地址,把"出错的位置"从噪声里直接算了出来,用极低的冗余代价,换来了整个数字文明对噪声的免疫力。

参考来源

  1. But what are Hamming codes? The origin of error correction — 3Blue1Brown — 本文分析的核心视频
  2. Hamming codes and error correction — 3Blue1Brown 官方课程页 — 视频官方课程说明与时间线
  3. 视频内容摘要 — SummarizeYou — 视频结构化摘要与要点
  4. QR Code Error Correction: How Damaged Codes Still Scan (2026) — Scanova — Reed-Solomon 在 QR 码中的纠错应用补充
  5. Reed-Solomon Error Correcting Codes from the Bottom Up — lumi-star — 从海明码到 Reed-Solomon 的延伸学习

本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入