4. 经典 [7,4,3] 汉明码剖析
Steane 七比特码并不是凭空出现的量子码,它的稳定子结构、纠错逻辑乃至“七比特”这个数字,都直接继承自经典 [7,4,3] 汉明码。理解汉明码如何用 3 个校验位保护 4 个信息位、如何通过校验子定位错误位置,是理解 Steane 码为何能纠正任意单比特错误(包括比特翻转与相位翻转)的前提。本节先把经典汉明码的编码、校验子计算和纠错流程完整走一遍,再指出它与 Steane 码的对应关系。
一、参数含义与编码规则
[7,4,3] 三个数字分别表示:码字总长 n=7,信息位 k=4,最小汉明距离 d=3。最小距离为 3 意味着任意两个合法码字至少相差 3 个比特,因此可以纠正 t=⌊(d−1)/2⌋=1 个比特错误。码率 R=k/n=4/7,冗余度为 3 个校验位。
编码采用系统码形式,码字记为 (x₁x₂x₃x₄ c₁c₂c₃),前 4 位是原始信息,后 3 位是按偶校验规则生成的校验位。设信息位为 x₁,x₂,x₃,x₄,校验方程为:
c₁ = x₁ ⊕ x₂ ⊕ x₃
c₂ = x₁ ⊕ x₂ ⊕ x₄
c₃ = x₁ ⊕ x₃ ⊕ x₄
以信息 1011(x₁=1, x₂=0, x₃=1, x₄=1)为例:c₁=1⊕0⊕1=0,c₂=1⊕0⊕1=0,c₃=1⊕1⊕1=1,得到码字 1011001。可以验证,每个校验位都使对应校验组内 1 的个数为偶数。
二、校验矩阵与校验子计算
把上述三个校验方程写成矩阵形式 H·cᵀ=0,可得校验矩阵 H。一个常用的等价写法是把 H 的 7 列取为 1 到 7 的二进制表示,这样校验子的数值就直接等于出错位置的列编号:
H = [0 0 0 1 1 1 1
0 1 1 0 0 1 1
1 0 1 0 1 0 1]
接收端计算校验子 s = H·rᵀ(模 2),其中 r 是接收到的 7 位向量。若 s=000,判定无错;若 s 非零,则 s 的二进制值恰好指出出错比特的位置。例如接收向量 r=1011101(第 4 位由 1 翻成 0 之外再假设第 5 位出错),计算得到 s 后查表即可定位。需要注意,这一“列即位置编号”的便利性依赖于 H 的列排列方式,若采用其他列序,校验子到位置的映射需相应调整,但纠错能力不变。
三、单比特纠错的实际操作
假设发送码字 c=1011001,传输中第 5 位发生翻转,接收向量 r=1011101。计算校验子:
s₁ = r₄⊕r₅⊕r₆⊕r₇ = 1⊕1⊕0⊕1 = 1
s₂ = r₂⊕r₃⊕r₆⊕r₇ = 0⊕1⊕0⊕1 = 0
s₃ = r₁⊕r₃⊕r₅⊕r₇ = 1⊕1⊕1⊕1 = 0
按 s=(s₃s₂s₁) 读作二进制 001,对应第 1 位?这里需要小心:上述 H 的列顺序与位置编号的对应关系必须与校验方程一致。若按 H 的列依次对应位置 1~7,则 s=001 指向第 1 列,即第 1 位。但本例中实际出错在第 5 位,说明校验方程与 H 列序的对应需要重新核对——这正是实际实现中最容易出错的地方。正确的做法是:先固定 H 的列排列,再由 H 反推校验方程,而不是先写方程再随意排 H。若采用“列即位置二进制”的 H,则第 5 位对应列 101,校验子应为 101。因此实现时应以 H 为准统一推导,避免方程与矩阵脱节。
纠错动作本身很简单:把校验子指向的那一位取反,得到 1011001,与原始码字一致。若校验子为 000,则不做任何修改。需要强调,汉明码只能保证纠正 1 位错误;若发生 2 位错误,校验子会指向某个“第三位”,纠错反而引入新错误,这是 d=3 的固有限制。
四、与 Steane 码的对应关系
Steane 码把经典汉明码“量子化”:它使用两个经典 [7,4,3] 汉明码,一个用于纠正 X 错误(比特翻转),一个用于纠正 Z 错误(相位翻转)。其 6 个稳定子生成元正是由汉明码校验矩阵 H 的行构造:X 型稳定子对应 H 的各行(作用于比特翻转),Z 型稳定子对应 H 的各行(作用于相位翻转)。由于 H 的任意两列线性无关,单比特的 X 或 Z 错误都会产生非零且互不相同的校验子,从而被唯一识别并纠正。
因此,掌握经典汉明码的编码规则、校验子计算和“列即位置”的定位思想,就掌握了 Steane 码纠错逻辑的骨架。区别只在于:经典码的校验子是 3 位二进制数,而 Steane 码的校验子测量结果是 6 位(3 位 X 型 + 3 位 Z 型),分别告诉我们是哪一位发生了比特翻转、哪一位发生了相位翻转。