ESC
输入关键词搜索文章
目录

差错控制编码

通信原理 · 第九章
最小码距、线性分组码与循环码
导论
学习目标
  1. 理解码距、最小码距与检纠错能力的关系
  2. 掌握奇偶监督码、二维奇偶监督码、恒比码等简单编码
  3. 重点掌握线性分组码的监督矩阵 $\mathbf{H}$、生成矩阵 $\mathbf{G}$、校正子译码全流程
  4. 理解汉明码的构造原理,能完成 $(7,4)$ 汉明码的编解码
  5. 掌握循环码的生成多项式与多项式除法编码方法

{{< docpage "pdf/通信原理/第九章.pdf" page=1 title="第九章 差错控制编码 课件首页" mode="ref" >}}

§9.1
引言:为什么需要差错控制编码

在数字通信中,无论信道质量多好,加性噪声始终不可避免。当误码无法仅靠均衡消除时,就需要引入差错控制编码——在信息码元中人为插入监督(校验)码元,以降低有效信息速率为代价,换取传输可靠性的提升。

信道类型

按错码分布规律分为三类:

类型特征典型原因
随机信道错码独立、随机出现白噪声
突发信道错码成串集中出现脉冲干扰
混合信道两者兼有实际信道

差错控制方法

  • ARQ(检错重发):接收端只检错,发现错误后请求重发。需要反向信道,适合非实时数据传输。
  • FEC(前向纠错):接收端自行纠错,不需要反向信道,适合实时通信。
  • HEC(混合纠错):先尝试纠错,纠不了再请求重发。
  • 反馈校验法差错删除法等。
核心思想:用"冗余"换"可靠"。定义多余度为增加的码元数除以总码元数,即 $(n-k)/n$
§9.2
纠错编码的基本原理

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$ 维空间中的点,码距就是点之间的距离。点离得越远,越容易区分——即使其中某个点发生了"偏移"(错误),只要偏移不大,仍能被正确识别。

类比理解

把码字想象成地图上的城市。如果城市之间距离很远,那么即使你走错了一段路(误码),仍然能判断出你原本想去的城市。最小码距就是最近两座城市之间的距离。

三条结论:

$$\boxed{d_{\min} \geq e + 1 \quad \text{(检测 } e \text{ 个错码)}}$$
$$\boxed{d_{\min} \geq 2t + 1 \quad \text{(纠正 } t \text{ 个错码)}}$$
$$\boxed{d_{\min} \geq e + t + 1 \quad \text{(同时纠 } t \text{、检 } e \text{ 个错码,} e > t)}$$
为什么?
  • 检测 $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个)才检测不出来:

$$P_e = C_4^2 p^2(1-p)^2 + C_4^4 p^4 \approx 6 \times 10^{-6}$$

误码率降低了约三个数量级!

{{< docpage "pdf/通信原理/第九章.pdf" page=3 title="最小码距与检纠错能力" mode="ref" >}}

§9.3
常用的简单编码

9.3.1 奇偶监督码

是什么:在 $n-1$ 位信息后加 1 位监督位,使码组中"1"的总数为偶数(偶校验)或奇数(奇校验)。

偶校验方程:$a_{n-1} \oplus a_{n-2} \oplus \cdots \oplus a_1 \oplus a_0 = 0$

接收端重新计算上述异或和,结果为 0 表示无误。

局限性:只能检测奇数个错误。若同时翻转 2 位、4 位……奇偶性不变,无法发现。因此 $d_{\min} = 2$,适用于检测随机错误。

9.3.2 二维奇偶监督码(水平垂直奇偶监督码)

将信息排成矩阵,每行加一个水平校验位、每列加一个垂直校验位。这样形成一个"交叉校验网"。

  • 能检测大多数偶数个错误(因为行列两个方向同时校验)。
  • 但仍无法检测构成矩形的 4 个错码。
  • 适用于检测突发错码

9.3.3 恒比码

从固定码长的码组中,选取"1"和"0"个数之比为恒定值的码组作为许用码组。例如我国电传通信中的"5 中取 3 码":5 位码组中必须有 3 个"1",共 $C_5^3 = 10$ 种,恰好表示 0–9 十个数字。

能发现所有 1 位错误和所有奇数个错误(因为 1 位翻转改变了"1"的个数,破坏了恒比关系)。

