汉明码计算器(编码、解码、纠错)
用汉明码对数据位编码:(7,4)、(15,11) 或任意长度,偶校验或奇校验,可选 SECDED;也可解码接收到的码字,给出校正子、出错位和纠正结果。
位置从左边按 1 开始编号;校验位位于 1、2、4、8 … 位置,校验位 P 负责检查所有编号中该二进制位为 1 的位置。
| 校验位 | 位置 | 检查的位置 | 这些位置上的位 | 检查 |
|---|---|---|---|---|
| P1 | 1 | 1, 3, 5, 7 | 0101 | 通过 |
| P2 | 2 | 2, 3, 6, 7 | 1111 | 通过 |
| P4 | 4 | 4, 5, 6, 7 | 0011 | 通过 |
| 位置 | 二进制 | 作用 | 位 |
|---|---|---|---|
| 1 | 001 | P1 | 0 |
| 2 | 010 | P2 | 1 |
| 3 | 011 | D1 | 1 |
| 4 | 100 | P4 | 0 |
| 5 | 101 | D2 | 0 |
| 6 | 110 | D3 | 1 |
| 7 | 111 | D4 | 1 |
汉明码在一块数据上增加几个校验位,使任何一个翻转的位都能被找到并纠正。它是纠错码的教科书式例子,至今仍用于 ECC 内存(SECDED 变体)。这个计算器可以把数据位编码成码字,也可以检查接收到的码字:计算校正子,指出哪一位出错,纠正它并提取数据,还用表格显示每个校验位负责检查哪些位置。
使用方法
- 选择编码或检查。
- 输入数据位(编码)或接收到的码字(检查)。
- 选择码型(或让工具适应长度),以及偶校验或奇校验。
- 如果需要检测双位错误,请加上用于 SECDED 的整体校验位。
计算公式
位置 2ᵗ 处的校验位 = 所有第 t 位为 1 的位置的 XOR · 校正子 = 所有为 1 的位的位置的 XOR = 出错位置
有 r 个校验位时,码字有 n = 2ʳ − 1 个位置,承载 n − r 个数据位——(7,4)、(15,11)、(31,26);其他长度则取满足 2ʳ ≥ k + r + 1 的最小 r。位置从左边按 1 开始编号,数据位依次填入不是 2 的幂的位置。使用奇校验时每项检查都取反。SECDED 增加一个整体校验位:校正子非零且整体校验不通过,是可纠正的单位错误;校正子非零而整体校验通过,则说明有两位错误。
示例
用汉明码(7,4)对 1011 编码:数据放在位置 3、5、6、7;P1 = 1⊕0⊕1 = 0,P2 = 1⊕1⊕1 = 1,P4 = 0⊕1⊕1 = 0,得到 0110011。如果第 5 位翻转(0110111),为 1 的位在位置 2、3、5、6、7,2⊕3⊕5⊕6⊕7 = 5,于是纠正第 5 位,恢复出数据 1011。
常见问题
汉明码能纠正两位错误吗?
不能。基本码只能纠正一位错误;出现两位错误时,校正子会指向错误的位置。扩展(SECDED)码多加一位,至少能检测出两位错误。
为什么校验位在 1、2、4、8 位置?
这些位置的二进制只有一个 1,所以每个校验位负责检查位置编号的一个不同二进制位。把未通过的检查加起来,就能以二进制拼出出错位置。
用偶校验还是奇校验?
两者工作方式相同,奇校验只是把每项检查取反。教材通常使用偶校验。
资料来源
最后更新:
包含这些输入的页面地址: https://kakao.mobile/zh/tools/hamming-code-calculator/
引用此工具
kakaoCalc. (2026, November 8). 汉明码计算器(编码、解码、纠错). https://kakao.mobile/zh/tools/hamming-code-calculator/
“汉明码计算器(编码、解码、纠错).” kakaoCalc, 8 Nov. 2026, kakao.mobile/zh/tools/hamming-code-calculator/.