跳转至

第 12 章 信道解码

本章预计学习时间: 6 小时
前置知识: 第 1 章(概率论)、第 5 章(检测理论)、第 11 章(解调与软信息)
前置技能: 了解信道编码基础(如卷积码、LDPC、Turbo 码)


📌 本章目标

学完本章后,你将能够:

  1. 理解 信道解码的基本原理
  2. 推导 最大后验概率(MAP)解码
  3. 掌握 BCJR 算法的完整推导
  4. 理解 置信传播算法(LDPC 解码)
  5. 应用 软输入解码器分析系统性能

12.1 信道解码问题描述

🎯 基础概念(零基础友好)

为什么要信道解码?

问题: 传输过程中会有错误

1
2
3
4
5
发送:10110011
    信道(噪声、干扰)
接收:10100011(第 4 位错误)

解决方案: 添加冗余(信道编码)

1
2
3
4
5
发送:1011 → 编码 → 1011001(添加 3 位冗余)
    信道
接收:1010001 → 解码 → 1011(纠正错误)

解码器输入

硬输入: 比特值(0 或 1)

接收:[1, 0, 1, 0, 0, 0, 1]

软输入: LLR 值(可靠性信息)

接收:[+8.5, -6.2, +7.1, -2.3, -5.8, -4.9, +9.0]

优势: 软输入解码性能优于硬输入约 2-3 dB!


📐 问题形式化

系统模型

发送端:

信息比特 \(\mathbf{u} = [u_0, u_1, ..., u_{K-1}]\)