§9.4
线性分组码(本章核心 ⭐⭐)

{{< docpage "pdf/通信原理/第九章.pdf" page=6 title="线性分组码" mode="ref" >}}

9.4.1 为什么需要线性分组码

奇偶监督码只有 1 位监督位,只能判断"有没有错",不能定位错在哪。如果我们有 $r$ 位监督位,校正子 $S$ 就有 $2^r$ 种组合,其中 1 种表示无错,其余 $2^r - 1$ 种可以标识不同错误位置。要纠正一位错码(码长 $n$,信息位 $k$),需要满足:

$$\boxed{2^r \geq n + 1 \quad \Longleftrightarrow \quad 2^r \geq n = k + r}$$
汉明不等式:它告诉我们 $r$ 位监督位最多能给多少位码元做纠错。

9.4.2 监督矩阵 $\mathbf{H}$

线性分组码的核心思想:用线性方程组来定义监督关系

$(7, 4)$ 码为例,设 3 位监督位 $a_2, a_1, a_0$,4 位信息位 $a_6, a_5, a_4, a_3$,规定如下监督关系(偶数监督):

$$\begin{cases} S_1 = a_6 \oplus a_5 \oplus a_4 \oplus a_2 = 0 \\ S_2 = a_6 \oplus a_5 \oplus a_3 \oplus a_1 = 0 \\ S_3 = a_6 \oplus a_4 \oplus a_3 \oplus a_0 = 0 \end{cases}$$

把系数提出来,写成矩阵形式 $\mathbf{H} \cdot \mathbf{A}^T = \mathbf{0}^T$

$$\mathbf{H} = \begin{bmatrix} 1 & 1 & 1 & 0 & 1 & 0 & 0 \\ 1 & 1 & 0 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 1 & 0 & 0 & 1 \end{bmatrix} = [\mathbf{P} \quad | \quad \mathbf{I}_r]$$

其中 $\mathbf{P}$$r \times k$ 矩阵,$\mathbf{I}_r$$r$ 阶单位阵。具有 $[\mathbf{P} \mid \mathbf{I}_r]$ 形式的 $\mathbf{H}$ 称为典型监督矩阵

解读$\mathbf{H}$ 的每一行就是一个监督方程的系数。只要码字 $\mathbf{A}$ 满足 $\mathbf{H}\mathbf{A}^T = \mathbf{0}$,它就是合法码字。

9.4.3 生成矩阵 $\mathbf{G}$

从监督方程出发,可以解出监督位与信息位的线性关系:

$$[a_2, a_1, a_0] = [a_6, a_5, a_4, a_3] \cdot \mathbf{Q}$$

其中 $\mathbf{Q} = \mathbf{P}^T$$\mathbf{P}$ 的转置)。由此得到生成矩阵

$$\mathbf{G} = [\mathbf{I}_k \quad | \quad \mathbf{Q}] = \begin{bmatrix} 1 & 0 & 0 & 0 & 1 & 1 & 1 \\ 0 & 1 & 0 & 0 & 1 & 1 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 & 1 \\ 0 & 0 & 0 & 1 & 0 & 1 & 1 \end{bmatrix}$$

编码操作非常简单:

$$\mathbf{A} = [a_6, a_5, a_4, a_3] \cdot \mathbf{G}$$

理解生成矩阵 $\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{S} = \mathbf{B} \cdot \mathbf{H}^T = (\mathbf{A} \oplus \mathbf{E}) \cdot \mathbf{H}^T = \mathbf{A} \cdot \mathbf{H}^T + \mathbf{E} \cdot \mathbf{H}^T = \mathbf{E} \cdot \mathbf{H}^T$$

因为 $\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 线性码的性质

  1. 封闭性:任意两个合法码字之和(模2)仍为合法码字。
  2. 推论:任意两个码字的码距等于第三个码字的码重,因此最小码距 = 非零码的最小重量
  3. 线性码又称群码(在模2加法下构成 Abel 群)。
§9.5
汉明码

{{< docpage "pdf/通信原理/第九章.pdf" page=12 title="汉明码" mode="ref" >}}

9.5.1 汉明码是什么

汉明码是一种能纠正单个错误的线性分组码,且在满足这个条件的前提下编码效率最高——被称为"高效码"。

