首页 › deep-tech › 信号处理基础:FFT与信道编码原理图解

信号处理基础:从傅里叶变换到5G信道编码,理解通信的"底层算力"

一、从一个和弦说起:为什么信号需要"拆解"

想象你听到一段钢琴和弦——三个键同时按下,耳朵听到的是一个"整体声音"。但你的大脑其实能分辨出其中包含了哪些音符。这个"把混合声音拆成独立频率成分"的过程,就是傅里叶变换在做的事情。

在移动通信中,基站发出的射频信号同样是一个"混合体"——它包含了成百上千个用户的数据、导频信号、控制信息,全部叠加在一起。如果不能把这个混合信号精准地拆解开来,通信根本无法实现。

信号处理就是通信系统的"底层算力"。它包含两大核心任务:

任务 含义 关键技术
信号变换 在时域和频域之间转换,实现多载波调制 FFT / IFFT
差错控制 在噪声信道中保护数据完整性 LDPC码 / Polar码

本文将从直觉出发,用图解方式拆解这四大技术原理,让读者不仅知道"怎么用",更理解"为什么这样设计"。


二、FFT与IFFT:通信系统的心脏

2.1 傅里叶变换的直觉——"彩虹拆白光"

牛顿用三棱镜把白光拆成彩虹,证明白光是多种颜色(频率)的混合。傅里叶变换就是数学上的"三棱镜":

时域信号(看到波形随时间变化)
    ⇅ FFT(拆解)
频域信号(看到包含哪些频率成分)
    ⇅ IFFT(合成)
时域信号(恢复原始波形)

2.2 DFT的数学定义

离散傅里叶变换(DFT)将长度为N的时域序列 ${x[0], x[1], \ldots, x[N-1]}$ 变换为频域序列 ${X[0], X[1], \ldots, X[N-1]}$:

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

逆变换(IDFT):

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

为什么DFT不够用? 直接按公式计算,复杂度是 $O(N^2)$。当 $N=1024$ 时需要约100万次复数乘法。在5G系统中,OFDM的FFT点数可能高达4096甚至更大,按 $O(N^2)$ 实时处理根本不可能。

2.3 FFT:让DFT飞起来的分治魔法

FFT(快速傅里叶变换) 的核心思想是分治(Divide and Conquer):

把一个N点的DFT,拆成两个N/2点的DFT,递归分解直到只剩1点。

graph TD
    A["N点DFT<br/>O(N²)"] --> B["偶数序号样本<br/>N/2点DFT"]
    A --> C["奇数序号样本<br/>N/2点DFT"]
    B --> D["N/4点DFT"]
    B --> E["N/4点DFT"]
    C --> F["N/4点DFT"]
    C --> G["N/4点DFT"]
    D --> H["...直到1点DFT<br/>直接就是数据本身"]
    E --> H
    F --> H
    G --> H

    style A fill:#ff6b6b,color:#fff
    style H fill:#4ecdc4,color:#fff

复杂度对比:

方法 复杂度 N=1024时运算量 N=4096时运算量
直接DFT $O(N^2)$ ~100万次 ~1600万次
FFT $O(N \log_2 N)$ ~1万次 ~4.8万次
加速比 — 约100倍 约330倍

这就是1965年Cooley-Tukey算法的伟大之处:它让傅里叶变换从"数学理论"变成了"工程实用"。

2.4 FFT在OFDM中的角色——发射端用IFFT,接收端用FFT

这是很多初学者的困惑点:为什么OFDM发射端用IFFT而不是FFT?

直觉理解:

