news 2026/8/31 6:53:53

海明码:从编码到纠错,一篇讲透

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
海明码:从编码到纠错,一篇讲透

文章目录

      • 海明码:从编码到纠错,一篇讲透
      • 一、确定校验位数量
      • 二、编码过程
        • 第 1 步:确定校验位和数据位的位置
        • 第 2 步:确定每个校验位负责检查哪些位
        • 第 3 步:计算每个校验位的值(偶校验)
        • 第 4 步:得到最终编码
      • 三、纠错过程
        • 第 1 步:重新计算每个校验组的奇偶性
        • 第 2 步:拼出错误位置编号
        • 第 3 步:纠正错误
      • 四、如果没有错误呢?
      • 五、总结

海明码:从编码到纠错,一篇讲透

海明码(Hamming Code)是纠错编码中最经典、最基础的方案,由理查德·海明于 1950 年提出。它的核心能力是:自动检测并纠正 1 位错误

今天我们就用 4 位数据1011作为例子,完整走一遍海明码的编码和纠错过程。


一、确定校验位数量

校验位数量 r 需满足:

2 r ≥ d + r + 1 2^r \geq d + r + 12rd+r+1

其中 d 为数据位数。

对于 4 位数据:2 3 = 8 ≥ 4 + 3 + 1 = 8 2^3 = 8 \geq 4 + 3 + 1 = 823=84+3+1=8,所以 r = 3。

总共 7 位编码,即(7, 4) 海明码


二、编码过程

第 1 步:确定校验位和数据位的位置

校验位固定放在位置编号为 2 的幂次的位上,其余位置放数据位:

位置1234567
类型P₁P₂D₁P₃D₂D₃D₄
  • P = 校验位(第 1、2、4 位)
  • D = 数据位(第 3、5、6、7 位)

将数据1011依次填入数据位:

位置1234567
类型P₁P₂D₁P₃D₂D₃D₄
??1?011
第 2 步:确定每个校验位负责检查哪些位

规则:位置编号的二进制表示中,第 i 位为 1 的那些位置,归 Pᵢ 检查。

  • P₁(第 1 位):检查位置编号二进制末位为 1 的位 → 第 1、3、5、7 位
  • P₂(第 2 位):检查位置编号二进制倒数第 2 位为 1 的位 → 第 2、3、6、7 位
  • P₃(第 4 位):检查位置编号二进制倒数第 3 位为 1 的位 → 第 4、5、6、7 位
第 3 步:计算每个校验位的值(偶校验)

让每个校验位负责的那些位中,1 的个数为偶数:

P₁:检查第 1、3、5、7 位 → P₁ + D₁ + D₂ + D₄ = P₁ + 1 + 0 + 1 = P₁ + 2
要使总和为偶数 → P₁ =0

P₂:检查第 2、3、6、7 位 → P₂ + D₁ + D₃ + D₄ = P₂ + 1 + 1 + 1 = P₂ + 3
要使总和为偶数 → P₂ =1

P₃:检查第 4、5、6、7 位 → P₃ + D₂ + D₃ + D₄ = P₃ + 0 + 1 + 1 = P₃ + 2
要使总和为偶数 → P₃ =0

第 4 步:得到最终编码
位置1234567
类型P₁P₂D₁P₃D₂D₃D₄
0110011

最终编码为:0110011


三、纠错过程

假设传输过程中第 5 位出错,接收方收到的编码为:

0 1 1 0 1 1 1

(第 5 位从 0 变成了 1)

第 1 步:重新计算每个校验组的奇偶性

P₁ 组(第 1、3、5、7 位):0 + 1 + 1 + 1 = 3 → 奇数 →校验失败,记为 1

P₂ 组(第 2、3、6、7 位):1 + 1 + 1 + 1 = 4 → 偶数 →校验通过,记为 0

P₃ 组(第 4、5、6、7 位):0 + 1 + 1 + 1 = 3 → 奇数 →校验失败,记为 1

第 2 步:拼出错误位置编号

将校验结果按 P₃P₂P₁ 排列:

P₃P₂P₁ = 101

101(二进制)=5(十进制)

→ 第 5 位出错!

第 3 步:纠正错误

将第 5 位翻转:1 → 0

纠正后的编码:0110011,与原始编码完全一致。


四、如果没有错误呢?

如果接收到的编码完全正确,那么所有校验组的奇偶性都会通过:

P₃P₂P₁ = 000

000 = 0,表示没有错误


五、总结

步骤内容
确定校验位数量2 r ≥ d + r + 1 2^r \geq d + r + 12rd+r+1
放置校验位放在 2 的幂次位置上
计算校验位让每个校验组中 1 的个数为偶数
纠错定位用 P₃P₂P₁ 拼出错误位置编号
纠错操作翻转对应位置的那一位

海明码的精妙之处在于:校验位的位置设计和覆盖规则,天然保证了每个位置出错时,产生的校验结果都是唯一的。所以只要错 1 位,就一定能精确定位并纠正。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/31 6:50:39

远景智能笔试拆解:从Java集合到算法题的备考指南

“远景智能笔试你准备得怎么样了?”如果你最近在投秋招,这句问候可能已经听过好几遍了。每年这个时候,远景智能的软件技术笔试题都会在各技术群里被反复讨论,热度一点不亚于那几家大厂。我刷完第一批题目之后最大的感受就是&#…

作者头像 李华
网站建设 2026/8/31 6:50:28

06-M6-部门过滤与综合研判-从问答机到研判助手

部门过滤与综合研判:从问答机到研判助手(M6 落地实测) 系列:城市管理 Agentic RAG —— 从零搭建城市管理问答系统 本篇:M6 部门过滤命令 综合研判输出(实测版) 源码:https://gite…

作者头像 李华
网站建设 2026/8/31 6:49:39

LLVM MIR改用block arguments替代phi:代码生成的新变革

最近在阅读 LLVM Code Generation 相关的 RFC 时,有一个标题特别吸引我:Change MIR to use block arguments instead of phis。作为一个经常和 MIR、SelectionDAG 打交道的后端开发者,我对这种“表面上是语法改动,实际会牵动整个代…

作者头像 李华
网站建设 2026/8/31 6:47:59

途虎养车Java秋招笔试题A卷深度复盘:考点、陷阱与备考策略

先说结论:途虎养车2023秋招这套Java笔试试卷A,整体难度放在互联网公司校招笔试里属于中等偏上,但它有个非常鲜明的特点——大量题目都贴着“汽车后市场”的业务场景出,不是干巴巴地考八股文,而是把Java基础、并发、数据…

作者头像 李华
网站建设 2026/8/31 6:47:53

Phigros高难谱面AP全攻略:从判定机制到实战练习

刚接触 Phigros 高难度谱面的时候,很多人都会把“把 All Perfect 打出来”当作一个阶段性的证明。而当你看到标题里“定数组用骰子定的16.2”这样的表述,可能第一反应是:这是一首定数被随机分配的谱面,还是一场靠运气完成的挑战&a…

作者头像 李华
网站建设 2026/8/31 6:45:49

【研发类-框架和库Skills】azure-eventhub-dotnet 技能

Azure Event Hubs SDK for .NET - 用于.NET的高吞吐量事件流式传输SDK,用于通过Azure Event Hubs发送和接收事件。 📥 下载地址: https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-eventhub-dotnet 技能概述…

作者头像 李华