<!-- title: 信号处理与信道编码：从FFT到LDPC与Polar -->

# 信号处理与信道编码：从FFT到LDPC与Polar

> **阅读导引**：本文面向1-3年经验的通信工程师，从"为什么需要这些技术"出发，用类比和图解拆解信号处理中三大核心模块——FFT/IFFT（时频域桥梁）、LDPC码（数据信道保护伞）、Polar码（控制信道利器）。读完本文，你将理解5G物理层信号处理链的底层逻辑，而不是死记公式。

---

## 一、从"写信"说起：信号处理在通信中的角色

想象你给远方朋友写了一封信。你得先**把意思组织好**（信源编码），然后**加上防伪标记和校验码**（信道编码），再**翻译成对方能读懂的语言**（调制），最后**通过邮局寄出**（射频发射）。

信号处理就是中间那段"加校验码 + 翻译"的过程。它要解决两个根本问题：

1. **效率问题**——怎么用最少的"笔墨"表达最多的信息？（FFT/IFFT让多路信号高效复用）
2. **可靠性问题**——信件在途中被雨水打湿、被虫咬了几个洞，对方怎么还能读出来？（信道编码LDPC/Polar纠错）

整条5G物理层信号处理链如下：

```
原始数据 → CRC校验 → 信道编码（LDPC/Polar） → 速率匹配 → 调制（QAM）
    → 层映射 → 预编码 → 资源映射 → IFFT → 加CP → 射频发射
```

下面我们逐模块拆解。

---

## 二、FFT与IFFT：时域与频域的"万能翻译器"

### 2.1 直觉理解：音乐的频谱

你听一段交响乐，听到的是**随时间变化的声压波形**（时域）。但一个训练有素的音乐家能分辨出"小提琴在高音区、大提琴在低音区"——这就是**频域视角**。

**傅里叶变换**就是那双"音乐家的耳朵"：它能把任意一段时域信号拆解成不同频率的正弦波分量。

$$X(f) = \int_{-\infty}^{\infty} x(t) \cdot e^{-j2\pi ft} \, dt$$

反过来，**逆傅里叶变换**（IFFT）就是把各个频率的音符重新合成为一段完整的音乐。

$$x(t) = \int_{-\infty}^{\infty} X(f) \cdot e^{j2\pi ft} \, df$$

### 2.2 为什么OFDM必须用IFFT/FFT？

OFDM（正交频分复用）的核心思想是：把高速数据流分成N路低速数据流，分别调制到N个相互正交的子载波上并行传输。

如果用硬件来实现：你需要N个振荡器（混频器），每路子载波一个。当N=4096（5G NR最大FFT点数）时，这完全不可行。

**IFFT的妙处**在于：它是一个纯数字运算，一个模块就能同时完成"N路子载波调制并叠加"的工作。

用一个类比：IFFT就像一个**超级计算器**，你告诉它"N个子载波上各自要传什么符号"，它直接帮你算出"这些符号叠加后在时域长什么样"。接收端的FFT则反过来："我收到了一段时域波形，帮我拆出每个子载波上承载的符号"。

```mermaid
flowchart TD
    subgraph 发射端
        A[数据符号<br/>S₀,S₁,...,Sₙ₋₁] --> B[IFFT]
        B --> C[时域OFDM信号<br/>s₀,s₁,...,sₙ₋₁]
        C --> D[加循环前缀CP]
        D --> E[数模转换+射频发射]
    end
    subgraph 接收端
        F[射频接收+模数转换] --> G[去CP]
        G --> H[FFT]
        H --> I[恢复符号<br/>Ŝ₀,Ŝ₁,...,Ŝₙ₋₁]
    end
    E -.->|无线信道| F
```

### 2.3 DFT到FFT：算法复杂度的飞跃

离散傅里叶变换（DFT）的原始定义：

$$X[k] = \sum_{n=0}^{N-1} x[n] \cdot e^{-j\frac{2\pi}{N}kn}, \quad k = 0, 1, \ldots, N-1$$