graph TD
    subgraph 发射端
        A1["比特流"] --> A2["QAM映射<br/>(频域符号)"]
        A2 --> A3["IFFT<br/>频域→时域"]
        A3 --> A4["加循环前缀CP"]
        A4 --> A5["DAC→射频发射"]
    end

    subgraph 空中接口
        A5 -->|无线信道| B1["天线接收<br/>ADC采样"]
    end

    subgraph 接收端
        B1 --> B2["去CP"]
        B2 --> B3["FFT<br/>时域→频域"]
        B3 --> B4["信道均衡"]
        B4 --> B5["QAM解调<br/>→比特流"]
    end

    style A3 fill:#ff9f43,color:#fff
    style B3 fill:#54a0ff,color:#fff

类比: 想象一支合唱团。IFFT是"指挥"——把每个人(子载波)要唱的音符(数据符号)合成为统一的声音(时域波形)。FFT是"耳朵"——从听到的混合声中分辨出每个人唱的是什么。

2.5 FFT点数如何选择?——工程中的权衡

在5G NR中,FFT大小 $N_{FFT}$ 与子载波间隔(SCS)和信道带宽直接相关:

参数 关系
采样率 $f_s$ $f_s = N_{FFT} \times \Delta f$,其中 $\Delta f$ 是子载波间隔
有用子载波数 不超过 $N_{FFT}$,通常小于 $N_{FFT}$(留保护频带)
CP长度 $N_{FFT} / (1 + \text{CP比例})$ 的一个OFDM符号中有用部分占的比例
5G NR典型配置 带宽 SCS FFT大小 有用子载波
100MHz 100MHz 30kHz 4096 3276
50MHz 50MHz 15kHz 4096 3168
10MHz 10MHz 15kHz 1024 600

实战意义: FFT点数越大,频域分辨率越高(子载波越窄),但时域OFDM符号越长,时延也越大。这就是为什么5G支持灵活的 numerology(子载波间隔可配),让系统在高分辨率和低时延之间灵活取舍。


三、信道编码:给数据穿上"防弹衣"

3.1 为什么需要信道编码?

无线信道是一个极其恶劣的传输环境:

如果直接把原始数据发出去,接收端大概率会收到错误比特。信道编码的思路是:

在发送前,给数据加上"冗余校验信息"。接收端利用这些冗余信息来发现和纠正错误。

这就像寄快递时在箱子里塞泡沫——虽然增加了体积(开销),但保护了内容物(数据)的完好。

编码效率(码率) 的定义:

$$R = \frac{K}{N}$$

其中 $K$ 是信息比特数,$N$ 是编码后的总比特数。码率越低,冗余越多,保护越强,但有效传输速率也越低。

3.2 信道编码的演进路线

代际 数据信道编码 控制信道编码 核心突破
2G GSM 卷积码 卷积码 引入纠错编码概念
3G WCDMA Turbo码 卷积码 Turbo码逼近香农极限
4G LTE Turbo码 咬尾卷积码 Turbo码成熟应用
5G NR LDPC码 Polar码 两种码分工协作,各司其职

5G为什么抛弃Turbo码?

Turbo码在4G时代表现优异,但它有两个致命短板: 1. 高吞吐量场景性能瓶颈:Turbo码的串行迭代译码结构难以并行化,无法支撑5G eMBB场景20Gbps的峰值速率 2. 短码性能不足:在URLLC等短包场景下,Turbo码性能明显下降

3GPP的最终决策:

graph TB
    subgraph "5G NR信道编码架构"
        A["待传输数据"] --> B{"数据类型?"}
        B -->|"数据信道<br/>PDSCH/PUSCH"| C["LDPC编码<br/>擅长: 大块数据、高吞吐"]
        B -->|"控制信道<br/>DCI/UCI"| D["Polar编码<br/>擅长: 短包、高可靠"]
        C --> E["调制 → IFFT → 发射"]
        D --> E
    end

    style C fill:#ff6348,color:#fff
    style D fill:#7bed9f,color:#333

四、LDPC码原理:稀疏矩阵的神奇力量

4.1 从发明到被"重新发现"

LDPC(Low-Density Parity-Check,低密度奇偶校验码)的故事极具戏剧性:

