差错控制编码
- 理解码距、最小码距与检纠错能力的关系
- 掌握奇偶监督码、二维奇偶监督码、恒比码等简单编码
- 重点掌握线性分组码的监督矩阵 $\mathbf{H}$、生成矩阵 $\mathbf{G}$、校正子译码全流程
- 理解汉明码的构造原理,能完成 $(7,4)$ 汉明码的编解码
- 掌握循环码的生成多项式与多项式除法编码方法
{{< docpage "pdf/通信原理/第九章.pdf" page=1 title="第九章 差错控制编码 课件首页" mode="ref" >}}
在数字通信中,无论信道质量多好,加性噪声始终不可避免。当误码无法仅靠均衡消除时,就需要引入差错控制编码——在信息码元中人为插入监督(校验)码元,以降低有效信息速率为代价,换取传输可靠性的提升。
信道类型
按错码分布规律分为三类:
| 类型 | 特征 | 典型原因 |
|---|---|---|
| 随机信道 | 错码独立、随机出现 | 白噪声 |
| 突发信道 | 错码成串集中出现 | 脉冲干扰 |
| 混合信道 | 两者兼有 | 实际信道 |
差错控制方法
- ARQ(检错重发):接收端只检错,发现错误后请求重发。需要反向信道,适合非实时数据传输。
- FEC(前向纠错):接收端自行纠错,不需要反向信道,适合实时通信。
- HEC(混合纠错):先尝试纠错,纠不了再请求重发。
- 反馈校验法、差错删除法等。
9.2.1 分组码的基本概念
分组码 $(n, k)$:将每 $k$ 位信息码元附加 $r = n - k$ 位监督码元,组成 $n$ 位码组。监督码元仅监督本码组中的信息码元。
编码效率 $R = k/n$,即信息位占总码长的比例。
9.2.2 码重与码距
- 码重(汉明重量):码组中非零码元(即"1")的数目。例如 $10110$ 的码重为 3。
- 码距(汉明距离):两个码组在对应位上取值不同的位数。例如 $10110$ 与 $01101$ 的码距为 4。
一个码组的集合中,所有两两码距的最小值称为最小码距 $d_{\min}$。它是衡量码的检纠错能力的核心参数。
9.2.3 最小码距与检纠错能力 ⭐
这是本章最重要的定理之一。理解它的关键是几何直觉:码字是 $n$ 维空间中的点,码距就是点之间的距离。点离得越远,越容易区分——即使其中某个点发生了"偏移"(错误),只要偏移不大,仍能被正确识别。
类比理解
把码字想象成地图上的城市。如果城市之间距离很远,那么即使你走错了一段路(误码),仍然能判断出你原本想去的城市。最小码距就是最近两座城市之间的距离。
三条结论:
- 检测 $e$ 个错码:发送码字 $\mathbf{A}$,错 $e$ 位后变成非码字 $\mathbf{A'}$。只要 $\mathbf{A'}$ 不是任何其他合法码字,接收端就能发现"出错了"。最近合法码字与 $\mathbf{A}$ 距离至少 $d_{\min}$,所以错 $d_{\min} - 1$ 位以内都不会碰到另一个码字。令 $e = d_{\min} - 1$,得第一条。
- 纠正 $t$ 个错码:要能从错误码字唯一还原出发送码字,要求"错误球"与"错误球"之间不重叠,因此需要 $2t$ 个距离来隔开相邻码字,再加 1 得到 $2t + 1$。
例题:最小码距的应用
某码的最小码距 $d_{\min} = 5$,则最多检测 $5-1=4$ 个错码,最多纠正 $\lfloor(5-1)/2\rfloor = 2$ 个错码。
编码的效果:以 $(4,3)$ 偶监督码为例,设信道误码率 $p = 0.001$。未编码时单码元出错概率就是 $10^{-3}$;编码后,只有偶数个错码(至少2个)才检测不出来:
误码率降低了约三个数量级!
{{< docpage "pdf/通信原理/第九章.pdf" page=3 title="最小码距与检纠错能力" mode="ref" >}}
9.3.1 奇偶监督码
是什么:在 $n-1$ 位信息后加 1 位监督位,使码组中"1"的总数为偶数(偶校验)或奇数(奇校验)。
偶校验方程:$a_{n-1} \oplus a_{n-2} \oplus \cdots \oplus a_1 \oplus a_0 = 0$
接收端重新计算上述异或和,结果为 0 表示无误。
9.3.2 二维奇偶监督码(水平垂直奇偶监督码)
将信息排成矩阵,每行加一个水平校验位、每列加一个垂直校验位。这样形成一个"交叉校验网"。
- 能检测大多数偶数个错误(因为行列两个方向同时校验)。
- 但仍无法检测构成矩形的 4 个错码。
- 适用于检测突发错码。
9.3.3 恒比码
从固定码长的码组中,选取"1"和"0"个数之比为恒定值的码组作为许用码组。例如我国电传通信中的"5 中取 3 码":5 位码组中必须有 3 个"1",共 $C_5^3 = 10$ 种,恰好表示 0–9 十个数字。
能发现所有 1 位错误和所有奇数个错误(因为 1 位翻转改变了"1"的个数,破坏了恒比关系)。
{{< docpage "pdf/通信原理/第九章.pdf" page=6 title="线性分组码" mode="ref" >}}
9.4.1 为什么需要线性分组码
奇偶监督码只有 1 位监督位,只能判断"有没有错",不能定位错在哪。如果我们有 $r$ 位监督位,校正子 $S$ 就有 $2^r$ 种组合,其中 1 种表示无错,其余 $2^r - 1$ 种可以标识不同错误位置。要纠正一位错码(码长 $n$,信息位 $k$),需要满足:
9.4.2 监督矩阵 $\mathbf{H}$
线性分组码的核心思想:用线性方程组来定义监督关系。
以 $(7, 4)$ 码为例,设 3 位监督位 $a_2, a_1, a_0$,4 位信息位 $a_6, a_5, a_4, a_3$,规定如下监督关系(偶数监督):
把系数提出来,写成矩阵形式 $\mathbf{H} \cdot \mathbf{A}^T = \mathbf{0}^T$:
其中 $\mathbf{P}$ 是 $r \times k$ 矩阵,$\mathbf{I}_r$ 是 $r$ 阶单位阵。具有 $[\mathbf{P} \mid \mathbf{I}_r]$ 形式的 $\mathbf{H}$ 称为典型监督矩阵。
9.4.3 生成矩阵 $\mathbf{G}$
从监督方程出发,可以解出监督位与信息位的线性关系:
其中 $\mathbf{Q} = \mathbf{P}^T$($\mathbf{P}$ 的转置)。由此得到生成矩阵:
编码操作非常简单:
理解生成矩阵 $\mathbf{G}$
$\mathbf{G}$ 的每一行本身就是一个合法码字。$k$ 个线性无关的行向量张成整个码字空间——任意信息组合与 $\mathbf{G}$ 相乘,就得到对应的码字。这就是"生成"的含义。
系统码:$\mathbf{G}$ 具有 $[\mathbf{I}_k \mid \mathbf{Q}]$ 形式时,码字前 $k$ 位就是原始信息,后 $r$ 位是计算出的监督位。信息位保持不变地出现在码字中,方便提取。
9.4.4 校正子(伴随式)译码 ⭐
译码过程是编码的"逆操作",分三步:
设发送码字 $\mathbf{A}$,接收码字 $\mathbf{B}$,错误图样 $\mathbf{E} = \mathbf{B} - \mathbf{A} = \mathbf{B} \oplus \mathbf{A}$(模2加法)。计算校正子:
因为 $\mathbf{A}$ 是合法码字,$\mathbf{A}\mathbf{H}^T = \mathbf{0}$。所以校正子只与错误图样有关,与发送什么码字无关!
在校正子表中查找 $\mathbf{S} = (S_1, S_2, S_3)$ 对应的错码位置。以 $(7,4)$ 码为例:
| $S_1 S_2 S_3$ | 错码位置 | $S_1 S_2 S_3$ | 错码位置 |
|---|---|---|---|
| 001 | $a_0$ | 101 | $a_4$ |
| 010 | $a_1$ | 110 | $a_5$ |
| 100 | $a_2$ | 111 | $a_6$ |
| 011 | $a_3$ | 000 | 无错 |
例题:校正子译码
收到码组 $0000011$,计算:
- $S_1 = 0 \oplus 0 \oplus 0 \oplus 0 = 0$
- $S_2 = 0 \oplus 0 \oplus 0 \oplus 1 = 1$
- $S_3 = 0 \oplus 0 \oplus 0 \oplus 1 = 1$
校正子为 $011$,查表知 $a_3$ 位出错。纠正后码字为 $0001011$。
9.4.5 线性码的性质
- 封闭性:任意两个合法码字之和(模2)仍为合法码字。
- 推论:任意两个码字的码距等于第三个码字的码重,因此最小码距 = 非零码的最小重量。
- 线性码又称群码(在模2加法下构成 Abel 群)。
{{< docpage "pdf/通信原理/第九章.pdf" page=12 title="汉明码" mode="ref" >}}
9.5.1 汉明码是什么
汉明码是一种能纠正单个错误的线性分组码,且在满足这个条件的前提下编码效率最高——被称为"高效码"。
9.5.2 参数特征
给定监督位数 $r$:
所以汉明码能纠正 1 位错码或检测 2 位错码。
常见汉明码:$r=3$ 时为 $(7,4)$ 码,$r=4$ 时为 $(15,11)$ 码。
9.5.3 $(7,4)$ 汉明码完整编解码示例
编码过程
信息位 $a_6 a_5 a_4 a_3 = 1001$,代入监督方程:
编码输出:$1001100$。
译码过程
假设接收 $1101100$($a_5$ 位出错),计算校正子:
校正子 $110$,查表知 $a_5$ 出错,取反纠正后恢复 $1001100$。✅
{{< docpage "pdf/通信原理/第九章.pdf" page=16 title="循环码" mode="ref" >}}
9.6.1 循环码的特点
循环码是线性分组码的子类,除了具有封闭性外,还有一个独特的循环性:任意许用码组循环移位(左移或右移)后,仍然是许用码组。
类比理解
循环码像一组旋转对称的图案——不管转多少度,看到的仍是集合中的某个图案。
这个特性使得循环码可以用多项式来表示和处理,极大地简化了编码和译码的硬件实现(移位寄存器即可完成)。
9.6.2 码多项式与模运算
将码组 $a_{n-1} a_{n-2} \cdots a_1 a_0$ 表示为多项式:
系数取 0 或 1,加法为模 2 运算(即异或)。例如码组 $1100101$ 对应 $T(x) = x^6 + x^5 + x^2 + 1$。
循环移位对应多项式的乘 $x$ 运算(模 $x^n + 1$)。一个长为 $n$ 的循环码的所有码多项式都是模 $x^n + 1$ 运算下的余式。
9.6.3 生成多项式 $g(x)$ ⭐
循环码中存在一个唯一的生成多项式 $g(x)$,满足:
- $g(x)$ 是 $x^n + 1$ 的一个 $(n-k)$ 次因式
- $g(x)$ 的常数项不为零
- 所有码多项式 $T(x)$ 都能被 $g(x)$ 整除
例题:求生成多项式
构造 $(7,4)$ 循环码($n=7$,$k=4$,$r=3$)。
需选取一个 3 次因式,有两个选择:
- $g(x) = x^3 + x + 1$
- $g(x) = x^3 + x^2 + 1$
选不同的因式就得到不同的 $(7,4)$ 循环码。
9.6.4 编码方法(三步法)
给定信息多项式 $m(x)$(次数 $\leq k-1$),编码步骤:
- 左移:$m(x) \cdot x^{n-k}$(为监督位腾出空间)
- 求余:$\frac{m(x) \cdot x^{n-k}}{g(x)} = Q(x) \cdots\cdots r(x)$,得余式 $r(x)$
- 拼接:$T(x) = m(x) \cdot x^{n-k} + r(x)$
计算示例
信息位 $m = 1100$(即 $m(x) = x^3 + x^2$),$g(x) = x^3 + x + 1$。
- $m(x) \cdot x^3 = x^6 + x^5$
- $(x^6 + x^5) \div (x^3 + x + 1)$:余数 $r(x) = x$(即 $010$)
- $T(x) = x^6 + x^5 + x$,对应码字 $1100010$
9.6.5 译码方法
译码比编码复杂,分三步:
- 计算校正子:用 $g(x)$ 除接收多项式 $B(x)$,得余式 $S(x)$。若 $S(x) = 0$,无误码。
- 确定错误图样:根据校正子查表确定错误位置。
- 纠正:将错误位取反。
校正子的计算基础:设 $B(x) = T(x) + E(x)$,则 $S(x) = B(x) \mod g(x) = E(x) \mod g(x)$。校正子只与错误图样 $E(x)$ 有关。
9.6.6 缩短循环码
将 $(n, k)$ 循环码去掉前 $i$ 个信息位(全零),得到 $(n-i, k-i)$ 码。例如 $(15,11)$ 缩短为 $(12,8)$。
缩短后监督位数不变,因此最小码距至少不变,纠错能力不降低。但码不再是严格的循环码。
| 概念 | 公式 / 要点 |
|---|---|
| 分组码 $(n,k)$ | $n$ = 总码长,$k$ = 信息位,$r = n-k$ = 监督位 |
| 编码效率 | $R = k/n$ |
| 码重 | 码组中"1"的个数 |
| 码距 | 两码组对应位不同的位数 |
| 检错 $e$ 位 | $d_{\min} \geq e + 1$ |
| 纠错 $t$ 位 | $d_{\min} \geq 2t + 1$ |
| 纠 $t$ 检 $e$ | $d_{\min} \geq e + t + 1$($e > t$) |
| 奇偶监督码 | $d_{\min}=2$,检奇数个错 |
| 汉明不等式 | $2^r \geq n + 1$ |
| 监督矩阵 | $\mathbf{H} = [\mathbf{P} \mid \mathbf{I}_r]$,满足 $\mathbf{H}\mathbf{A}^T = \mathbf{0}$ |
| 生成矩阵 | $\mathbf{G} = [\mathbf{I}_k \mid \mathbf{Q}]$,$\mathbf{Q} = \mathbf{P}^T$ |
| 校正子 | $\mathbf{S} = \mathbf{B} \cdot \mathbf{H}^T = \mathbf{E} \cdot \mathbf{H}^T$(只与错误图样有关) |
| 汉明码 | $n = 2^r - 1$,$k = n - r$,$d_{\min} = 3$,纠1位错 |
| 循环码生成多项式 | $g(x)$ 是 $x^n + 1$ 的 $(n-k)$ 次因式 |
| 循环码编码 | $T(x) = m(x) \cdot x^{n-k} + [m(x) \cdot x^{n-k} \mod g(x)]$ |
| 循环码译码 | $S(x) = B(x) \mod g(x)$,查表纠错 |
参考来源
- 《通信原理(第2版)》王琪等 — 本章核心教材
- 中南大学尹林子·现代通信原理课程
- 腾讯云 — 基本线性分组码与性能参数及差错控制
- 稀土掘金 — 数据通信技术复习笔记:差错控制-奇偶监督/汉明码/循环码
- CSDN — 信息论部分线性分组码各种计算的解法
- USTC — 第7章信道编码(课件 PDF)