直接计算需要 $O(N^2)$ 次复数乘法。当N=4096时，就是约1600万次乘法——太慢了。

FFT（快速傅里叶变换）利用了旋转因子 $W_N^{kn} = e^{-j\frac{2\pi}{N}kn}$ 的**对称性和周期性**，通过分治策略把复杂度降到 $O(N\log_2 N)$：

| FFT点数 N | DFT复杂度 N² | FFT复杂度 Nlog₂N | 加速比 |
|-----------|-------------|-----------------|--------|
| 64 | 4,096 | 384 | 10.7× |
| 256 | 65,536 | 2,048 | 32× |
| 1024 | 1,048,576 | 10,240 | 102× |
| 4096 | 16,777,216 | 49,152 | 341× |

N越大，FFT的加速效果越惊人。这就是为什么5G NR能用多达4096点的FFT实现数百个子载波的并行处理。

### 2.4 工程实战：FFT点数选择

5G NR中FFT点数不是固定的，取决于**子载波间隔（SCS）**和**信道带宽**：

| 参数 | 典型值 |
|------|--------|
| 子载波间隔 | 15kHz / 30kHz / 60kHz / 120kHz |
| 采样率 | $f_s = N_{FFT} \times \Delta f$ |
| 有效子载波数 | 取决于带宽（如100MHz对应273个RB） |
| FFT点数 | 通常是2的幂次，≥有效子载波数 |

**调试陷阱**：在做OFDM接收机调试时，如果FFT窗口起点偏移了几个采样点，就会引入**载波间干扰（ICI）**和**符号间干扰（ISI）**。这就是为什么同步（时间和频率同步）是OFDM系统最关键的步骤之一。

---

## 三、信道编码：为什么通信需要"纠错"？

### 3.1 香农极限——纠错码的理论天花板

1948年，香农（Claude Shannon）证明了：只要传输速率低于**信道容量** $C$，就一定存在一种编码方式使得误码率任意小。

$$C = B \cdot \log_2\left(1 + \frac{S}{N}\right)$$

其中 $B$ 是带宽，$S/N$ 是信噪比。

这个定理给出了希望，但没告诉怎么构造这种码。从那以后，通信工程师花了70多年寻找**逼近香农极限**的实用编码方案：

```mermaid
timeline
    title 信道编码发展历程
    1950 : 汉明码 (Hamming Code)
    1955 : 卷积码 (Convolutional Code)
    1962 : LDPC码 (Gallager提出)
    1993 : Turbo码 (Berrou等)
    2009 : Polar码 (Arıkan提出)
    2016 : 5G标准采纳LDPC+Polar
```

### 3.2 为什么5G不再用Turbo码？

4G LTE使用Turbo码作为数据信道编码。但5G时代有几个新需求让Turbo码力不从心：

1. **吞吐量**：5G峰值速率10Gbps，Turbo码的串行译码结构难以支撑
2. **低延迟**：URLLC场景要求1ms端到端时延，Turbo的迭代次数不可控
3. **并行性**：LDPC码基于稀疏图的译码天然支持高度并行

因此5G选择了一种**混合编码策略**：

| 信道类型 | 5G编码方案 | 核心原因 |
|---------|-----------|---------|
| 数据信道 (PDSCH/PUSCH) | **LDPC码** | 长码、高吞吐、并行友好 |
| 控制信道 (PDCCH/PUCCH) | **Polar码** | 短码、低BLER、可达容量 |
| 广播信道 (PBCH) | **Polar码** | 短包传输 |

---

## 四、LDPC码：数据信道的"编织铠甲"

### 4.1 核心思想：用稀疏的校验矩阵保护数据

LDPC（Low-Density Parity-Check）码是一种**线性分组码**，由Robert Gallager在1962年提出（他的博士论文），比Turbo码早了31年！只是当年算力不够，直到1990年代才被"重新发现"。