教训: 一个技术从理论提出到工程实用,可能需要50年。好的理论不怕等。

4.2 核心原理——奇偶校验矩阵H

LDPC码的核心是一个稀疏的校验矩阵 H("低密度"指的是矩阵中1的密度很低):

$$\mathbf{H} \cdot \mathbf{c}^T = \mathbf{0}$$

其中 $\mathbf{c}$ 是有效码字。所有满足这个方程的向量 $\mathbf{c}$ 都是合法码字。

例子: 一个简单的(6,3) LDPC码校验矩阵:

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

矩阵中只有少量"1",大部分是"0"——这就是"低密度"的含义。

4.3 Tanner图——让校验关系可视化

校验矩阵 H 可以用Tanner图(二部图)来可视化:

graph LR
    subgraph "变量节点 (Variable Nodes) — 代表码字比特"
        V1["c₁"]
        V2["c₂"]
        V3["c₃"]
        V4["c₄"]
        V5["c₅"]
        V6["c₆"]
    end

    subgraph "校验节点 (Check Nodes) — 代表校验方程"
        C1["f₁"]
        C2["f₂"]
        C3["f₃"]
        C4["f₄"]
    end

    V1 --- C1
    V1 --- C3
    V2 --- C1
    V2 --- C2
    V3 --- C2
    V3 --- C4
    V4 --- C1
    V4 --- C4
    V5 --- C2
    V5 --- C3
    V6 --- C3
    V6 --- C4

    style V1 fill:#74b9ff,color:#333
    style V2 fill:#74b9ff,color:#333
    style V3 fill:#74b9ff,color:#333
    style V4 fill:#74b9ff,color:#333
    style V5 fill:#74b9ff,color:#333
    style V6 fill:#74b9ff,color:#333
    style C1 fill:#fd79a8,color:#fff
    style C2 fill:#fd79a8,color:#fff
    style C3 fill:#fd79a8,color:#fff
    style C4 fill:#fd79a8,color:#fff

类比理解: 变量节点是"学生",校验节点是"考试"。每场考试检查几个学生的答案是否一致。如果某学生出错(比特翻转),通过多场考试之间的信息交换(消息传递),就能定位并纠正错误。

4.4 译码过程——置信传播(Belief Propagation)

LDPC的译码不是"一次算出答案",而是通过迭代消息传递逐步收敛到正确码字:

sequenceDiagram
    participant Channel as 信道接收端
    participant VN as 变量节点
    participant CN as 校验节点

    Channel->>VN: 初始化LLR值<br/>(基于接收信号)

    loop 迭代 (通常5~30次)
        VN->>CN: 传递"我认为这个比特是0还是1"<br/>(Variable-to-Check消息)
        CN->>VN: 传递"根据校验方程,建议修正"<br/>(Check-to-Variable消息)
        Note over VN: 更新每个比特的后验概率
    end

    VN->>Channel: 输出硬判决结果<br/>(所有校验方程满足则成功)

关键术语解释:

4.5 5G NR中LDPC码的特殊设计

5G中的LDPC码不是"通用"LDPC,而是经过精心定制的QC-LDPC(准循环LDPC):

设计特点 说明
两张基图 BG1(大块、高速率)、BG2(小块、低速率)
移位值矩阵 基图中的每个"1"被替换为一个循环移位单位矩阵,利于硬件并行
速率匹配 支持打孔(Puncturing)、缩短(Shortening)、重复(Repetition)
IR-HARQ兼容 增量冗余HARQ重传时,只需发送额外的校验比特

BG1 vs BG2选择逻辑:

条件 使用BG1 使用BG2
传输块大小 $TBS \leq 292$ — ✅
传输块大小 $292 < TBS \leq 3824$ 且码率 $R \leq 0.67$ — ✅
其他情况 ✅ —

实战提示: 调试5G数据信道问题时,如果看到BLER(误块率)异常偏高,要检查:是否选择了错误的基图?打孔模式是否正确?LDPC迭代次数是否足够?


