2. 纠错码基础与比特翻转模型

要构建一个能真正纠正比特翻转的编码方案,第一步不是急着写编码器,而是把“错误”本身用可计算的量描述清楚。本节围绕三个核心概念展开:汉明距离如何度量两个码字之间的差异,最小距离如何决定码的检错与纠错上限,以及比特翻转信道下错误图样如何表示一次具体的传输损伤。理解这三者的关系,后续构造汉明码、设计校验矩阵、编写译码器时才有明确的判断依据。

汉明距离:把“差了几个比特”变成可计算的量

对两个等长二进制串 x 和 y,汉明距离 d(x, y) 定义为它们对应位置上取值不同的位数,也就是 x ⊕ y 中 1 的个数(异或结果的汉明重量)。例如 x = 1011010、y = 1001110,逐位比较后第 3、4 位不同,故 d(x, y) = 2。汉明距离满足非负性、对称性和三角不等式,是一个合法的度量,这使得“最近码字译码”有了几何意义:接收向量落在哪个码字的“邻域”内,就判为哪个码字。

需要注意,汉明距离衡量的是硬判决后的比特差异,它不区分“0 错成 1”还是“1 错成 0”,也不携带任何置信度信息。这正是比特翻转信道模型的前提假设,也是它与加性高斯白噪声信道在建模上的关键区别。

最小距离与检错、纠错能力

一个分组码 C 的最小距离 d_min 定义为所有不同码字对之间汉明距离的最小值:d_min = min{ d(c_i, c_j) : c_i ≠ c_j }。由于线性分组码中任意两码字之差仍是码字,d_min 等于非零码字的最小汉明重量,这一性质在验证时非常实用——只需枚举非零码字求最小重量,而不必做两两比较。

最小距离与能力的关系由两条经典界给出:

  • 检错能力:最多可检出 d_min − 1 个比特错误。因为错误图样重量小于 d_min 时,接收向量不可能等于另一个合法码字。
  • 纠错能力:最多可纠正 t = ⌊(d_min − 1) / 2⌋ 个比特错误。直观理解是,以每个码字为球心、半径 t 的汉明球互不重叠,接收向量落入唯一一个球内即可无歧义译码。

以 (7,4) 汉明码为例,其 d_min = 3,因此可检出 2 位错误、纠正 1 位错误。若某次接收向量与两个码字的距离都是 2,说明发生了 2 位错误,此时纠错会失败,但检错机制可以报警。工程上常把“纠 1 检 2”作为该码的工作模式:单错自动纠正,双错报告不可纠,避免把双错误纠成第三个错误码字而扩大损伤。

判断一个码“能纠几位”时,务必先确认 d_min 是真实最小距离而非设计目标。构造完成后应通过枚举或校验矩阵验证,不能仅凭参数表推断。

比特翻转信道模型

比特翻转信道(Binary Symmetric Channel 的硬判决简化模型,常称 BSC)对每个传输比特独立地以概率 p 发生翻转,以概率 1 − p 正确到达。其转移关系可写为 P(r_i ≠ c_i) = p、P(r_i = c_i) = 1 − p,且各比特相互独立。发送码字 c、接收向量 r 与错误图样 e 满足:

r = c ⊕ e
e_i = 1  表示第 i 位发生翻转
e_i = 0  表示第 i 位正确
重量 w(e) 即本次传输实际翻转的比特数

错误图样 e 是描述一次具体损伤的最紧凑形式:它把“哪些位置坏了”与“坏成什么样”分离,而由于二进制翻转是自逆的,纠正操作就是 ĉ = r ⊕ ê,其中 ê 是译码器估计出的错误图样。对 (7,4) 汉明码,若发送 c = 1011010、第 4 位翻转,则 e = 0001000、r = 1010010,译码器计算校验子后应定位到第 4 位并输出 ê = 0001000,恢复原码字。

在 BSC 下,重量为 k 的错误图样出现概率为 p^k (1−p)^(n−k)。当 p 较小时,低重量图样占主导,这正是“优先纠正少量错误”策略合理的概率依据。设计译码器时通常按重量从小到大搜索候选错误图样,一旦校验子匹配即停止,兼顾正确率与延迟。

比特翻转信道:码字 ⊕ 错误图样 = 接收向量 发送码字 c 1 0 1 1 0 1 0 错误图样 e(重量 w=1) 0 0 0 1 0 0 0 = 接收向量 r 1 0 1 0 0 1 0 最小距离决定能力上限 c₁ 半径 t c₂ 半径 t c₃ 半径 t d_min ≥ 2t+1 d_min ≥ 2t+1 r 落入唯一球内 → 纠错成功 翻转位 纠错半径 t 内的可纠正错误

从距离到译码:一个可操作的判断流程

把上述概念落到实现上,译码器实际做的是“在错误图样空间中找最轻的匹配项”。以 (7,4) 汉明码为例,校验矩阵 H 的 7 个列向量互不相同且非零,因此每个单比特错误图样对应唯一的非零校验子 s = H·rᵀ = H·eᵀ。实现时可按如下顺序处理:

  1. 由接收向量计算校验子 s;若 s = 0,判定无错或错误图样恰为某码字(后者概率极低,属不可检错误)。
  2. 若 s 与 H 的某一列相同,则对应位置发生单比特翻转,输出 ê 为该位置为 1 的单位图样,纠正后得到 ĉ = r ⊕ ê。
  3. 若 s 不等于任何单列,说明发生了多位错误,超出纠错能力,应标记为不可纠并上报,而不是强行纠错。

这一流程直接体现了 d_min = 3 带来的“纠 1 检 2”能力边界:单错有唯一列匹配,双错则校验子落在“列和”上,无法与单错区分,只能检错。若把码长或校验位数改变,例如扩展到 (15,11) 汉明码,d_min 仍为 3,纠错能力不变,但可纠正的错误位置集合扩大,校验子到位置的映射表也相应变长。

错误图样表示在验证中的价值

在构建与验证阶段,错误图样是构造测试用例最直接的工具。与其随机翻转比特,不如按重量分层枚举:先穷举所有重量 1 的图样(共 n 个),验证每个都能被正确纠正;再抽样重量 2 的图样,验证译码器能识别为不可纠而非误纠;最后注入全零图样确认无错路径。对 (7,4) 码,重量 1 图样仅 7 个,可完全穷举,这是小码长教学验证的优势。记录每个图样对应的校验子与译码输出,就能形成一张可复查的验证表,判断译码器是否与 d_min 的理论能力一致。

不要把“校验子非零”直接等同于“发生了可纠正错误”。校验子非零只说明接收向量不是合法码字,是否可纠取决于该校验子是否对应一个重量不超过 t 的错误图样。混淆这两点会导致译码器在多位错误时输出错误码字。

小结本节的关键逻辑链:汉明距离给出码字差异的度量,最小距离把这个度量转化为检错与纠错的能力上限,比特翻转信道用错误图样把一次传输损伤表示为与码字等长的二进制向量,而译码的本质就是在重量约束下估计这个向量并做异或恢复。后续构造具体编码时,校验矩阵的列设计、校验子的映射方式,都应回到这条链上来检验是否自洽。