**"低密度"**的含义：校验矩阵 $\mathbf{H}$ 中1的个数非常稀少。比如一个 $1000 \times 2000$ 的矩阵，可能只有约6000个1（密度0.3%）。

为什么稀疏很重要？因为**稀疏意味着每个校验方程只涉及少量比特，每个比特只参与少量校验方程**——这直接决定了译码算法的低复杂度和高并行性。

### 4.2 Tanner图：把矩阵变成"社交网络"

校验矩阵 $\mathbf{H}$ 可以用**Tanner图**来表示，这是理解LDPC译码的关键：

- **变量节点（Variable Node）**：对应码字的每一个比特，相当于"学生"
- **校验节点（Check Node）**：对应每一个校验方程，相当于"老师"
- **边（Edge）**：矩阵中为1的位置连接变量节点和校验节点

```mermaid
flowchart TB
    subgraph Tanner图示例
        direction LR
        subgraph 变量节点 VN
            v1((v₁))
            v2((v₂))
            v3((v₃))
            v4((v₄))
            v5((v₅))
            v6((v₆))
        end
        subgraph 校验节点 CN
            c1[c₁]
            c2[c₂]
            c3[c₃]
        end
    end
    v1 --- c1
    v1 --- c2
    v2 --- c1
    v2 --- c3
    v3 --- c1
    v3 --- c2
    v4 --- c2
    v4 --- c3
    v5 --- c1
    v5 --- c3
    v6 --- c2
    v6 --- c3
```

上面这个Tanner图对应的校验矩阵（部分）：

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

### 4.3 置信传播（BP）译码：像"八卦传播"一样纠错

LDPC最常用的译码算法是**置信传播（Belief Propagation, BP）**，也叫消息传递（Message Passing）。其核心思想可以用一个生活类比：

> 想象6个学生（变量节点）参加3场考试（校验节点）。每场考试由几个学生共同完成，老师根据学生的表现给出反馈。学生之间不能直接交流，但可以通过老师传递"我对某个答案有多大把握"。经过多轮"考试→反馈→修正"，最终大家都确定了正确答案。

具体流程：

1. **初始化**：每个变量节点根据接收到的信道值，计算自身为0或1的初始概率（似然比）
2. **变量节点→校验节点**：每个VN把它的置信信息沿着边发给相邻的CN
3. **校验节点→变量节点**：每个CN根据接收到的所有VN信息，计算出"如果其他VN都正确，这个VN应该是什么"的外信息，发回去
4. **判决**：每个VN综合所有收到的外信息，做出硬判决
5. **校验**：检查 $\mathbf{H}\hat{\mathbf{c}}^T = \mathbf{0}$ 是否成立。若成立则译码成功；否则回到步骤2继续迭代

```mermaid
flowchart TD
    A[接收信道值<br/>初始化LLR] --> B[VN → CN<br/>传递置信信息]
    B --> C[CN → VN<br/>计算外信息]
    C --> D[综合判决<br/>硬判决输出]
    D --> E{H·ĉᵀ = 0?}
    E -->|是| F[✅ 译码成功]
    E -->|否, 未达最大迭代| B
    E -->|否, 达到最大迭代| G[❌ 译码失败<br/>上报错误]
```

### 4.4 5G NR中的LDPC：两个基图（Base Graph）

5G标准定义了两个LDPC基图：

| 特性 | Base Graph 1 (BG1) | Base Graph 2 (BG2) |
|------|-------------------|-------------------|
| 校验矩阵大小 | 46×68 | 42×52 |
| 适用码长 | 较长（≥约308比特） | 较短（<约308比特） |
| 适用码率 | 高码率（≥约0.67） | 低码率（<约0.67） |
| 典型场景 | eMBB大数据传输 | 小包/低码率传输 |
| 支持IR-HARQ | 是 | 是 |

**设计哲学**：BG1针对大数据量、高吞吐优化；BG2针对小数据包、低码率优化。gNB根据传输块大小（TBS）和码率自动选择。

### 4.5 工程实战连接

**在哪里会遇到LDPC？**

