4. 重复码构建与比特翻转纠正

在比特翻转纠错码的谱系中,重复码是最朴素、也最容易手工推演的一类。它不依赖复杂的有限域运算,而是用“把同一个比特说三遍”的冗余方式换取纠错能力。三重复码(Triple Repetition Code)正是这一思想的最小可用实例:编码规则简单到可以口算,译码规则简单到可以目测,但它已经完整包含了纠错码的三个核心要素——编码映射、译码判决和纠错能力边界。理解三重复码,是理解后续汉明码、循环码等更复杂结构的重要台阶。

一、编码规则:从 1 比特到 3 比特的映射

三重复码的编码对象是单个信息比特 b ∈ {0,1}。编码器把 b 复制三次,得到码字 c = (b, b, b)。因此码本只有两个合法码字:信息 0 映射为 000,信息 1 映射为 111。码长 n = 3,信息位 k = 1,码率 R = k/n = 1/3。这个码率很低,意味着每传输 1 比特有效信息要占用 3 个信道符号,代价是带宽或时延的增加,换来的是对单比特错误的抵抗能力。

从码距角度看,两个合法码字 000 与 111 之间逐位比较,三位全部不同,汉明距离 d_min = 3。最小码距是纠错能力的“硬指标”:一个码能纠正 t 个错误,当且仅当 d_min ≥ 2t + 1。代入 d_min = 3,得到 t = 1,即三重复码恰好可以纠正 1 个比特翻转。这个结论不是经验估计,而是由码距直接推出的严格边界。

二、多数表决译码:逐位比较与判决

译码端收到的是可能被信道污染的三位向量 r = (r1, r2, r3)。多数表决译码的做法是统计三位中 1 的个数:若 1 的个数不少于 2,则判为 1;否则判为 0。等价地,可以计算三个比特的和 S = r1 + r2 + r3,当 S ≥ 2 时输出 1,当 S ≤ 1 时输出 0。这一规则的本质是“少数服从多数”,它假设错误是稀疏的,即三位中最多只有一位出错,此时多数位仍然是正确的原始信息。

把接收向量按错误位数分类,可以清楚看到译码行为。无错时收到 000 或 111,表决结果与原始信息一致。单比特翻转时,000 可能变成 100、010、001,三者中 1 的个数都是 1,表决输出 0,成功恢复;111 可能变成 011、101、110,三者中 1 的个数都是 2,表决输出 1,同样成功恢复。可见全部 6 种单比特错误模式都能被纠正,这正是 t = 1 的具体体现。

三、纠错能力边界:双比特翻转为何失效

三重复码的能力上限必须说清楚:它能纠 1 位错,但不能纠 2 位错,也不能可靠地检测 3 位错。以原始信息 0(码字 000)为例,若发生两位翻转,收到 110、101 或 011,1 的个数为 2,表决输出 1,译码结果与原始信息相反,形成不可检测的误纠。若三位全错,收到 111,表决输出 1,同样错误。对原始信息 1 的情况完全对称。这说明当错误位数达到 2 时,接收向量已经落入另一个码字的“势力范围”,译码器会自信地给出错误答案。

从码距角度解释更直观:d_min = 3 意味着两个码字之间最近的距离是 3 步翻转。译码器把接收向量判给距离最近的码字,单比特错误距离原码字为 1、距离另一码字为 2,判决正确;双比特错误距离原码字为 2、距离另一码字为 1,判决就倒向错误码字。因此“纠 1 位错”与“双错必错”是同一枚硬币的两面,不是实现缺陷,而是码结构决定的理论极限。

三重复码:编码 → 信道错误 → 多数表决译码 编码器 信息比特 b c = (b, b, b) 码率 R = 1/3 000 111 合法码字(d_min = 3) 二进制对称信道 每比特独立翻转 翻转概率 p 接收 r = (r1,r2,r3) 多数表决译码 S = r1 + r2 + r3 S ≥ 2 → 输出 1 S ≤ 1 → 输出 0 接收向量与译码判决(以原始信息 0 为例) 接收向量 r 错误位数 S = r1+r2+r3 译码输出 结果 000 0 0 0 正确 100 / 010 / 001 1 1 0 纠正 110 / 101 / 011 2 2 1 误纠 111 3 3 1 错误

四、一个可手算的完整示例

设发送信息 b = 1,编码得到 111。假设信道在第二位发生翻转,接收向量为 r = 101。译码器计算 S = 1 + 0 + 1 = 2,因 S ≥ 2 输出 1,与原始信息一致,纠错成功。再设同一码字在第一位和第二位同时翻转,接收 r = 001,此时 S = 0 + 0 + 1 = 1,译码输出 0,与原始信息 1 相反,纠错失败。这两个例子用同一套规则、同一组参数,仅错误位数不同,结果就从成功翻转为失败,直观展示了 t = 1 的边界位置。

若把上述过程写成可复用的判定逻辑,可以整理为如下伪代码,便于在实验或仿真中直接实现:

function decode_triple(r1, r2, r3):
    S = r1 + r2 + r3
    if S >= 2:
        return 1
    else:
        return 0

# 示例:发送 1,编码 111,第二位翻转
r = (1, 0, 1)
b_hat = decode_triple(r[0], r[1], r[2])   # 输出 1,纠错成功

# 示例:发送 1,编码 111,第一、二位翻转
r = (0, 0, 1)
b_hat = decode_triple(r[0], r[1], r[2])   # 输出 0,纠错失败

五、能力分析:纠错概率与适用场景

在二进制对称信道下,若单比特翻转概率为 p,三位中恰好出现 1 位错误的概率为 3p(1-p)²,出现 0 位错误的概率为 (1-p)³。三重复码能正确译码的概率是这两项之和,即 P_correct = (1-p)³ + 3p(1-p)²。当 p 较小时,这一概率明显高于不编码时的 1-p;但当 p 增大到接近 0.5 时,冗余带来的收益迅速消失,甚至可能因误纠而变差。这说明重复码适合错误稀疏、信道质量尚可的场合,而不是万能方案。

工程上,三重复码的价值更多在于教学与原型验证:它可以用三个触发器、一个三输入多数门直接硬件实现,也可以用软件三行代码完成编解码,非常适合用来验证“编码—注入错误—译码—比对”的完整链路。实际系统中若需要更强纠错能力,通常会增加重复次数(如五重复码可纠 2 位错)或改用汉明码等更高效的编码,但三重复码所体现的码距约束、多数判决和纠错边界,是所有这些方案共同的分析起点。

判断三重复码能否纠正某次错误,只需数接收向量中与发送码字不同的位数:不超过 1 位则必能纠正,达到 2 位则必然误纠。这个“数不同位数”的方法,就是汉明距离在最小码例上的直接应用。