编码器:\(\mathbf{c} = \text{Encode}(\mathbf{u})\)(码长 \(N > K\)

调制:\(\mathbf{x} = \text{Modulate}(\mathbf{c})\)


信道:

\[\mathbf{y} = \mathbf{H}\mathbf{x} + \mathbf{n}\]

接收端:

解调:\(\text{LLR}(\mathbf{c}) = \text{Demodulate}(\mathbf{y})\)

解码:\(\hat{\mathbf{u}} = \text{Decode}(\text{LLR}(\mathbf{c}))\)


解码准则

最大后验概率(MAP):

\[\hat{\mathbf{u}} = \arg\max_{\mathbf{u}} P(\mathbf{u}|\mathbf{y})\]

最大似然(ML):

\[\hat{\mathbf{u}} = \arg\max_{\mathbf{u}} P(\mathbf{y}|\mathbf{u})\]

关系:\(P(\mathbf{u})\) 均匀分布,MAP = ML


✏️ 练习题 12.1

基础题 12-1:

为什么软输入解码优于硬输入?

答案:

1
2
3
4
5
6
7
软输入包含可靠性信息(LLR)
解码器可以利用可靠性:
- 高可靠性的比特:更多信任
- 低可靠性的比特:更多依赖校验

硬输入丢失了可靠性信息
性能损失约 2-3 dB


12.2 最大后验概率解码 ⭐⭐⭐

🎯 基础概念

MAP 准则

目标: 最小化比特错误概率

\[\hat{u}_k = \arg\max_{u_k \in \{0,1\}} P(u_k|\mathbf{y})\]

用 LLR 表示:

\[LLR(u_k) = \log \frac{P(u_k=0|\mathbf{y})}{P(u_k=1|\mathbf{y})}\]

判决: - \(LLR(u_k) > 0\)\(\hat{u}_k = 0\) - \(LLR(u_k) < 0\)\(\hat{u}_k = 1\)


📐 卷积码的 MAP 解码

卷积码基础

编码器:

1
2
3
输入:u = [u₀, u₁, u₂, ...]
移位寄存器:s = [s₀, s₁, ..., s_{K-1}]
输出:c = [c₀, c₁, ...](编码比特)

状态转移:

时刻 \(k\) 的状态 \(S_k\) 由移位寄存器内容决定。

输入 \(u_k\),状态从 \(S_k\) 转移到 \(S_{k+1}\),输出 \(c_k\)


网格图(Trellis):

1
2
3
4
5
6
7
8
9
时刻:  0    1    2    3    4
状态:
  00:  •───•───•───•───•
       │ \ │ \ │ \ │ \ │
  01:  •─\─•─\─•─\─•─\─•
       │ \ │ \ │ \ │ \ │
  10:  •─\─•─\─•─\─•─\─•
       │ \ │ \ │ \ │ \ │
  11:  •───•───•───•───•

📐 MAP 解码推导

后验概率

目标: 计算 \(P(u_k=0|\mathbf{y})\)\(P(u_k=1|\mathbf{y})\)


全概率公式:

\[P(u_k|\mathbf{y}) = \sum_{S_k, S_{k+1}} P(u_k, S_k, S_{k+1}|\mathbf{y})\]

其中求和遍历所有满足 \(u_k\) 的状态转移。


用贝叶斯公式:

\[P(u_k, S_k, S_{k+1}|\mathbf{y}) = \frac{P(\mathbf{y}|u_k, S_k, S_{k+1}) P(u_k, S_k, S_{k+1})}{P(\mathbf{y})}\]

分解:

\[P(\mathbf{y}|u_k, S_k, S_{k+1}) = P(\mathbf{y}_{k+1:N}|S_{k+1}) P(y_k|S_k, S_{k+1}) P(\mathbf{y}_{1:k}|S_k)\]

定义:

  • 前向概率:\(\alpha_k(S_k) = P(\mathbf{y}_{1:k}, S_k)\)
  • 后向概率:\(\beta_k(S_k) = P(\mathbf{y}_{k+1:N}|S_k)\)
  • 转移概率:\(\gamma_k(S_k, S_{k+1}) = P(y_k, S_{k+1}|S_k)\)

后验概率:

\[P(u_k|\mathbf{y}) \propto \sum_{(S_k, S_{k+1}): u_k} \alpha_k(S_k) \gamma_k(S_k, S_{k+1}) \beta_{k+1}(S_{k+1})\]

📊 BCJR 算法

算法名称

BCJR: Bahl, Cocke, Jelinek, Raviv(1974 年提出)

别名: MAP 算法、前向 - 后向算法


算法步骤

步骤 1:初始化

\[\alpha_0(S_0) = \begin{cases} 1 & S_0 = 0 \\ 0 & \text{其他} \end{cases}\]
\[\beta_N(S_N) = \begin{cases} 1 & S_N = 0 \\ 0 & \text{其他} \end{cases}\]

(假设终止状态为 0)


步骤 2:前向递归

\[\alpha_{k+1}(S_{k+1}) = \sum_{S_k} \alpha_k(S_k) \gamma_k(S_k, S_{k+1})\]

步骤 3:后向递归

\[\beta_k(S_k) = \sum_{S_{k+1}} \gamma_k(S_k, S_{k+1}) \beta_{k+1}(S_{k+1})\]

步骤 4:计算 LLR

\[LLR(u_k) = \log \frac{\sum_{(S_k, S_{k+1}): u_k=0} \alpha_k(S_k) \gamma_k(S_k, S_{k+1}) \beta_{k+1}(S_{k+1})}{\sum_{(S_k, S_{k+1}): u_k=1} \alpha_k(S_k) \gamma_k(S_k, S_{k+1}) \beta_{k+1}(S_{k+1})}\]

📐 转移概率计算

高斯信道模型

接收: \(y_k = x_k + n_k\)\(n_k \sim \mathcal{CN}(0, \sigma^2)\)


转移概率:

\[\gamma_k(S_k, S_{k+1}) = P(u_k) P(y_k|c_k)\]

其中 \(c_k\) 是由 \((S_k, S_{k+1})\) 决定的输出比特。


高斯 PDF:

\[P(y_k|c_k) = \frac{1}{\pi\sigma^2} \exp\left(-\frac{|y_k - h x_k|^2}{\sigma^2}\right)\]

用 LLR 表示:

\[P(y_k|c_k=0) \propto \exp\left(-\frac{|y_k - h|^2}{\sigma^2}\right)\]
\[P(y_k|c_k=1) \propto \exp\left(-\frac{|y_k + h|^2}{\sigma^2}\right)\]

📝 数值例子

例子 12-1:BCJR 算法(简化)

参数: - 码率 ½ 卷积码,约束长度 K=3 - 状态数:4(00, 01, 10, 11) - 输入序列:u = [1, 0, 1] - 接收 LLR:[+2.5, -1.8, +3.2, -0.5, +4.1, -2.3]


步骤 1:初始化

\[\alpha_0 = [1, 0, 0, 0]$$ $$\beta_3 = [1, 0, 0, 0]\]

步骤 2:前向递归(简化计算)

\[\alpha_1(S_1) = \sum_{S_0} \alpha_0(S_0) \gamma_0(S_0, S_1)\]

(具体计算略,需要状态转移表)


步骤 3:后向递归

\[\beta_2(S_2) = \sum_{S_3} \gamma_2(S_2, S_3) \beta_3(S_3)\]

步骤 4:计算 LLR

\[LLR(u_0) = \log \frac{\sum_{u_0=0} \alpha_0 \gamma_0 \beta_1}{\sum_{u_0=1} \alpha_0 \gamma_0 \beta_1}\]

输出: \(\hat{\mathbf{u}} = [1, 0, 1]\)(正确解码)


⚠️ 常见误区

误区 1: "BCJR 算法太复杂,无法实现"

纠正: 实际中用 Log-MAP 近似,复杂度可接受。


误区 2: "BCJR 只适用于卷积码"

纠正: BCJR 是通用框架,可用于 Turbo 码等。


误区 3: "BCJR 总是最优的"

纠正: BCJR 是最优的 MAP 解码,但复杂度高。实际中常用次优算法(如 Viterbi)。


✏️ 练习题 12.2

基础题 12-2:

BCJR 算法中,前向概率 \(\alpha_k\) 和后向概率 \(\beta_k\) 的含义是什么?

答案:

1
2
3
4
5
α_k(S_k) = P(y₁:ₖ, S_k)
  含义:到时刻 k 为止,接收序列为 y₁:ₖ且状态为 S_k 的联合概率

β_k(S_k) = P(yₖ₊₁:N|S_k)
  含义:从时刻 k+1 到 N,给定状态 S_k 的条件概率


进阶题 12-3:

推导 Log-MAP 近似公式。

提示:

log(e^a + e^b) ≈ max(a, b) + log(1 + e^(-|a-b|))
≈ max(a, b)(Max-Log 近似)


12.3 置信传播算法(LDPC) ⭐⭐⭐⭐

🎯 基础概念

LDPC 码基础

定义: 低密度奇偶校验码(Low-Density Parity-Check)

特点: - 稀疏校验矩阵 - 可用置信传播高效解码 - 性能接近香农限


校验矩阵:

\[\mathbf{H} = \begin{bmatrix} 1 & 1 & 0 & 1 & 0 & 0 \\ 0 & 1 & 1 & 0 & 1 & 0 \\ 1 & 0 & 1 & 0 & 0 & 1 \end{bmatrix}\]

码字条件:

\[\mathbf{H} \mathbf{c}^T = \mathbf{0}\]

Tanner 图

定义: LDPC 码的图表示

节点: - 变量节点(Variable Nodes):对应编码比特 \(c_i\) - 校验节点(Check Nodes):对应校验方程 \(h_j\)


边:\(H_{ji} = 1\),则变量节点 \(i\) 与校验节点 \(j\) 相连。


例子:

1
2
3
4
5
校验节点:    变量节点:
   c₁ ────•──── c₂
         / \
        /   \
   c₃ ─•─────•──── c₄

📐 置信传播算法

算法思想

核心: 在 Tanner 图上传递概率消息

消息类型: - 变量节点 → 校验节点:\(Q_{ij}\)(比特 \(i\) 满足校验 \(j\) 的概率) - 校验节点 → 变量节点:\(R_{ji}\)(基于校验 \(j\),比特 \(i\) 的概率)


算法步骤

步骤 1:初始化

变量节点 \(i\) 的初始 LLR(来自解调器):

\[L(c_i) = \log \frac{P(c_i=0|y_i)}{P(c_i=1|y_i)}\]

步骤 2:校验节点更新

校验节点 \(j\) 到变量节点 \(i\) 的消息:

\[R_{ji} = 2 \tanh^{-1}\left( \prod_{k \in M(j) \setminus i} \tanh\left(\frac{Q_{kj}}{2}\right) \right)\]

其中 \(M(j)\) 是与校验节点 \(j\) 相连的变量节点集合。


Min-Sum 近似:

\[R_{ji} \approx \left(\prod_{k \in M(j) \setminus i} \text{sign}(Q_{kj})\right) \cdot \min_{k \in M(j) \setminus i} |Q_{kj}|\]

步骤 3:变量节点更新

变量节点 \(i\) 到校验节点 \(j\) 的消息:

\[Q_{ij} = L(c_i) + \sum_{k \in N(i) \setminus j} R_{ki}\]

其中 \(N(i)\) 是与变量节点 \(i\) 相连的校验节点集合。


步骤 4:后验 LLR 计算

变量节点 \(i\) 的后验 LLR:

\[L_{post}(c_i) = L(c_i) + \sum_{j \in M(i)} R_{ji}\]

步骤 5:判决

\[\hat{c}_i = \begin{cases} 0 & L_{post}(c_i) > 0 \\ 1 & L_{post}(c_i) < 0 \end{cases}\]

步骤 6:校验子检查

\[\mathbf{s} = \mathbf{H} \hat{\mathbf{c}}^T\]

\(\mathbf{s} = \mathbf{0}\),解码成功;否则返回步骤 2,继续迭代。


📊 算法收敛性

收敛条件

理想情况: 无环图(树),BP 算法精确收敛到 MAP

实际情况: 有环图,BP 是近似算法


典型迭代次数:

码型 典型迭代次数
LDPC 10-50
Turbo 6-8
Polar (SCL) 1(但列表大小 L=8-32)

停止准则

准则 1:校验子为零

\[\mathbf{H} \hat{\mathbf{c}}^T = \mathbf{0}\]

准则 2:达到最大迭代次数

防止无限循环。


📝 数值例子

例子 12-2:Min-Sum 解码(简化)

参数: - (3, 6)-LDPC 码 - 接收 LLR:[+2.5, -1.8, +3.2, -0.5, +4.1]


迭代 1:

校验节点更新(Min-Sum):

\[R_{j1} = \text{sign}(Q_{2j}) \cdot \text{sign}(Q_{3j}) \cdot \min(|Q_{2j}|, |Q_{3j}|)\]

(具体计算需要 Tanner 图结构)


变量节点更新:

\[Q_{i1} = L(c_i) + R_{j1}\]

后验 LLR:

\[L_{post}(c_i) = L(c_i) + \sum_j R_{ji}\]

判决: \(\hat{\mathbf{c}} = [0, 1, 0, 1, 0]\)


校验子检查:\(\mathbf{H}\hat{\mathbf{c}}^T \neq \mathbf{0}\),继续迭代。


⚠️ 常见误区

误区 1: "置信传播总是收敛"

纠正: 有环图可能不收敛,需要最大迭代次数限制。


误区 2: "Min-Sum 近似性能损失很大"

纠正: Min-Sum 性能损失约 0.5-1 dB,复杂度大幅降低。


误区 3: "LDPC 解码复杂度太高"

纠正: Min-Sum 近似后,主要是加减法和比较,硬件友好。


✏️ 练习题 12.3

基础题 12-4:

Min-Sum 近似中,若输入消息为 [+3, -2, +4],输出是多少?

答案:

1
2
3
4
sign = sign(+3) × sign(-2) × sign(+4) = (+) × (-) × (+) = -
min = min(|+3|, |-2|, |+4|) = 2

R = -2


进阶题 12-5:

推导校验节点更新的精确公式(不用 Min-Sum 近似)。

提示:

用概率域的乘积规则
转换到 LLR 域


12.4 收敛性分析 ⭐⭐

🎯 基础概念

密度演化

定义: 跟踪 LLR 分布的演化

思想: 假设 LLR 服从高斯分布,跟踪均值和方差的变化。


高斯近似:

\[L \sim \mathcal{N}(\mu, \sigma^2)\]

对于 AWGN 信道:\(\sigma^2 = 2\mu\)


密度演化方程:

\[\mu_{l+1} = f(\mu_l)\]

其中 \(l\) 是迭代次数。


收敛条件

稳定固定点:

\[\mu^* = f(\mu^*)\]

\(\mu^* \to \infty\),解码收敛(错误概率 → 0)


收敛阈值:

存在 SNR 阈值 \(\text{SNR}_{th}\): - \(\text{SNR} > \text{SNR}_{th}\):收敛 - \(\text{SNR} < \text{SNR}_{th}\):不收敛


📊 性能分析

误码率曲线

典型 LDPC 误码率曲线:

BER
10⁻¹ │\
     │ \
10⁻² │  \
     │   \
10⁻³ │    \
     │     \
10⁻⁴ │      \_______(错误平台)
10⁻⁵ │
10⁻⁶ │
     └────────────────→ SNR (dB)
       阈值

错误平台(Error Floor):

高 SNR 时误码率不再下降。

原因: - 小环结构 - 最小码距限制


✏️ 练习题 12.4

基础题 12-6:

为什么 LDPC 码有错误平台?

答案:

1
2
3
4
5
6
7
8
9
错误平台的原因:
1. Tanner 图中的小环(尤其是 4-环)
2. 最小码距有限
3. 置信传播是近似算法

解决方法:
1. 优化码结构(减少小环)
2. 使用更大的码长
3. 改进解码算法


📌 本章小结

关键公式速查

算法 公式
MAP 准则 $\hat{\mathbf{u}} = \arg\max_{\mathbf{u}} P(\mathbf{u}
BCJR 前向 \(\alpha_{k+1}(S_{k+1}) = \sum_{S_k} \alpha_k(S_k) \gamma_k(S_k, S_{k+1})\)
BCJR 后向 \(\beta_k(S_k) = \sum_{S_{k+1}} \gamma_k(S_k, S_{k+1}) \beta_{k+1}(S_{k+1})\)
BCJR LLR \(LLR(u_k) = \log \frac{\sum_{u_k=0} \alpha_k \gamma_k \beta_{k+1}}{\sum_{u_k=1} \alpha_k \gamma_k \beta_{k+1}}\)
BP 校验更新 \(R_{ji} = 2 \tanh^{-1}\left( \prod_{k} \tanh\left(\frac{Q_{kj}}{2}\right) \right)\)
Min-Sum $R_{ji} \approx (\prod \text{sign}) \cdot \min(
BP 变量更新 \(Q_{ij} = L(c_i) + \sum_{k} R_{ki}\)

解码器比较

解码器 复杂度 性能 应用
Viterbi (ML) 卷积码
BCJR (MAP) 最优 Turbo 码
置信传播 接近最优 LDPC
Min-Sum 次优(-0.5 dB) LDPC

🎓 本章完成检查

完成本章后,确保你能:

  • 解释 MAP 解码与 ML 解码的区别
  • 说明 BCJR 算法的前向 - 后向思想
  • 推导 BCJR 的递归公式
  • 解释 Tanner 图的结构
  • 推导置信传播的消息更新公式
  • 说明 Min-Sum 近似的原理
  • 解释密度演化的思想
  • 说明错误平台的成因

🎉 教程完成!

恭喜!你已经完成了**4G/5G 下行解码数学原理**的完整学习!

知识体系回顾

数学基础(第 1-5 章)
├── 概率论、随机过程、线性代数
├── 估计理论、检测理论
通信模型(第 6-8 章)
├── 信号空间、无线信道、噪声模型
核心算法(第 9-12 章)
├── 信道估计(LS、LMMSE)
├── 均衡算法(ZF、MMSE、MIMO)
├── 解调与 LLR(QPSK、16QAM)
└── 信道解码(BCJR、置信传播)

下一步建议

  1. 实践练习: 用 MATLAB/Python 实现 LMMSE 信道估计
  2. 深入阅读: 3GPP 规范(TS 36.211, TS 38.211)
  3. 系统学习: MIMO-OFDM 系统完整架构
  4. 前沿追踪: 6G 通信技术(太赫兹、智能超表面等)

反馈与改进

欢迎提出: - 内容错误 - 推导不清 - 需要补充的话题

联系方式: 在工作区创建 issue 或在学习笔记中记录


第 12 章 结束 · 教程完成