- **Log抓取分析**：当BLER（误块率）升高时，需要区分是LDPC译码失败还是HARQ重传失败
- **CQI调节**：终端上报CQI，gNB据此选择MCS（包含码率），码率过高会导致LDPC纠错能力不足
- **Massive MIMO场景**：多层数据并行编码时，LDPC的并行性直接影响基带处理时延

**常见误解**：
- ❌ "LDPC码率越低越好"——码率低意味着更多冗余，频谱效率也低。实际需要在可靠性和效率之间取平衡
- ❌ "LDPC一定能纠错成功"——BP算法不保证收敛，强干扰下仍可能失败，此时依赖HARQ重传

---

## 五、Polar码：控制信道的"精准护盾"

### 5.1 信道极化：一个天才的观察

2008年，Erdal Arıkan发现了一个深刻的现象：**如果把N个相同的信道通过特定的递归变换组合，这些信道会"极化"——一部分变成完美的信道（容量=1），另一部分变成完全不可用的信道（容量=0）**。

用类比理解：

> 想象你有100个同样的杯子（信道），每个杯子容量相同。你做了一种特殊的"配对操作"——每两个杯子合并后重新分配：一个杯子得到更多的容量，另一个失去容量。重复多次后，有些杯子变得"几乎无限大"（好信道），有些变得"几乎没有容量"（差信道）。

数学上，极化变换可以用矩阵表示。对于 $N=2$ 的最简单情况：

$$\begin{bmatrix} U_1 \\ U_2 \end{bmatrix} = \begin{bmatrix} 1 & 0 \\ 1 & 1 \end{bmatrix} \begin{bmatrix} X_1 \\ X_2 \end{bmatrix}$$

经过这个变换后，$U_1$ 对应的合成信道容量降低，$U_2$ 对应的合成信道容量升高。扩展到 $N=2^n$，递归操作让信道容量趋向极端化（0或1）。

### 5.2 编码策略：好信道传信息，差信道传固定值

极化完成后，编码策略非常简单：

```mermaid
flowchart LR
    subgraph 极化后的N个合成信道
        direction TB
        G1[信道1: 容量≈1 ✅]
        G2[信道3: 容量≈1 ✅]
        G3[信道5: 容量≈1 ✅]
        G4[信道7: 容量≈1 ✅]
        B1[信道2: 容量≈0 ❌]
        B2[信道4: 容量≈0 ❌]
        B3[信道6: 容量≈0 ❌]
        B4[信道8: 容量≈0 ❌]
    end
    G1 --> |传信息比特| O[输出码字]
    G2 --> O
    G3 --> O
    G4 --> O
    B1 --> |固定为0<br/>冻结比特| O
    B2 --> O
    B3 --> O
    B4 --> O
```

- **信息比特**（Information Bits）：放在"好信道"上传，可靠性高
- **冻结比特**（Frozen Bits）：放在"差信道"上，固定为0（收发双方都知道）

### 5.3 译码：连续消除（SC）与列表（SCL）

**SC（Successive Cancellation）译码**是最基本的Polar译码算法：

1. 按顺序逐比特译码
2. 如果是冻结比特，直接判为0
3. 如果是信息比特，根据之前已译出的比特和当前接收值计算似然比，做硬判决

SC的问题：**一旦某个比特判错，后续所有比特都会受影响（错误传播）**。

**SCL（SC List）译码**是改进方案：同时维护L条候选路径（L=8或32），保留最可能的L种译码结果，最后选最优的。这大大提高了短码下的纠错性能。

5G NR中还使用了**CRC辅助的SCL（CA-SCL）**：在编码前先加CRC，译码时用CRC从L条候选路径中选出正确的那条。

| 译码算法 | 复杂度 | 性能 | 5G NR使用 |
|---------|--------|------|----------|
| SC | $O(N\log N)$ | 中等 | 基础版本 |
| SCL (L=8) | $L \cdot O(N\log N)$ | 优秀 | ✅ 主要使用 |
| CA-SCL | $L \cdot O(N\log N)$ + CRC | 最佳 | ✅ 标准方案 |