9.5.2 参数特征

给定监督位数 $r$

$$\text{码长}:n = 2^r - 1, \qquad \text{信息位}:k = 2^r - 1 - r, \qquad d_{\min} = 3$$

所以汉明码能纠正 1 位错码或检测 2 位错码

常见汉明码:$r=3$ 时为 $(7,4)$ 码,$r=4$ 时为 $(15,11)$ 码。

9.5.3 $(7,4)$ 汉明码完整编解码示例

编码过程

信息位 $a_6 a_5 a_4 a_3 = 1001$,代入监督方程:

$$a_2 = a_6 \oplus a_5 \oplus a_4 = 1 \oplus 0 \oplus 0 = 1$$
$$a_1 = a_6 \oplus a_5 \oplus a_3 = 1 \oplus 0 \oplus 1 = 0$$
$$a_0 = a_6 \oplus a_4 \oplus a_3 = 1 \oplus 0 \oplus 1 = 0$$

编码输出:$1001100$

译码过程

假设接收 $1101100$$a_5$ 位出错),计算校正子:

$$S_1 = 1 \oplus 1 \oplus 0 \oplus 1 = 1, \quad S_2 = 1 \oplus 1 \oplus 1 \oplus 0 = 1, \quad S_3 = 1 \oplus 0 \oplus 1 \oplus 0 = 0$$

校正子 $110$,查表知 $a_5$ 出错,取反纠正后恢复 $1001100$。✅

§9.6
循环码

{{< 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$ 表示为多项式:

$$T(x) = a_{n-1}x^{n-1} + a_{n-2}x^{n-2} + \cdots + a_1 x + 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)$,满足:

  1. $g(x)$$x^n + 1$ 的一个 $(n-k)$ 次因式
  2. $g(x)$ 的常数项不为零
  3. 所有码多项式 $T(x)$ 都能被 $g(x)$ 整除
如何找 $g(x)$:对 $x^n + 1$ 做因式分解,选取其中一个 $(n-k)$ 次因式。

例题:求生成多项式

构造 $(7,4)$ 循环码($n=7$$k=4$$r=3$)。

$$x^7 + 1 = (x+1)(x^3+x+1)(x^3+x^2+1)$$

需选取一个 3 次因式,有两个选择:

  • $g(x) = x^3 + x + 1$
  • $g(x) = x^3 + x^2 + 1$

选不同的因式就得到不同的 $(7,4)$ 循环码。

9.6.4 编码方法(三步法)

给定信息多项式 $m(x)$(次数 $\leq k-1$),编码步骤:

  1. 左移$m(x) \cdot x^{n-k}$(为监督位腾出空间)
  2. 求余$\frac{m(x) \cdot x^{n-k}}{g(x)} = Q(x) \cdots\cdots r(x)$,得余式 $r(x)$
  3. 拼接$T(x) = m(x) \cdot x^{n-k} + r(x)$
为什么这样能保证是合法码字? 因为 $T(x) = m(x) \cdot x^{n-k} + r(x) = Q(x) \cdot g(x) + r(x) + r(x) = Q(x) \cdot g(x)$(模2下 $r(x) + r(x) = 0$),即 $T(x)$$g(x)$ 的倍式,必为合法码字。

计算示例

信息位 $m = 1100$(即 $m(x) = x^3 + x^2$),$g(x) = x^3 + x + 1$

  1. $m(x) \cdot x^3 = x^6 + x^5$
  2. $(x^6 + x^5) \div (x^3 + x + 1)$:余数 $r(x) = x$(即 $010$
  3. $T(x) = x^6 + x^5 + x$,对应码字 $1100010$

9.6.5 译码方法

译码比编码复杂,分三步:

  1. 计算校正子:用 $g(x)$ 除接收多项式 $B(x)$,得余式 $S(x)$。若 $S(x) = 0$,无误码。
  2. 确定错误图样:根据校正子查表确定错误位置。
  3. 纠正:将错误位取反。

校正子的计算基础:设 $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)$,查表纠错
本章知识主线:码距 → 检纠错能力界限 → 简单编码(奇偶校验)→ 线性分组码(矩阵描述)→ 汉明码(高效纠1位错)→ 循环码(多项式描述,硬件友好)。每一步都是前一步的推广和系统化。