五、Polar码原理:让信道"两极分化"

5.1 极化现象——自然界的"马太效应"

Polar码由土耳其学者Erdal Arıkan于2009年提出,其核心思想是一种反直觉的信道极化(Channel Polarization):

把N个相同的信道,通过特定的编码变换,变成两类极端信道—— 一部分变成"完美信道"(容量→1),另一部分变成"废信道"(容量→0)。 信息比特只放在完美信道上传输,废信道发送固定的"冻结比特"。

graph TD
    A["N个相同的<br/>原始信道<br/>(容量=W)"] -->|"极化变换"| B["一部分信道<br/>容量→1<br/>★ 可靠信道<br/>(放信息比特)"]
    A -->|"极化变换"| C["一部分信道<br/>容量→0<br/>✗ 不可靠信道<br/>(放冻结比特)"]

    B --> D["信息比特在可靠信道<br/>上安全传输"]
    C --> E["冻结比特=固定值<br/>接收端已知"]

    style B fill:#2ecc71,color:#fff
    style C fill:#e74c3c,color:#fff
    style A fill:#f39c12,color:#fff

数学直觉: 极化变换的核心矩阵是:

$$F = \begin{bmatrix} 1 & 0 \ 1 & 1 \end{bmatrix}$$

对于 $N=2^n$ 的极化码,生成矩阵为:

$$G_N = B_N \cdot F^{\otimes n}$$

其中 $B_N$ 是比特反转置换矩阵,$F^{\otimes n}$ 表示矩阵 $F$ 的 $n$ 次Kronecker积(张量积)。

$N=2$ 的最简例子:

$$\begin{bmatrix} u_1 \ u_2 \end{bmatrix} \xrightarrow{F} \begin{bmatrix} x_1 \ x_2 \end{bmatrix} = \begin{bmatrix} u_1 \oplus u_2 \ u_2 \end{bmatrix}$$

经过信道传输后: - $x_2 = u_2$ 直接经过一个信道 → 可靠性不变 - $x_1 = u_1 \oplus u_2$ 需要从"两个信道的联合"中恢复 → 可靠性下降

递归执行这个过程,随着N增大,信道逐渐两极分化。

5.2 编码过程

Polar码 $\mathcal{P}(N, K)$ 的编码($N$ = 码长,$K$ = 信息比特数):

  1. 可靠性计算:预先计算 $N$ 个子信道的可靠性排序(5G中使用预定义的可靠性序列)
  2. 比特分配:选择可靠性最高的 $K$ 个子信道放置信息比特,其余放置冻结比特(固定为0)
  3. 矩阵乘法:$\mathbf{x} = \mathbf{u} \cdot G_N$
graph LR
    A["输入向量 u"] --> B["位置0: 冻结比特 0"]
    A --> C["位置1: 冻结比特 0"]
    A --> D["位置2: 信息比特 d₁"]
    A --> E["位置3: 信息比特 d₂"]
    A --> F["位置4: 冻结比特 0"]
    A --> G["位置5: 信息比特 d₃"]
    A --> H["位置6: 信息比特 d₄"]
    A --> I["位置7: 信息比特 d₅"]

    B & C & D & E & F & G & H & I --> J["× 生成矩阵 G₈"]
    J --> K["编码输出 x₁...x₈"]

    style D fill:#2ecc71,color:#fff
    style E fill:#2ecc71,color:#fff
    style G fill:#2ecc71,color:#fff
    style H fill:#2ecc71,color:#fff
    style I fill:#2ecc71,color:#fff
    style B fill:#e74c3c,color:#fff
    style C fill:#e74c3c,color:#fff
    style F fill:#e74c3c,color:#fff

5.3 译码——连续消除(SC)与SC列表(SCL)

基本SC译码: 逐比特顺序译码。对冻结位直接设为已知值;对信息位,根据之前已译出的比特和接收信号计算LLR,做硬判决。