### 5.4 Polar在5G中的具体应用

5G NR使用Polar码的场景：

| 信道 | 内容 | 典型载荷 |
|------|------|---------|
| PDCCH | 下行控制信息 DCI | 20-140比特 |
| PUCCH | 上行控制信息 UCI | 12-19比特（格式2/3） |
| PBCH | 广播信息 | 32比特 |
| RAR | 随机接入响应 | 约40比特 |

**为什么控制信道用Polar而不用LDPC？**

- 控制信息通常是短包（几十到一百多比特），Polar在短码长下性能优于LDPC
- 控制信道对**块差错率（BLER）** 要求极高（目标 $10^{-2}$ 到 $10^{-3}$ 的首次传输BLER）
- Polar编码构造确定性强，不需要随机化

### 5.5 Polar vs LDPC：一张表看清差异

| 维度 | LDPC码 | Polar码 |
|------|--------|---------|
| **理论性质** | 渐近逼近香农极限 | 严格证明可达香农极限 |
| **最佳码长** | 中长码（数百~数千比特） | 短码（数十~数百比特） |
| **译码方式** | 置信传播（BP），迭代 | SC/SCL，顺序 |
| **并行性** | 高（节点间可并行） | 较低（顺序依赖） |
| **吞吐量** | 极高（数十Gbps） | 中等 |
| **码率灵活性** | 优秀（支持增量冗余HARQ） | 有限 |
| **5G应用** | 数据信道 PDSCH/PUSCH | 控制信道 PDCCH/PUCCH/PBCH |
| **提出时间** | 1962年（Gallager） | 2009年（Arıkan） |
| **标准成熟度** | 多标准验证（WiFi/5G） | 5G首次大规模商用 |

---

## 六、全链路视角：信号处理如何协同工作

让我们把FFT/IFFT和信道编码放在完整的5G下行处理链中看：

```mermaid
flowchart TB
    subgraph 发射端基带处理
        A[传输块 TB] --> B[CRC附加]
        B --> C[信道编码<br/>LDPC: 数据<br/>Polar: 控制信息]
        C --> D[速率匹配<br/>打孔/重复]
        D --> E[调制映射<br/>QPSK/16QAM/64QAM/256QAM]
        E --> F[层映射与预编码<br/>MIMO处理]
        F --> G[资源映射<br/>映射到RE]
        G --> H[IFFT<br/>频域→时域OFDM信号]
        H --> I[加CP与DAC<br/>生成射频信号]
    end
    subgraph 无线信道
        I -->|多径衰落+噪声| J[接收信号]
    end
    subgraph 接收端基带处理
        J --> K[ADC与去CP]
        K --> L[FFT<br/>时域→频域]
        L --> M[信道估计与均衡]
        M --> N[解调<br/>软比特LLR输出]
        N --> O[信道译码<br/>LDPC BP / Polar SCL]
        O --> P[CRC校验]
        P --> Q[✅ 恢复传输块]
    end
```

**关键数据流转换**：
1. **比特级**（CRC、编码）：数据被添加冗余保护
2. **符号级**（调制）：比特映射为复数符号
3. **采样级**（IFFT/FFT）：频域符号变为时域采样

每一级转换都有对应的逆操作在接收端还原。

---

## 七、工程调试实战要点

### 7.1 FFT相关调试

| 现象 | 可能原因 | 排查方向 |
|------|---------|---------|
| 子载波功率不平 | FFT窗偏移 | 检查时间同步 |
| 星座图旋转 | 载波频偏 | 检查频率同步 |
| EVM偏高 | 采样时钟偏差 | 检查晶振精度 |
| 特定子载波无信号 | 资源映射错误 | 检查DC子载波和保护带 |

### 7.2 信道编码相关调试

| 现象 | 可能原因 | 排查方向 |
|------|---------|---------|
| BLER持续高 | 码率过高或SNR过低 | 降低MCS等级 |
| HARQ重传仍失败 | LDPC迭代次数不足 | 增加BP迭代次数 |
| DCI漏检 | Polar译码失败 | 检查聚合等级（AL）配置 |
| 短包BLER高于预期 | 冻结比特序列错误 | 检查Polar码构造参数 |

### 7.3 常用工具

- **MATLAB/Octave**：`fft()` / `ifft()` 函数直接验证
- **Wireshark**：分析MAC层BLER统计
- **基站Log**：查看LDPC译码迭代次数分布，判断信道质量
- **Python (NumPy)**：`numpy.fft.fft()` 快速原型验证

---

## 常见问题

**Q1: FFT和DFT有什么区别？**
A: FFT是DFT的一种**快速算法**。数学结果完全相同，只是FFT利用旋转因子的对称性大幅降低了计算量，从 $O(N^2)$ 降到 $O(N\log_2N)$。N越大加速越明显（N=4096时约341倍）。工程上几乎不存在直接算DFT的场景。

**Q2: LDPC码和Turbo码的本质区别是什么？**
A: 核心区别在于**译码结构**。Turbo码用两个递归系统卷积码（RSC）并行级联，依赖交织器，译码是两个SISO译码器之间的迭代；LDPC码基于稀疏校验矩阵的Tanner图，译码是在变量节点和校验节点之间的消息传递。LDPC的并行性更好，天然适合硬件加速器（GPU/FPGA/ASIC），这是5G选择它的主因。

**Q3: 为什么不统一用Polar码或统一用LDPC码？**
A: 因为没有一种编码在所有场景下都最优。LDPC在长码、高吞吐场景下表现优异（数据信道），但在短码（几十比特）下性能不如Polar。Polar在短码下可达香农极限，但长码下译码复杂度急剧上升，且不支持增量冗余HARQ。所以5G采取了"术业有专攻"的混合方案。

**Q4: 信道编码中的"码率"是什么意思？它怎么影响系统性能？**
A: 码率 $R = k/n$，其中 $k$ 是信息比特数，$n$ 是编码后总比特数（含冗余）。码率越低，冗余越多，纠错能力越强，但频谱效率也越低。5G中gNB根据信道质量（CQI/RI）动态调整MCS，其中就包含码率的选择——好信道用高码率提效率，差信道用低码率保可靠。

**Q5: 在实际项目中如何选择FFT点数？**
A: FFT点数 $N_{FFT}$ 由采样率和子载波间隔决定：$N_{FFT} = f_s / \Delta f$。在5G NR中，$f_s$ 由信道带宽和SCS决定。通常 $N_{FFT}$ 取≥有效子载波数的下一个2的幂次。比如100MHz带宽、30kHz SCS配置下，有效子载波约3276个，$N_{FFT}$ 取4096。零填充部分对应保护带和直流子载波。

---

## 参考来源

1. [PySDR - 信道编码章节](https://pysdr.org/zh/content-zh/channel_coding.html) — 含FEC、香农极限、LDPC码的Python交互式教程，推荐实践学习
2. [Demystifying 5G Polar and LDPC Codes (arXiv 2502.11053)](https://arxiv.org/html/2502.11053v3) — 2025年发表的LDPC与Polar码综合综述论文
3. [Stanford EE376A - Polar Codes Lecture](https://web.stanford.edu/class/ee376a/files/polarcodes.pdf) — Arıkan极化码理论的经典课程讲义
4. [CafeTele - LDPC and Polar Coding in 5G NR](https://www.cafetele.com/articles/article-ldpc-polar-coding-3gpp.html) — 面向3GPP TS 38.212的工程实现指南
5. [NVIDIA Sionna - 5G Channel Coding Tutorial](https://nvlabs.github.io/sionna/phy/tutorials/notebooks/5G_Channel_Coding_Polar_vs_LDPC_Codes.html) — GPU加速的5G信道编码仿真教程，含可视化对比

---

> 本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵**爱卫生**（微信ID: gprshome201101）维护，聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。
> 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