问题: SC译码是串行的——一个比特译错,后续所有比特都受影响(错误传播)。

解决方案——SCL(SC List)译码:

同时维护L条候选路径,保留"最有可能"的L条,最终选择CRC校验通过的那条。

参数 SC SCL (L=8)
复杂度 $O(N \log N)$ $O(L \cdot N \log N)$
性能 中等 接近最大似然译码
适用场景 理论分析 5G NR实际使用

5G NR使用CRC辅助的SCL译码(CA-Polar): 发送前在信息比特上附加CRC,译码时用CRC辅助路径选择——只有CRC校验通过的路径才被选为最终结果。这相当于给Polar译码加了一层"质量检验"。

5.4 5G NR中Polar码的具体应用

参数 下行控制信息DCI 上行控制信息UCI
最大码长 512 1024
CRC长度 24位(分布式) 6/11位
载荷大小 ≥12比特用CA-Polar ≥12比特用CA-Polar
小载荷(<12比特) PC-Polar PC-Polar

为什么5G控制信道不用LDPC?


六、LDPC vs Polar:一张图看清分工

对比维度 LDPC码 Polar码
5G用途 数据信道(PDSCH/PUSCH) 控制信道(DCI/UCI)
发明时间 1962年(Gallager) 2009年(Arıkan)
核心思想 稀疏校验矩阵 + 迭代消息传递 信道极化 + 可靠性排序
译码算法 置信传播(BP) SC列表(SCL)+ CRC辅助
强项 大块数据、高吞吐量 短包、高可靠性
弱项 短码性能差 长码复杂度高
并行性 高度可并行(适合硬件加速) 串行依赖(SCL列表缓解)
码率灵活性 灵活(支持速率匹配) 灵活(打孔/缩短/重复)
理论最优性 接近香农极限 严格达到对称容量

一句话总结: LDPC是"重卡"——拉得多、跑得快;Polar是"快递车"——小而精准、使命必达。


七、从原理到实战:工程师调测指南

7.1 FFT/IFFT相关调测场景

场景 可能的问题 排查思路
OFDM解调失败 FFT窗口同步偏差 检查CP范围内的定时同步
子载波间干扰(ICI) 采样钟偏移导致失正交 检查晶振精度、频偏补偿
频域信道估计异常 FFT点数配置不匹配 确认基带参数与协议配置一致
峰均比(PAPR)过高 IFFT输出信号幅度波动大 检查子载波分配、考虑PAPR降峰

7.2 信道编码相关调测场景

场景 可能的问题 排查思路
数据信道BLER高 LDPC迭代次数不够 增大最大迭代次数(默认通常5-8次)
DCI漏检率高 Polar码率匹配出错 检查聚合等级(AL)配置
HARQ重传无法合并 IR-HARQ冗余版本(RV)配置错误 确认RV序列正确
小包数据误码 可能误用了BG1而非BG2 检查传输块大小和码率

7.3 常见误解与陷阱

误解1:"FFT只是数学工具,不懂也能做通信工程"

→ FFT/IFFT是OFDM的基石,不理解它就无法理解为什么需要CP、为什么有采样钟要求、为什么子载波要正交。遇到频偏问题时,不懂FFT就无从排查。

误解2:"LDPC比Turbo码好在所有方面"

→ 在某些中等码长(500~1000比特)、中等码率场景下,成熟的Turbo码实现可能与LDPC性能相当。LDPC的优势主要体现在极大块长和极高吞吐场景。

误解3:"Polar码是华为发明的"

→ Polar码由学者Arıkan于2009年在国际学术期刊公开发表。华为在5G标准中大力推动Polar码的应用,并在此基础上有大量工程优化专利,但基础理论本身是学术界成果。


八、端到端信号处理链路——全景图

把本文所有内容串联起来,一个5G NR下行链路的完整信号处理流程如下:

graph TD
    A["MAC层PDU<br/>(传输块TB)"] --> B["CRC附加<br/>(24位)"]
    B --> C["码块分段<br/>+ 每段CRC"]
    C --> D["LDPC编码<br/>(BG1或BG2)"]
    D --> E["速率匹配<br/>(打孔/重复)"]
    E --> F["码块级联"]
    F --> G["加扰<br/>(小区级/UE级)"]
    G --> H["QAM调制<br/>(QPSK/16QAM/64QAM/256QAM)"]
    H --> I["层映射<br/>(MIMO层数)"]
    I --> J["预编码<br/>(波束赋形权重)"]
    J --> K["RE映射<br/>(资源网格)"]
    K --> L["IFFT<br/>(频域→时域)"]
    L --> M["加CP"]
    M --> N["DAC → 射频 → 天线"]

    style D fill:#ff6348,color:#fff
    style L fill:#ff9f43,color:#fff

控制信道路径的区别: 步骤D换成"Polar编码",且载荷通常很小(几十比特),不需要码块分段。


常见问题

Q1: FFT和DFT到底是什么关系?

A: FFT不是一种新的变换,它只是DFT的一种快速算法。两者计算的数学结果是相同的,区别仅在计算效率。好比从北京到上海,DFT是走国道(能到但慢),FFT是走高速公路(能到且快得多)。在通信工程中,我们说"做FFT"其实就是"用FFT算法来计算DFT"。

Q2: 为什么5G数据信道用LDPC而不用Polar码?

A: 两个原因。第一,LDPC在大块数据场景下译码性能更优,且高度可并行化,能支撑5G的Gbps级吞吐量。第二,Polar码在长码场景下的SCL译码复杂度随列表大小L线性增长,硬件实现代价太高。标准制定时的仿真数据也证实了LDPC在高码率、大块长下的优势。

Q3: LDPC码的"低密度"到底有多稀疏?

A: 在5G NR的QC-LDPC中,基图H矩阵的行重(每行中非零元素的个数)通常只有十几到二十几个,而矩阵的总列数可能高达数百甚至数千。这意味着99%以上的元素都是0。这种极端稀疏性使得置信传播译码的每轮迭代只需处理极少的连接,从而实现高速并行译码。

Q4: 工程上如何选择FFT点数?

A: FFT点数由系统的采样率和子载波间隔共同决定:$N_{FFT} = f_s / \Delta f$。5G NR中,基带参数集(numerology)确定了子载波间隔 $\Delta f = 15 \times 2^\mu$ kHz($\mu=0,1,2,3,4$),然后根据信道带宽确定采样率,进而确定FFT点数。实际配置中,3GPP已经为每种带宽和SCS组合定义了推荐参数,工程师不需要自己计算。

Q5: Polar码的"冻结比特"为什么不放随机值?

A: 冻结比特必须放已知固定值(通常为0),因为接收端译码器需要"已知这些比特是什么"才能正确译出信息比特。如果冻结比特是随机的且接收端不知道,译码器就无法区分"信息位上的变化"和"冻结位上的噪声"——就好比考试答案中混入了无法识别的题目,评分就乱了。


参考来源

  1. FFT算法全解析:通信与雷达信号处理的核心工具 — CSDN — FFT分治原理与蝶形运算详解
  2. 5G NR信道编码双雄:LDPC与Polar码关键角色与实战对比 — CSDN — LDPC与Polar码在5G中的分工与应用
  3. Understanding FFT and IFFT in OFDM — nxgconnect — OFDM系统中FFT/IFFT的角色解释
  4. Demystifying 5G Polar and LDPC Codes — arXiv:2502.11053 — 5G信道编码综述论文
  5. 移动通讯中使用的信道编解码技术—NR编解码LDPC和Polar概述 — 技术栈 — 信道编码技术演进综述

本文由「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学通信知识星球海报-扫码加入