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

DFT 与 FFT

从频域表达走向高效计算
有限长序列的频谱分析与快速傅里叶变换
6主节
14完整例题
4变换类型
NlogN复杂度

前置知识回顾

DFT 和 FFT 是把前面几节的理论变成可计算算法的关键。读这一节前,先把下面几件事放在手边:

  • DTFT:知道 $X(e^{j\omega})$$2\pi$ 周期的连续频谱。可回看 DTFT 笔记
  • 复指数正交性:不同频率槽位的复指数在一个周期内求和为 0,这是 DFT 能反变换的根本。
  • 卷积:知道线性卷积长度为 $L_x+L_h-1$,并理解卷积中"平移、翻转、相乘、求和"的操作。
  • 周期延拓:DFT 默认长度为 $N$ 的序列首尾相接,这会把普通卷积变成循环卷积。
Part 1 · 背景与动机
从 DTFT 到可计算的频谱分析

1.1 为什么有了 DTFT 还要 DFT

DTFT 给出的是连续频率函数 $X(e^{j\omega})$,理论上很完整,但计算机不能直接保存"连续函数"。实际实验和工程里,我们拿到的是有限长样本块,比如一段语音、一帧图像行信号、一段传感器记录。要分析这段有限数据的频率结构,就必须把连续频率轴离散化。

DFT 做的事情就是:在一个 $2\pi$ 周期内取 $N$ 个等间隔频率点,把频谱变成长度为 $N$ 的复数数组。这样一来,频域分析就能进入矩阵运算和程序实现。FFT 则进一步回答:这些 DFT 频点怎样才能高效算出来。

三者关系:DTFT 讲理论频谱,DFT 讲有限点频谱,FFT 讲快速计算 DFT 的算法。

DFT 的思想并非凭空出现。早在 1805 年,Gauss 就提出了将长度为 $N$ 的 DFT 递归分解为两个 $N/2$ 点 DFT 的算法——用于插值小行星 Pallas 和 Juno 的轨道。但 Gauss 没有分析算法的时间复杂度,且用新拉丁文发表,这个工作长期未被认知。直到 1965 年,Cooley 和 Tukey 在冷战核试验检测的实际需求驱动下重新发明了这个算法,并明确指出对 $N=2^k$ 的复杂度从 $O(N^2)$ 降至 $O(N\log N)$。此后 FFT 迅速普及,恰逢高速 ADC 的问世,直接推动了数字信号处理学科的诞生。

工程中的身影:你手机里的语音通话(GSM 编解码)、音乐软件的频谱可视化、WiFi(OFDM 调制解调)和 4G/5G 通信,底层都依赖 FFT 进行实时频域运算。

1.2 四大变换形式与时频对偶性

傅氏变换按时间和频率的连续/离散、有限/无限可以分为四种基本形式。它们之间遵守一条简单规律:

对偶性规律:时域里是离散的,频域里就必然是周期的;时域里是连续的,频域里就一定是非周期的。反过来也一样。

下表列出了四种变换及其时频域特征:

变换名称时域频域数学形式
FT(傅氏变换)连续、非周期连续、非周期$X(j\Omega)=\int_{-\infty}^{\infty}x(t)e^{-j\Omega t}dt$
FS(傅氏级数)连续、周期离散、非周期$X[k]=\frac1P\int_P x(t)e^{-j k\Omega_0 t}dt$
DTFT离散、非周期连续、周期($2\pi$$X(e^{j\omega})=\sum_{-\infty}^{\infty}x[n]e^{-j\omega n}$
DFT离散、有限长离散、有限长$X[k]=\sum_{0}^{N-1}x[n]e^{-j2\pi kn/N}$

表中 DTFT 时域离散、频域连续且周期——这对应了前面对偶性规律:离散化必然导致周期化。DFT 则在两个域上都做了离散化(等效于对 DTFT 的频域采样),所以时空两域都变成离散的有限长序列。

四种变换不是彼此替代的关系——FT 是最通用的数学工具,FS 用于周期连续信号,DTFT 是计算机能处理离散采样后的理论频谱,DFT 才是真正能让机器逐点算出来的有限维变换。

一张图理解:时域抽样(离散化)→ 频域周期折叠;频域抽样(离散化)→ 时域周期延拓。DFT 同时做了两件事:时域离散化(采样)+ 频域离散化(在一个周期内取 N 个点),所以时频两域都有限长。
PDF时频域对偶性示意p.6
正在渲染 PDF 第 6 页…
时频域对偶性示意(PDF 第 6 页) · 打开原文

1.3 对偶性证明

上面给出了定性结论:时域离散→频域周期,频域离散→时域周期。现在从数学定义出发,把这两条链各自严格推导一遍。

证明一:时域离散化 → 频域周期化

设时域信号 $x[n]$ 是离散序列($n$ 取整数),其 DTFT 为

$$X(e^{j\omega})=\sum_{n=-\infty}^{\infty}x[n]e^{-j\omega n}.$$

把自变量 $\omega$ 替换为 $\omega+2\pi$

$$X(e^{j(\omega+2\pi)})=\sum_{n=-\infty}^{\infty}x[n]e^{-j(\omega+2\pi)n} =\sum_{n=-\infty}^{\infty}x[n]\underbrace{e^{-j\omega n}}_{\text{原项}}\cdot\underbrace{e^{-j2\pi n}}_{=?}.$$

关键一步:因为 $n$ 是整数,所以

$$e^{-j2\pi n}=\cos(2\pi n)-j\sin(2\pi n)=1.$$

于是

$$X(e^{j(\omega+2\pi)})=\sum_{n=-\infty}^{\infty}x[n]e^{-j\omega n}=X(e^{j\omega}).$$

频域以 $2\pi$ 为周期。如果 $n$ 不是整数而是连续变量 $t$,那么 $e^{-j2\pi t}\neq 1$(除非 $t$ 恰好为整数),周期性不成立。所以周期性的根源在于 $n$ 的离散(整数)性

证明二:频域离散化 → 时域周期化

设频域信号 $X[k]$ 在等间隔频率点上取值($k$ 取整数),通过 IDFS/IDFT 恢复时域:

$$x[n]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]W_N^{-kn},\quad W_N=e^{-j2\pi/N}.$$

$n$ 替换为 $n+N$

$$x[n+N]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]W_N^{-k(n+N)} =\frac{1}{N}\sum_{k=0}^{N-1}X[k]\underbrace{W_N^{-kn}}_{\text{原项}}\cdot\underbrace{W_N^{-kN}}_{=?}.$$

计算第二项:

$$W_N^{-kN}=(e^{-j2\pi/N})^{-kN}=e^{j2\pi k}=1.$$

因为 $k$ 是整数,$e^{j2\pi k}=1$。所以

$$x[n+N]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]W_N^{-kn}=x[n].$$

时域以 $N$ 为周期。同样的逻辑:如果 $k$ 不是整数而是连续变量 $\omega$(对应 DTFT 的情况),$e^{j2\pi\omega}\neq 1$,时域就不会周期化。所以时域周期化的根源在于频域采样点 $k$ 的离散(整数)性

反向命题:连续 → 非周期

  • 时域连续 → 频域非周期:如果 $n$ 换成连续变量 $t$,则 $e^{-j2\pi t}$ 一般不等于 1,无法推出 $X(\Omega+2\pi)=X(\Omega)$。连续时间傅氏变换(FT)的频谱不具有周期性。
  • 频域连续 → 时域非周期:如果 $k$ 换成连续变量 $\omega$,则 $e^{j2\pi\omega}$ 一般不等于 1,无法推出 $x[n+N]=x[n]$。DTFT 对应的时域序列不具有周期性。
四条规则统一证明:离散↔周期是同一枚硬币的两面。证明核心只有一个——$e^{-j2\pi\times\text{整数}}=1$。只要自变量是整数,旋转因子就回到 1,另一个域就会出现周期性;只要自变量是连续的,旋转因子就回不到 1,另一个域就是非周期的。
变换时域变量频域变量谁离散→谁周期
FT$t$ 连续$\Omega$ 连续都连续 → 都非周期
FS$t$ 连续,$T$ 周期$k$ 离散时域周期 → 频域离散;频域离散又反推时域周期
DTFT$n$ 离散$\omega$ 连续$n$ 整数 → 频域 $2\pi$ 周期
DFS/DFT$n$ 离散$k$ 离散$n$ 整数 → 频域周期;$k$ 整数 → 时域周期
Part 2 · 定义
DFT 定义与数学基础

2.1 N 点 DFT 与 IDFT

长度为 $N$ 的序列 $x[0],x[1],\ldots,x[N-1]$ 的 DFT 定义为

$$X[k]=\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N},\quad k=0,1,\ldots,N-1.$$

$W_N=e^{-j2\pi/N}$,也可写成

$$X[k]=\sum_{n=0}^{N-1}x[n]W_N^{kn}.$$

反变换为 IDFT(逆离散傅里叶变换,Inverse Discrete Fourier Transform):

$$x[n]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]e^{j2\pi kn/N},\quad n=0,1,\ldots,N-1.$$
IDFT 做什么:DFT 把时域序列变成频域的 $N$ 个复数系数,IDFT 把这些系数变回时域序列。前面多一个 $1/N$ 归一化因子,是复指数正交性的直接结果(见下方 2.2 节)。两者互为逆运算,合在一起构成完整的时频域转换对。在 MATLAB 中分别用 fft()ifft() 实现。

$k$ 不是普通编号,而是频率槽位。它对应的角频率为 $\omega_k=2\pi k/N$。当采样频率为 $f_s$ 时,第 $k$ 个频点对应物理频率 $f_k=kf_s/N$,但超过 $N/2$ 的频点通常解释为负频率。

工程中的身影:音乐软件的均衡器柱状图就是对音频信号做 DFT 后各频点的幅度值。雷达回波分析中,DFT 将时域回波变换为距离-速度二维谱。

2.2 正交性:为什么 IDFT 能恢复序列

DFT 的核心代数基础是复指数正交性:

$$\sum_{n=0}^{N-1}e^{j2\pi (k-m)n/N}=\begin{cases}N,&k=m\pmod N,\\0,&k\ne m\pmod N.\end{cases}$$

如果两个频率槽位不同,它们在一个完整周期里的旋转方向会均匀绕圈,求和相互抵消;如果频率槽位相同,每一项都是 1,求和为 $N$。IDFT 前面的 $1/N$ 正是为了抵消这个归一化因子。

从线性代数角度看,DFT 是把 $x$ 投影到一组正交复指数基上;IDFT 是把这些基按系数加回来。

2.3 周期延拓:DFT 的隐含假设

DFT 公式看起来只是一个有限求和,但它背后隐含了一个至关重要的假设:你输入的 $N$ 点序列不是一个"有始有终"的有限信号,而是一个无限周期信号的一个周期

这个隐含假设叫周期延拓(periodic extension):

$$\tilde{x}[n] = x[n \bmod N] = x[((n))_N]$$

也就是说,DFT 在数学上处理的不是 $x[n]$,而是把 $x[0],x[1],\ldots,x[N-1]$ 首尾相接无限重复后得到的周期序列 $\tilde{x}[n]$。DFT 系数 $X[k]$ 本质上是这个周期序列的傅里叶级数系数。

为什么这个假设如此重要?因为周期延拓会改变信号的物理含义。同一个有限长序列,用不同的 $N$ 做 DFT,意味着不同的周期延拓方式,从而对应完全不同的周期信号。具体例子见本章末尾例题区。

2.4 周期 $N$ 与序列长度 $L$ 的关系

设原始序列 $x[n]$ 的实际长度为 $L$(即 $x[n]$$0\le n\le L-1$ 之外全为零),DFT 点数为 $N$$N$$L$ 的相对大小直接决定了周期延拓后信号的物理含义:

情况周期延拓效果频谱含义典型场景
$N=L$序列恰好填满一个周期,首尾相接DFT 是 DTFT 的 $L$ 个等间隔采样默认情况,最"紧凑"的延拓
$N>L$(补零)序列后补 $N-L$ 个零再延拓,周期变长频域采样更密,看到更多 DTFT 细节;但不增加信息量,不提高真实频率分辨率栅栏效应减轻,频谱可视化更平滑
$N<L$(截断)只取前 $N$ 个点做延拓,后面的数据被丢弃时域信息丢失,频谱失真;相当于先加矩形窗再做 DFT通常应避免,除非有意截断

核心原则:

  • 补零($N>L$)改变的是频域采样密度,不改变 DTFT 本身。它让栅栏更密,看到更多细节,但主瓣宽度(真实频率分辨率)由原始数据长度 $L$ 决定,补零无法缩窄主瓣。
  • 截断($N<L$)是真正的信息丢失。被丢弃的 $L-N$ 个样本永远消失了,频谱会产生额外的泄漏和失真。
  • 周期延拓的"边界效应"取决于 $N$ 与信号实际周期的关系。如果信号本身是周期性的且 $N$ 恰好是整数个周期,边界处连续,频谱干净;否则边界不连续会产生频谱泄漏。

周期延拓的三个直接后果:

  1. 循环移位:DFT 中的"移位"不是普通平移,而是循环移位——从右边移出的元素会从左边绕回来。因为周期延拓后没有"边界",$x[N]=x[0]$
  2. 循环卷积:DFT 域乘法对应的是循环卷积而非线性卷积。线性卷积的"尾巴"会在周期边界处折回,产生混叠。
  3. 频谱泄漏与栅栏效应:周期延拓在边界处可能产生不连续(除非信号恰好是整数个周期),这种不连续在频域表现为频谱泄漏。同时 DFT 只在离散频点采样,可能"漏掉"重要的频谱特征。
一句话总结:每当你调用 fft(x) 时,你实际上在说:"把 $x$ 当作一个周期信号的一个周期,求它的傅里叶级数。"理解这一点,DFT 的所有"奇怪行为"——循环卷积、频谱泄漏、补零效应——都变得自然了。

2.5 综合例题:矩形序列 $R_4(n)$ 的 DFT 与幅频特性

题目:$x(n)=R_4(n)=[1,1,1,1]$,分别求 4 点 DFT 和 8 点 DFT,并分析它们与 DTFT 幅频曲线的关系。

目标:理解 DFT 是 DTFT 的频域采样,不同点数对应不同采样密度,揭示栅栏效应与周期延拓的影响。

Step 0: DTFT 幅频特性。

$R_4(n)$ 的 DTFT 为

$$X(e^{j\omega})=\sum_{n=0}^{3}e^{-j\omega n}=\frac{1-e^{-j4\omega}}{1-e^{-j\omega}}=e^{-j3\omega/2}\cdot\frac{\sin(2\omega)}{\sin(\omega/2)}$$

幅度响应为经典的Dirichlet 核(数字 sinc)形状:

$$|X(e^{j\omega})|=\left|\frac{\sin(2\omega)}{\sin(\omega/2)}\right|$$

$\omega=0$ 处主瓣峰值为 $4$,零点位于 $\omega=\pi/2,\;\pi,\;3\pi/2$,零点之间有旁瓣。


Step 1: 4 点 DFT。

$N=4$$W_4=e^{-j2\pi/4}=-j$,采样频率 $\omega_k=2\pi k/4$

$$X_4(k)=\sum_{n=0}^{3}1\cdot W_4^{kn},\quad k=0,1,2,3$$
  • $k=0$$X_4(0)=1+1+1+1=4$
  • $k=1$$X_4(1)=1+(-j)+(-1)+j=0$
  • $k=2$$X_4(2)=1+(-1)+1+(-1)=0$
  • $k=3$$X_4(3)=1+j+(-1)+(-j)=0$
$$X_4(k)=[4,\; 0,\; 0,\; 0],\qquad |X_4(k)|=[4,\; 0,\; 0,\; 0]$$

4 点采样位置与 DTFT 的对应:

$k$$\omega_k$$|X(e^{j\omega_k})|$$|X_4(k)|$采样位置
0$0$$4$$4$主瓣峰值
1$\pi/2$$0$$0$第一个零点
2$\pi$$0$$0$第二个零点
3$3\pi/2$$0$$0$第三个零点

4 点 DFT 的采样间隔 $\Delta\omega=\pi/2$ 恰好等于 DTFT 零点间距,所有采样点恰好落在零点或主瓣峰值上,旁瓣完全被"漏掉"。

R4(n) 的 4 点 DFT 幅频特性
$R_4(n)$ 的 4 点 DFT 幅频特性:采样间隔 $\Delta\omega=\pi/2$,4 个采样点恰好全部落在 DTFT 的零点或主瓣峰值上。DTFT 连续幅频曲线(红色包络)的旁瓣被完全"漏掉",这是栅栏效应的典型表现。

Step 2: 8 点 DFT(末尾补 4 个零)。

$y(n)=[1,1,1,1,0,0,0,0]$$N=8$$W_8=e^{-j2\pi/8}=e^{-j\pi/4}$,采样频率 $\omega_k=2\pi k/8=\pi k/4$

$$X_8(k)=\sum_{n=0}^{3}1\cdot W_8^{kn}=\sum_{n=0}^{3}e^{-j\pi kn/4},\quad k=0,1,\ldots,7$$

用几何级数公式 $X_8(k)=\dfrac{1-e^{-j\pi k}}{1-e^{-j\pi k/4}}$

  • $k=0$$X_8(0)=4$
  • $k=1$$X_8(1)=\dfrac{2}{1-e^{-j\pi/4}}$$|X_8(1)|=\sqrt{4+2\sqrt{2}}\approx 2.613$
  • $k=2$$X_8(2)=1+(-j)+(-1)+j=0$(恰好落在 DTFT 零点 $\omega=\pi/2$
  • $k=3$$X_8(3)=\dfrac{2}{1-e^{-j3\pi/4}}$$|X_8(3)|=\sqrt{4-2\sqrt{2}}\approx 1.082$
  • $k=4$$X_8(4)=0$(落在 DTFT 零点 $\omega=\pi$
  • $k=5$:共轭对称,$|X_8(5)|=|X_8(3)|\approx 1.082$
  • $k=6$$X_8(6)=0$(落在 DTFT 零点 $\omega=3\pi/2$
  • $k=7$:共轭对称,$|X_8(7)|=|X_8(1)|\approx 2.613$
$$|X_8(k)|=[4,\; 2.613,\; 0,\; 1.082,\; 0,\; 1.082,\; 0,\; 2.613]$$

8 点采样位置与 DTFT 的对应:

$k$$\omega_k$$|X(e^{j\omega_k})|$$|X_8(k)|$采样位置
0$0$$4$$4$主瓣峰值
1$\pi/4$$\approx 2.613$$\approx 2.613$主瓣下降沿
2$\pi/2$$0$$0$第一个零点
3$3\pi/4$$\approx 1.082$$\approx 1.082$第一旁瓣
4$\pi$$0$$0$第二个零点
5$5\pi/4$$\approx 1.082$$\approx 1.082$对称旁瓣
6$3\pi/2$$0$$0$第三个零点
7$7\pi/4$$\approx 2.613$$\approx 2.613$对称主瓣
R4(n) 的 8 点 DFT 幅频特性
$R_4(n)$ 的 8 点 DFT 幅频特性:采样间隔 $\Delta\omega=\pi/4$,8 个采样点中 $k=1,3,5,7$ 落在了 4 点 DFT "漏掉"的旁瓣区域,揭示了 DTFT 的真实轮廓。$k=2,4,6$ 仍落在零点上。补零让栅栏更密,看到了更多细节。

Step 3: 4 点 vs 8 点 DFT 的核心区别。

对比维度4 点 DFT8 点 DFT
采样间隔$\Delta\omega=\pi/2$$\Delta\omega=\pi/4$(加密一倍)
采样点位置$0,\;\pi/2,\;\pi,\;3\pi/2$$0,\;\pi/4,\;\pi/2,\;3\pi/4,\;\pi,\;5\pi/4,\;3\pi/2,\;7\pi/4$
幅度谱$[4,0,0,0]$$[4,\;2.6,\;0,\;1.1,\;0,\;1.1,\;0,\;2.6]$
看到的频谱特征只有 DC 分量,其余为零看到主瓣下降沿和旁瓣($k=1,3,5,7$),同时 $k=2,4,6$ 仍落在零点
栅栏效应严重——采样点恰好全落在零点上减轻——中间采样点揭示了旁瓣
频率分辨率粗($\pi/2$细($\pi/4$
关键理解:8 点 DFT 并没有增加任何新的信号信息(后 4 个点是补零),但它让频域采样更密,从而"看到"了 4 点 DFT 遗漏的旁瓣结构($k=1,3,5,7$ 处的非零值)。这就是栅栏效应的直观体现——4 点 DFT 像透过稀疏的栅栏看风景,采样点恰好全落在零点上;8 点 DFT 栅栏更密,中间的采样点落在了主瓣和旁瓣上,揭示了频谱的真实轮廓。但补零不会改变 DTFT 本身,也不会提高真正的频率分辨率(主瓣宽度由原始 4 点数据决定),只是让已有的频谱轮廓更清晰。

Step 4: 周期延拓视角。为什么 4 点和 8 点 DFT 结果不同?回顾本节 2.3 和 2.4 的讨论:DFT 在数学上等价于先把有限长序列周期延拓成周期序列,再求 DFS 系数。4 点延拓得到全 1 常数序列(只有 DC),8 点延拓得到周期方波(含奇次谐波)。同一个 $[1,1,1,1]$,延拓周期不同,频谱自然不同。

例题区

例:$R_4(n)=[1,1,1,1]$ 的两种周期延拓

4 点延拓:$\tilde{x}_4[n] = [\ldots, 1,1,1,1,\; 1,1,1,1, \ldots]$ → 全 1 常数序列 → 只有 DC → $X_4(k)=[4,0,0,0]$

8 点延拓(先补零到 8 点):$\tilde{x}_8[n] = [\ldots, 1,1,1,1,0,0,0,0,\; 1,1,1,1,0,0,0,0, \ldots]$ → 周期方波(占空比 50%)→ 含奇次谐波 → $X_8(k)=[4,\;2.6,\;0,\;1.1,\;0,\;1.1,\;0,\;2.6]$

同一个 $[1,1,1,1]$,延拓周期不同,得到的周期信号完全不同,频谱自然不同。

例题 1:手算 4 点 DFT

题目:$x[n]=[1,2,0,0]$,求 4 点 DFT。

目标:熟悉 DFT 定义中每个频点的计算。

  1. 写出 4 点旋转因子:$W_4=e^{-j2\pi/4}=e^{-j\pi/2}=-j$
  2. 逐点计算:
    $$X[k]=\sum_{n=0}^{3}x[n]W_4^{kn}=1+2W_4^k.$$
  3. 代入 $k=0,1,2,3$
    $$X[0]=3,$$
    $$X[1]=1+2(-j)=1-2j,$$
    $$X[2]=1+2(-1)=-1,$$
    $$X[3]=1+2(j)=1+2j.$$

答案:$X=[3,1-2j,-1,1+2j]$

易错点:$W_N^{kn}$ 的指数是 $kn$,不是 $k+n$。实序列的 DFT 满足共轭对称,所以 $X[3]=X^*[1]$,这也可用于检查答案。

例题 2:求 $a^n R_N(n)$$N$ 点 DFT

题目:$x(n)=a^n R_N(n)$,求 $N$ 点 DFT。

$R_N(n)$矩形窗序列(rectangular window),定义为 $R_N(n)=1$$0\le n\le N-1$),其余为 0。所以 $a^n R_N(n)$ 就是 $a^n$ 只取前 $N$ 个点,是一个长度为 $N$ 的有限长序列。在程佩青教材中,$R_N$ 用于显式标记截断操作。

目标:熟悉几何级数在 DFT 中的处理。

  1. 写出 DFT 定义:
    $$X(k)=\sum_{n=0}^{N-1}a^n W_N^{kn}=\sum_{n=0}^{N-1}(aW_N^k)^n.$$
  2. $k=0$ 时:$W_N^0=1$,故 $X(0)=\sum_{n=0}^{N-1}a^n=\frac{1-a^N}{1-a}$$a\neq 1$ 时)。
  3. $k=1,\ldots,N-1$ 时:几何级数求和,利用 $W_N^{kN}=1$
    $$X(k)=\frac{1-(aW_N^k)^N}{1-aW_N^k}=\frac{1-a^N}{1-aW_N^k}.$$

答案:$X(k)=\frac{1-a^N}{1-aW_N^k}$$k=0,1,\ldots,N-1$

易错点:$W_N^{kn}$ 的指数是乘积 $kn$。当 $a=1$ 时,$X(k)=N\delta(k)$

例题 3:求 $\delta(n-n_0)$$N$ 点 DFT

题目:$x(n)=\delta(n-n_0)$$0<n_0<N$,求 $N$ 点 DFT。

目标:理解冲激序列的 DFT 就是旋转因子本身。

  1. 代入定义:$X(k)=\sum_{n=0}^{N-1}\delta(n-n_0)W_N^{kn}=W_N^{kn_0}$
  2. 物理含义:时域延迟 $n_0$ 对应频域乘以 $W_N^{kn_0}=e^{-j2\pi kn_0/N}$,这是 DFT 时移性质的特例。

答案:$X(k)=W_N^{kn_0}=e^{-j2\pi kn_0/N}$

例题 3.1:数值计算 $\delta(n-2)$ 的 5 点 DFT

题目:已知 $x(n)=\delta(n-2)$,求其 5 点 DFT。

解:5 点 DFT 定义为

$$X(k)=\sum_{n=0}^{4}x(n)W_5^{kn},\quad W_5=e^{-j2\pi/5}.$$

因为 $x(n)=\delta(n-2)$ 只有 $n=2$ 处为 1,其余为 0,所以

$$X(k)=W_5^{2k}=e^{-j4\pi k/5},\quad k=0,1,2,3,4.$$

逐点写出:

$$\begin{aligned} X(0) &= 1,\\ X(1) &= e^{-j4\pi/5},\\ X(2) &= e^{-j8\pi/5}=e^{j2\pi/5},\\ X(3) &= e^{-j12\pi/5}=e^{-j2\pi/5},\\ X(4) &= e^{-j16\pi/5}=e^{j4\pi/5}. \end{aligned}$$

物理解释:时域冲激右移 2 个样本,频域各频点获得与频率 $k$ 成正比的线性相位 $-4\pi k/5$,幅度保持为 1。这正好体现了 DFT 的时移性质:延迟 $n_0$ 对应频域乘以 $W_N^{kn_0}$

例题 4:余弦序列的 DFT

题目:$x(n)=\cos\left(\dfrac{\pi n}{6}\right)$$n=0,1,\ldots,11$,求 12 点 DFT。

目标:理解纯余弦信号的 DFT 是两根谱线,掌握用 Euler 公式和正交性快速求解。

  1. Euler 展开:
    $$x(n)=\cos\left(\frac{\pi n}{6}\right)=\frac{1}{2}\left(e^{j\pi n/6}+e^{-j\pi n/6}\right)$$
  2. 写成旋转因子形式:$N=12$$W_{12}=e^{-j2\pi/12}=e^{-j\pi/6}$,所以
    $$e^{j\pi n/6}=e^{j2\pi n/12}=W_{12}^{-n},\qquad e^{-j\pi n/6}=W_{12}^{n}$$

    $x(n)=\dfrac{1}{2}(W_{12}^{-n}+W_{12}^{n})$

  3. 利用正交性:DFT 定义 $X(k)=\sum_{n=0}^{N-1}x(n)W_N^{kn}$,而
    $$\sum_{n=0}^{N-1}W_N^{mn}=\begin{cases}N,&m\equiv 0\pmod N,\\0,&m\not\equiv 0\pmod N.\end{cases}$$

    所以 $W_{12}^{-n}$ 的 DFT 是 $12\cdot\delta(k-1)$(频率槽位 $m=-1\equiv 11\pmod{12}$),$W_{12}^{n}$ 的 DFT 是 $12\cdot\delta(k+1)=12\cdot\delta(k-11)$(频率槽位 $m=1$)。

答案:

$$X(k)=\frac{1}{2}\bigl[12\cdot\delta(k-1)+12\cdot\delta(k-11)\bigr]=6\cdot\delta(k-1)+6\cdot\delta(k-11)$$

$X(k)$ 只在 $k=1$$k=11$ 处非零,值均为 6:

$$X(k)=[0,\;6,\;0,\;0,\;0,\;0,\;0,\;0,\;0,\;0,\;0,\;6]$$
物理含义:余弦信号 $\cos(\pi n/6)$ 的频率恰好是 $\omega=\pi/6=2\pi/12$,对应 12 点 DFT 的 $k=1$ 槽位。DFT 在 $k=1$$k=11$(共轭对称的负频率位置)各有一根谱线,幅度为 $N/2=6$。这就是"整周期采样"的理想情况——频谱干净,无泄漏。
Part 3 · 性质
DFT 的核心性质

DFT 的所有性质都根源于一个事实:DFT 隐含了周期延拓假设(见 Part 2 的 2.3 节)。理解了这一点,下面的每条性质都变得自然。

3.1 线性性质

DFT 是线性变换,满足叠加原理:

$$\text{DFT}\{a x_1[n] + b x_2[n]\} = a X_1[k] + b X_2[k]$$

这是 DFT 定义中求和运算线性的直接结果。做题时常用它把复杂序列拆成简单序列分别求 DFT 再叠加。

3.2 循环移位性质

时域循环移位:

$$\text{DFT}\{x[(n-m)\bmod N]\} = W_N^{km} X[k] = e^{-j2\pi km/N} X[k]$$

时域循环移位 $m$ 位,频域只产生相位旋转,幅度谱不变。注意这里的移位是循环移位——从右边移出的元素会从左边绕回来,因为周期延拓后没有"边界"。

频域循环移位(对偶性质):

$$\text{DFT}\{W_N^{-ln} x[n]\} = X[(k-l)\bmod N]$$

时域乘以复指数 $e^{j2\pi ln/N}$,频域循环移位 $l$ 位。这是频谱搬移的数学基础。

3.3 循环卷积定理

在 DTFT 中,时域线性卷积对应频域乘法。但在 DFT 中,因为序列被默认周期延拓,频域逐点乘法对应的是长度为 $N$ 的循环卷积:

$$\text{DFT}\{x[n] \circledast_N h[n]\} = X[k] \cdot H[k]$$

其中循环卷积定义为:

$$x[n] \circledast_N h[n] = \sum_{m=0}^{N-1} x[m]\, h[(n-m)\bmod N]$$

这里的 $\bmod N$ 表示索引超出边界后会绕回前面。普通线性卷积的尾巴如果超过 $N-1$,在循环卷积里就会折叠到开头,这叫时域混叠循环混叠

卷积类型参与对象核心公式与 DFT 的关系
线性卷积任意有限/无限序列 $x[n],h[n]$$y_l[n]=\sum_{m=-\infty}^{\infty}x[m]h[n-m]$DTFT 域相乘
周期卷积周期序列 $\tilde{x}[n],\tilde{h}[n]$(周期 $N$$\tilde{y}[n]=\sum_{m=0}^{N-1}\tilde{x}[m]\tilde{h}[n-m]$DFS 域相乘
圆周卷积有限长序列 $x[n],h[n]$$0\le n\le N-1$$y_c[n]=\sum_{m=0}^{N-1}x[m]h[(n-m)\bmod N]$DFT 域相乘
三者关系速查:圆周卷积 = 周期卷积取一个主值周期;周期卷积 = 线性卷积以 $N$ 为周期延拓的叠加。DFT 的隐含假设是周期延拓,所以频域乘法自然对应圆周卷积。
用 DFT 做线性卷积的规则:如果 $x[n]$ 长度为 $L_x$$h[n]$ 长度为 $L_h$,至少零填充到 $N\ge L_x+L_h-1$,循环回绕才不会污染有效结果。

循环卷积和线性卷积之间有一个严谨的数学关系:长度为 $L$ 的循环卷积等于线性卷积的周期延拓再截取。设 $x_1[n]$ 长度为 $L$$x_2[n]$ 长度为任意长,记线性卷积为 $y_l[n]=x_1[n]*x_2[n]$,则循环卷积

$$\tilde{y}[n]=\sum_{m=0}^{L-1}x_1[m]x_2[(n-m)\bmod L]$$

可以展开为

$$\tilde{y}[n]=\sum_{r=-\infty}^{\infty}y_l[n+rL].$$

证明的核心步骤是:把 $x_2[(n-m)\bmod L]$ 写成 $\sum_{r=-\infty}^{\infty}x_2[n+rL-m]$(周期延拓的求和),然后交换两个求和顺序。这个关系说明,循环卷积的每个输出点 $\tilde{y}[n]$ 都包含了线性卷积在 $n, n\pm L, n\pm 2L,\ldots$ 处所有值的叠加。因此当 $L$ 小于线性卷积长度时,不同 $r$ 的项会互相重叠——这就是时域混叠。

工程中的身影:实时音频降噪和均衡器使用 Overlap-Add 或 Overlap-Save 方法——把长音频切成小块,每块做 DFT → 频域乘滤波器响应 → IDFT,然后重叠拼接。这比时域直接卷积快得多,是所有数字音频工作站(DAW)的底层机制。
PDF周期卷积推导p.80
正在渲染 PDF 第 80 页…
周期卷积推导(PDF 第 80 页) · 打开原文

对偶性质(时域相乘):

$$\text{DFT}\{x[n] \cdot h[n]\} = \frac{1}{N} X[k] \circledast_N H[k]$$

时域相乘对应频域循环卷积(带 $1/N$ 归一化)。这是加窗分析的数学基础——时域加窗等于频域与窗函数频谱做循环卷积,导致频谱泄漏。

3.4 复共轭与共轭对称性

复共轭的 DFT:

$$\text{DFT}\{x^*[n]\} = X^*[N-k] = X^*[-k \bmod N]$$

推导:$\sum_{n=0}^{N-1} x^*[n] W_N^{kn} = \left(\sum_{n=0}^{N-1} x[n] W_N^{-kn}\right)^* = X^*[-k]$。注意 $-k \bmod N = N-k$$k \ne 0$ 时)。

实序列的共轭对称性:$x[n]$ 为实序列时,

$$X[N-k] = X^*[k], \quad k=0,1,\ldots,N-1$$

证明:因为 $x[n]$ 是实序列,$x^*[n]=x[n]$,所以 $\text{DFT}\{x^*[n]\}=\text{DFT}\{x[n]\}=X[k]$。另一方面,由复共轭性质 $\text{DFT}\{x^*[n]\}=X^*[N-k]$,因此

$$X[k]=X^*[N-k]$$

两边取共轭即得 $X[N-k]=X^*[k]$

直接推导:也可以从 DFT 定义直接验证。由

$$X[N-k]=\sum_{n=0}^{N-1}x[n]W_N^{(N-k)n}=\sum_{n=0}^{N-1}x[n]W_N^{Nn}W_N^{-kn}$$

$W_N^{Nn}=e^{-j\frac{2\pi}{N}Nn}=e^{-j2\pi n}=1$,所以

$$X[N-k]=\sum_{n=0}^{N-1}x[n]W_N^{-kn}=\left(\sum_{n=0}^{N-1}x[n]W_N^{kn}\right)^*=X^*[k].$$

这意味着

  • 幅度谱偶对称:$|X[N-k]| = |X[k]|$
  • 相位谱奇对称:$\arg X[N-k] = -\arg X[k]$
  • 实部偶对称,虚部奇对称

特殊点:$X[0]$$X[N/2]$$N$ 为偶数时)必为实数。

实用价值:实序列的 DFT 只需要计算前 $N/2+1$ 个点,后半部分由对称性自动确定。这也是检查答案的重要工具。具体例题见本章末尾例题区。
为什么实序列必然产生共轭对称频谱?三种直觉

直觉 1:$W_N$ 本身是共轭配对的

DFT 公式里的复指数 $W_N^k = e^{-j2\pi k/N}$,它和 $W_N^{-k}=W_N^{N-k}$ 是一对共轭。所以 DFT 天然就在"正负频率成对出现"的框架上工作。实序列只能产生实系数组合,这就要求正负频率分量互为共轭,以保证输出为实数。

直觉 2:三角函数的奇偶性

$W_N^{kn}$ 拆为 $\cos(\omega_k n) - j\sin(\omega_k n)$。展开 $X[k]$

$$X[k] = \underbrace{\sum_n x[n]\cos(\omega_k n)}_{\text{实部,对 \omega_k 偶}} - j\underbrace{\sum_n x[n]\sin(\omega_k n)}_{\text{虚部,对 \omega_k 奇}}$$

正频率 $\omega_k$ 和负频率 $-\omega_k = \omega_{N-k}$ 互为共轭($\cos$ 是偶函数、$\sin$ 是奇函数),所以 $X[N-k]$$X[k]$ 互为共轭。

直觉 3:实信号的物理本质

任何可测量的物理量(电压、压力、温度)都是实数。频谱里的复数表示中,虚部对应"90° 相移的无功分量"。如果正负频率的虚部不互为相反数,输出就会带虚部——违反实信号定义。所以实信号的频谱必须共轭对称,这是物理强制的结果,不是 DFT 的数学巧合

实偶序列 $X[k]$ 必为实偶函数;实奇序列 $X[k]$ 必为纯虚奇函数。这是后续"频谱"和"对称性"章节的基石。

3.5 Parseval 定理

时域能量等于频域能量(差归一化因子):

$$\sum_{n=0}^{N-1}|x[n]|^2 = \frac{1}{N}\sum_{k=0}^{N-1}|X[k]|^2$$

证明:从左边出发,将 $|x[n]|^2$ 拆为 $x[n]\,x^*[n]$

$$\sum_{n=0}^{N-1}|x[n]|^2 = \sum_{n=0}^{N-1}x[n]\,x^*[n].$$

将 IDFT 公式代入其中一个 $x[n]$

$$x[n] = \frac{1}{N}\sum_{k=0}^{N-1}X[k]\,W_N^{-kn},$$

得:

$$\begin{aligned} \sum_{n=0}^{N-1}|x[n]|^2 &= \sum_{n=0}^{N-1}\left[\frac{1}{N}\sum_{k=0}^{N-1}X[k]\,W_N^{-kn}\right]x^*[n] \\ &= \frac{1}{N}\sum_{k=0}^{N-1}X[k]\underbrace{\sum_{n=0}^{N-1}x^*[n]\,W_N^{-kn}}_{\text{(*)}}. \end{aligned}$$

考察 (*) 项:

$$\begin{aligned} \sum_{n=0}^{N-1}x^*[n]\,W_N^{-kn} &= \left[\sum_{n=0}^{N-1}x[n]\,\bigl(W_N^{-kn}\bigr)^*\right]^* \\ &= \left[\sum_{n=0}^{N-1}x[n]\,W_N^{kn}\right]^* \\ &= X^*(k). \end{aligned}$$

代回原式:

$$\sum_{n=0}^{N-1}|x[n]|^2 = \frac{1}{N}\sum_{k=0}^{N-1}X[k]\,X^*(k) = \frac{1}{N}\sum_{k=0}^{N-1}|X[k]|^2.$$

证毕。

核心思路:$|x[n]|^2$ 拆成 $x[n]x^*[n]$,用 IDFT 替换其中一个 $x[n]$,交换求和顺序后,内层求和恰好是 $X^*(k)$。物理意义是能量守恒在离散频域中的体现。

工程中的身影:通信系统中的能量检测:接收端计算信号功率时,可以在频域用帕塞瓦定理验证时域功率计算的正确性。

3.6 频谱泄漏与窗函数

频谱泄漏的本质不是信号的问题,而是边界假设的问题。DFT 隐含假设输入是周期信号的单个周期。当信号实际频率 $f_0$ 不等于任何 DFT 分析频率(即 $f_0 \neq k \cdot f_s / N$)时,信号周期延拓在边界处产生不连续性。为了拟合这个尖锐跳变,DFT 被迫在所有频率上分配能量。

从数学上看,对无限长信号做 $N$ 点 DFT 等价于先加矩形窗截断再做 DFT。时域相乘对应频域循环卷积,矩形窗的频谱(Dirichlet 核)与信号真实频谱卷积后,能量从主瓣"泄漏"到旁瓣。

减少泄漏的方法是使用非矩形窗(Hamming、Hanning、Blackman 等),它们以加宽主瓣为代价压低旁瓣:

窗函数主瓣宽度旁瓣峰值适用场景
矩形窗$4\pi/N$$-13$ dB频率分辨率优先
Hanning$8\pi/N$$-31$ dB通用频谱分析
Hamming$8\pi/N$$-41$ dB需要低旁瓣
Blackman$12\pi/N$$-57$ dB旁瓣抑制优先
核心权衡:窗函数设计永远在"主瓣宽度"(频率分辨率)和"旁瓣高度"(泄漏抑制)之间取舍。没有完美的窗,只有适合场景的窗。

3.7 性质速查表

性质时域DFT 域用途
线性$ax[n]+by[n]$$aX[k]+bY[k]$拆分序列
循环时移$x[(n-n_0)\bmod N]$$e^{-j2\pi kn_0/N}X[k]$处理延迟
循环频移$e^{j2\pi k_0n/N}x[n]$$X[(k-k_0)\bmod N]$搬移频谱
循环卷积$x[n]\circledast_N h[n]$$X[k]H[k]$快速滤波
时域相乘$x[n]h[n]$$\frac{1}{N}X[k]\circledast_N H[k]$窗函数分析
复共轭$x^*[n]$$X^*[N-k]$处理复信号
共轭对称$x[n]$ 为实数$X[N-k]=X^*[k]$减少计算和检查结果
Parseval$\sum|x[n]|^2$$\frac1N\sum|X[k]|^2$能量核对

3.8 Parseval 定理例题

Parseval 定理的证明细节见本章末尾例题区。配套的工程实例:

工程中的身影:通信系统中的能量检测:接收端计算信号功率时,可以在频域用帕塞瓦定理验证时域功率计算的正确性,也可以直接在频域做子载波功率分配。

3.9 复习速查表

问题核心公式关键判断常见误区
求 DFT$X[k]=\sum x[n]e^{-j2\pi kn/N}$长度 $N$ 是否明确旋转因子符号写反
求 IDFT$x[n]=\frac1N\sum X[k]e^{j2\pi kn/N}$归一化因子位置漏掉 $1/N$
循环卷积$\sum_m x[m]h[(n-m)\bmod N]$是否发生回绕当成线性卷积
线性卷积$N\ge L_x+L_h-1$是否足够零填充补零长度不够
FFT 复杂度$O(N\log_2N)$$N$ 是否适合分解以为 FFT 是新变换
实序列频谱$X[N-k]=X^*[k]$共轭对称误把后半频谱当新信息
频谱泄漏选 Hann 窗频率是否对齐 bin以为加窗能提高分辨率
零填充$\Delta_f = f_s/N$ 不变真正分辨率由信号时长决定以为补零能提高分辨率

例题区

例题:复共轭的 DFT 数值计算

题目:已知 $x(n)$ 的 4 点 DFT 为 $X(k)=\left\{1,\; \dfrac{1}{2}+j,\; -2,\; 1+j\right\}$,求 $x^*(n)$ 的 4 点 DFT。

解:由复共轭性质 $\text{DFT}\{x^*(n)\} = X^*(N-k)$$N=4$

  • $k=0$$X^*(4) = X^*(0) = 1^* = 1$
  • $k=1$$X^*(3) = (1+j)^* = 1-j$
  • $k=2$$X^*(2) = (-2)^* = -2$
  • $k=3$$X^*(1) = \left(\dfrac{1}{2}+j\right)^* = \dfrac{1}{2}-j$
$$\text{DFT}\{x^*(n)\} = X^*(N-k) = \left\{1,\; 1-j,\; -2,\; \dfrac{1}{2}-j\right\}$$

例题:实序列共轭对称性求奇数点 DFT

题目:已知 $N=7$ 点实序列的 DFT 偶数点的值如下,求 DFT 奇数点的值:

$$X(0)=4.8,\quad X(2)=3.1+j2.5,\quad X(4)=2.4+j4.2,\quad X(6)=5.2+j3.7$$

解:$x(n)$ 为实序列,由共轭对称性 $X(k) = X^*(N-k)$$N=7$

  • $X(1) = X^*(7-1) = X^*(6) = (5.2+j3.7)^* = 5.2-j3.7$
  • $X(3) = X^*(7-3) = X^*(4) = (2.4+j4.2)^* = 2.4-j4.2$
  • $X(5) = X^*(7-5) = X^*(2) = (3.1+j2.5)^* = 3.1-j2.5$
关键:$N=7$ 为奇数,$X(0)$ 是 DC 分量(实数),偶数点 $X(2),X(4),X(6)$ 与奇数点 $X(1),X(3),X(5)$ 一一配对共轭。实序列只需知道一半频点,另一半由对称性直接写出。

例题 4:为什么线性卷积需要零填充

题目:$x=[1,1,1]$$h=[1,1]$。比较 3 点循环卷积和线性卷积。

目标:看清楚循环混叠是怎么发生的。

  1. 线性卷积:
    $$x*h=[1,2,2,1].$$

    长度为 $3+2-1=4$

  2. 若只做 3 点循环卷积:线性卷积的第 4 个样本会折回第 1 个位置,所以得到
    $$y_3=[1+1,2,2]=[2,2,2].$$
  3. 正确零填充:把两序列补到 $N\ge4$,例如 $x=[1,1,1,0]$$h=[1,1,0,0]$,再做 4 点循环卷积,就得到线性卷积 $[1,2,2,1]$

答案:3 点循环卷积为 $[2,2,2]$,不是线性卷积;零填充到 4 点后才得到正确线性卷积。

易错点:"DFT 乘法实现卷积"这句话默认是循环卷积。要实现线性卷积必须先补零。

例题 5:15 点 DFT 乘积与线性卷积的关系

题目:$x(n)$ 长度为 $6$$0\le n\le 5$),$y(n)$ 长度为 $15$$0\le n\le 14$)。各作 15 点 DFT 相乘后 IDFT,得 $f(n)$,问 $f(n)$ 的哪些点对应线性卷积 $x(n)*y(n)$

目标:理解循环卷积与线性卷积的混叠关系。

  1. 线性卷积长度:$6+15-1=20$
  2. 15 点循环卷积:$f(n)=\sum_{r=-\infty}^{\infty}[x*y](n+15r)$$n=0,\ldots,14$
  3. 混叠分析:$n+15\ge 20$$n\ge 5$ 时成立,此时 $[x*y](n+15)=0$,无混叠。

答案:$f(n)=[x*y](n)$$n=5,6,\ldots,14$。前 $5$ 个点($n=0\sim 4$)发生混叠。

关键规律:$x$ 长度为 $L_x$$y$ 长度为 $L_y$,做 $N$ 点循环卷积,则 $n=L_x-1,\ldots,N-1$ 的输出与线性卷积一致。

例题 9:DFT 帕塞瓦定理的证明

题目:写出并证明 DFT 的帕塞瓦定理。

目标:建立时域能量与频域能量的对应关系。

  1. 将 IDFT 表达式 $x(n)=\frac{1}{N}\sum_{k=0}^{N-1}X(k)W_N^{-kn}$ 代入 $\sum|x(n)|^2=\sum x(n)x^*(n)$
  2. 交换求和顺序,内层 $\sum_{n=0}^{N-1}x(n)W_N^{kn}=X^*(k)$(正交性)。
  3. 化简得 $\frac{1}{N}\sum_{k=0}^{N-1}|X(k)|^2$

答案:$\sum_{n=0}^{N-1}|x(n)|^2=\frac{1}{N}\sum_{k=0}^{N-1}|X(k)|^2$

物理意义:信号的总能量在时域和频域相等(差一个归一化因子 $1/N$)。这是能量守恒在离散频域中的体现。
Part 4 · 频域采样
从 DTFT 到 DFT 的理论桥梁

4.1 DFT 是 DTFT 的等间隔采样

如果把有限长序列看成

$$x[n]=0,\quad n<0\text{ 或 } n\ge N,$$

它的 DTFT 是

$$X(e^{j\omega})=\sum_{n=0}^{N-1}x[n]e^{-j\omega n}.$$

$\omega_k=2\pi k/N$ 处采样,就得到

$$X(e^{j\omega_k})=\sum_{n=0}^{N-1}x[n]e^{-j2\pi kn/N}=X[k].$$

这说明 DFT 不是凭空发明的新变换,而是 DTFT 在有限网格上的采样。但 DFT 的反变换会把这 $N$ 个频点解释成一个长度为 $N$ 的周期序列,因此边界处理和循环结构会自然出现。

工程中的身影:数字音乐调音器需要足够的频率分辨率来识别音高——DFT 的频率分辨率 $\Delta_f = f_s/N$ 决定了能否区分相邻半音。5G 通信中的 OFDM 调制,本质上就是对宽带信号做 DFT 分解成多个正交子载波。

4.2 DFS:DFT 的周期延拓根基

严格说,DFT 是周期序列的离散傅里叶级数(DFS)被矩形窗截取一个周期后的结果。DFS 处理周期序列 $\tilde{x}[n]$(周期 $N$),其定义是

$$\tilde{X}[k]=\sum_{n=0}^{N-1}\tilde{x}[n]W_N^{nk},\quad k=0,\ldots,N-1.$$

$\tilde{X}[k]$ 本身也是周期为 $N$ 的序列。DFS 逆变换恢复周期序列:

$$\tilde{x}[n]=\frac1N\sum_{k=0}^{N-1}\tilde{X}[k]W_N^{-nk}.$$

DFS 和 DFT 的数学表达式一模一样,唯一的区别是解读方式:DFS 的输入和输出都默认是周期无限的,DFT 的输入和输出都视为有限长的主值区间。两者的关系可以写作

$$X[k] = \tilde{X}[k]\cdot R_N[k],\qquad x[n] = \tilde{x}[n]\cdot R_N[n],$$

其中 $R_N[\cdot]$ 是矩形窗(主值区间 $0\le n \le N-1$ 内为 1,其余为 0)。

DFS ↔ DFT 的关系:DFS 先假设序列是周期的(见 Part 2 的周期延拓讨论),DFT 取主值区间把它截断为有限长。做题时序列一般写 $x[n]$(有限长),但做 DFT 时理解成隐含了 $\tilde{x}[n]=x[(n\bmod N)]$ 的周期延拓会更有用。

DFS 同样满足一系列性质,其中最有用的几个:

DFS 性质时域频域说明
线性$a\tilde{x}[n]+b\tilde{y}[n]$$a\tilde{X}[k]+b\tilde{Y}[k]$简单叠加,DFS 是线性变换
时移$\tilde{x}[n+m]$$W_N^{-mk}\tilde{X}[k]=e^{j2\pi mk/N}\tilde{X}[k]$时域移位不改变幅度,只引入相位旋转
频移$W_N^{ln}\tilde{x}[n]$$\tilde{X}[k+l]$频谱搬移的对偶性质
周期卷积$\sum_{m=0}^{N-1}\tilde{x}_1[m]\tilde{x}_2[n-m]$$\tilde{X}_1[k]\tilde{X}_2[k]$DFS 域乘法对应时域周期卷积
共轭对称$\tilde{x}[n]$ 为实序列$\tilde{X}[k]=\tilde{X}^*[-k]$实序列的 DFS 幅度关于 $k=0$ 偶对称

DFS 的性质几乎完全照搬到 DFT,区别只在于 DFT 需要处理索引的模 $N$ 回绕(因为 DFT 把有限长序列当作周期序列的一个周期来对待)。

PDFDFS 定义与性质 · p.12–61p.12–61
正在渲染 PDF 第 12 页…
正在渲染 PDF 第 61 页…
DFS 定义与性质(PDF p.12–61) · 打开原文

4.3 频域采样定理

时域采样定理告诉我们:对带限信号以足够高的频率采样,可以无失真地恢复原信号。频域采样定理是其对偶:对有限长序列的频谱(DTFT)在频域采样足够多的点,可以无失真地恢复原序列。

问题提出:$x[n]$ 是长度为 $M$ 的有限长序列($x[n]=0$$n$$[0, M-1]$ 之外),其 DTFT 为 $X(e^{j\omega})$。在 $N$ 个等间隔频点 $\omega_k=2\pi k/N$ 上对 $X(e^{j\omega})$ 采样,得到 $X[k]=X(e^{j2\pi k/N})$。问:$N$ 至少取多少,才能从 $X[k]$ 无失真地恢复 $x[n]$

定理内容:当频域采样点数 $N \ge M$ 时,IDFT 可以精确恢复原序列:

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

$N < M$ 时,恢复出的序列发生时域混叠(aliasing),无法无失真恢复。

推导:对 DTFT 做频域采样得到 $X[k]$,再做 IDFT,得到的序列 $x_N[n]$ 是原序列 $x[n]$ 的周期延拓再取主值:

$$x_N[n] = \sum_{r=-\infty}^{\infty} x[n+rN] \cdot R_N[n]$$

其中 $R_N[n]$ 是长度为 $N$ 的矩形窗。当 $N \ge M$ 时,平移后的副本 $x[n+rN]$$r \ne 0$)完全落在窗外,不与主值区间重叠,因此 $x_N[n] = x[n]$,无混叠。当 $N < M$ 时,相邻周期的序列尾部会折叠进主值区间,产生时域混叠。

对偶关系总结:
  • 时域采样定理:时域采样(间隔 $T$)→ 频域周期延拓(周期 $f_s=1/T$)。无失真条件:采样率 $f_s \ge 2f_{\max}$(奈奎斯特准则)。
  • 频域采样定理:频域采样($N$ 个点)→ 时域周期延拓(周期 $N$)。无失真条件:$N \ge M$(序列长度)。

频域采样定理的工程意义:

  • DFT 的本质就是频域采样$N$ 点 DFT 就是对 DTFT 在 $N$ 个等间隔频点上采样。只要 $N \ge M$,DFT 包含了原序列的全部信息,IDFT 可以完美重建。
  • 补零不增加信息$N > M$ 时(末尾补零),频域采样更密,但重建出的序列只是原序列后面加了零,没有新的时域信息。
  • 截断会丢失信息$N < M$ 时,频域采样不够密,IDFT 恢复的序列发生时域混叠,是原序列的失真版本。具体例子见本章末尾例题区。

4.4 频域内插:DFT 频点之间是什么?

DFT 只在 $N$ 个离散频点 $\omega_k=2\pi k/N$ 上给出了频谱值。如果想知道两个频点之间的连续频谱是什么——比如想要更高分辨率地观察谱峰——就用到频域内插。

DFT 频点 $X[k]$ 到连续 DTFT 频谱 $X(e^{j\omega})$ 的内插公式为

$$X(e^{j\omega})=\sum_{k=0}^{N-1}X[k]\,\phi\!\left(\omega-\frac{2\pi k}{N}\right),$$

其中 $\phi(\omega)$ 是内插函数,它是单个矩形窗序列 $R_N[n]$ 的 DTFT:

$$\phi(\omega)=\frac1N\cdot\frac{\sin(N\omega/2)}{\sin(\omega/2)}\,e^{-j(N-1)\omega/2}.$$

翻译成自然语言:每个 $X[k]$ 被一个中心在 $\omega_k$ 上的 $\operatorname{dirc}$ 型函数(类似 sinc)加权,相邻频点的旁瓣相互重叠后精确重建了完整的连续频谱。这也意味着,零填充到更长 $N$ 后再做 DFT 得到的并不是新的信息——它只是在相同 DTFT 曲线上更密集地采样。

零填充的正确理解:频率分辨率(区分两个相邻正弦的能力)由有效信号持续时间 $T$ 决定:$\Delta_f = 1/T$。零填充不增加任何关于信号的新信息,无法提高真正的频谱分辨率。它的实际价值在于:(1) 频谱可视化——更密集的频率采样让谱线更平滑;(2) 精确频率估计——通过内插找到 sinc 主瓣峰值的精确位置;(3) 对齐 FFT 长度——某些硬件/库要求长度为 2 的幂。

如果把 DFT 和连续信号连起来看,还有一个重要的关系:设采样周期为 $T$ 的离散序列 $x[n]$ 的 DFT 为 $X[k]$,连续信号 $x(t)$ 的 FT 是 $X(j\Omega)$,则在频率点 $\Omega_k=k\Omega_0=k\cdot 2\pi f_s / N$ 处有

$$X(k\Omega_0)=T\cdot\sum_{n=0}^{N-1}x(nT)e^{-jkn2\pi T f_s/N}=T\cdot X[k].$$

这意味着 DFT 频点值乘上 $T$ 就逼近了原连续信号的频谱采样值。这个关系在工程中用来标定频谱的物理单位。

工程中的身影:音乐软件中频谱的平滑显示——本质上就是补零后对 DFT 频点做视觉内插,让谱线看起来连续,但真正的频率分辨率并没有提高。
PDF频域内插与频谱采样 · p.91–95p.91–95
正在渲染 PDF 第 91 页…
正在渲染 PDF 第 95 页…
频域内插与频谱采样(PDF p.91–95) · 打开原文

4.5 Z 域内插:从 DFT 重建完整 Z 变换

4.4 节给出的是单位圆上的内插——用 $N$$X[k]$ 重建 $X(e^{j\omega})$。如果把 $z$ 放到整个 Z 平面,DFT 同样可以重建完整的 Z 变换 $X(z)$。这就是 Z 域内插公式,有时也叫DFT 的 Z 域重建公式

Z 域内插公式

$x[n]$ 为长度 $N$ 的有限序列(或取周期序列的一个主值周期),$X[k]$ 为其 $N$ 点 DFT,则其 Z 变换为

$$X(z)=\frac{1-z^{-N}}{N}\sum_{k=0}^{N-1}\frac{X[k]}{1-W_N^{-k}z^{-1}},\qquad W_N=e^{-j2\pi/N}.$$

若采用 $W_N=e^{j2\pi/N}$ 的符号约定,则等价写成

$$X(z)=\frac{1-z^{-N}}{N}\sum_{k=0}^{N-1}\frac{X[k]}{1-W_N^{k}z^{-1}}.$$

推导:从 IDFT $x[n]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]W_N^{-kn}$ 出发,代入 Z 变换:

$$X(z)=\sum_{n=0}^{N-1}x[n]z^{-n} =\frac{1}{N}\sum_{k=0}^{N-1}X[k]\sum_{n=0}^{N-1}(W_N^{-k}z^{-1})^n.$$

对有限项几何级数求和,利用 $W_N^{-kN}=e^{j2\pi k}=1$

$$\sum_{n=0}^{N-1}(W_N^{-k}z^{-1})^n =\frac{1-(W_N^{-k}z^{-1})^N}{1-W_N^{-k}z^{-1}} =\frac{1-z^{-N}}{1-W_N^{-k}z^{-1}}.$$

由于分子 $1-z^{-N}$$k$ 无关,可以提到求和号外,即得 Z 域内插公式。

两项的物理意义:
  • $1-z^{-N}$梳状滤波器,在 Z 平面单位圆上有 $N$ 个等间隔零点 $z_k=e^{j2\pi k/N}$$k=0,\ldots,N-1$)。
  • 求和项 $X[k]/(1-W_N^{-k}z^{-1})$$N$ 个一阶谐振器,每个在单位圆上有极点 $z=W_N^{-k}=e^{j2\pi k/N}$,恰好与梳状滤波器的零点位置相同。
  • 零极点相消后,系统只在采样频率点 $\omega_k=2\pi k/N$ 上保留 $X[k]$ 决定的频响,整体仍是长度为 $N$ 的 FIR。

与频域内插公式的关系:$z=e^{j\omega}$,分子变为 $1-e^{-jN\omega}$,分母变为 $1-W_N^{-k}e^{-j\omega}=1-e^{-j(\omega-2\pi k/N)}$。整理后正是 4.4 节的频域内插函数 $\phi(\omega)$。所以 Z 域内插公式是频域内插公式的 Z 平面推广,后者只是前者在单位圆上的特例。

工程意义:这个公式是 FIR 滤波器"频率抽样型"结构的理论基础。只要指定 $N$ 个频点采样值 $H[k]$,就能通过上式构造出系统函数 $H(z)$,并进一步用梳状滤波器 + 谐振器组的结构实现。详情见 dsp-fir-filter-design.html#频率抽样型

例题区

例题:$N < M$ 时的时域混叠

题目:已知 $x(n) = \{1, 2, 3, 4, 5, 4, 3, 2, 1\}$$X(k)$ 是序列 $x(n)$ 的傅里叶变换在 $[0, 2\pi]$ 上的 8 点等间隔采样。请写出 $X(k)$ 的 8 点 IDFT 变换序列。

分析:$x(n)$ 长度 $M=9$,频域采样点数 $N=8 < M$,不满足频域采样定理的无混叠条件。IDFT 恢复的序列为:

$$x_N[n] = \sum_{r=-\infty}^{\infty} x[n+rN], \quad n=0,1,\ldots,7$$

原序列只有 $x[0]$$x[8]$ 非零,所以 $r=0$$r=-1$ 的项有贡献:

  • $n=0$$x[0] + x[0+8] = 1+1 = 2$(混叠!)
  • $n=1$$x[1] + x[9] = 2+0 = 2$
  • $n=2$$x[2] + x[10] = 3+0 = 3$
  • $n=3$$x[3] = 4$
  • $n=4$$x[4] = 5$
  • $n=5$$x[5] = 4$
  • $n=6$$x[6] = 3$
  • $n=7$$x[7] = 2$
$$x_N(n) = \{2,\; 2,\; 3,\; 4,\; 5,\; 4,\; 3,\; 2\}$$
关键:只有 $n=0$ 处发生混叠——原序列的 $x[0]=1$$x[8]=1$ 折叠叠加为 $2$。如果取 $N=9 \ge M=9$,则无混叠,IDFT 完美恢复原序列。

例题 10:末尾补零的 $rN$ 点 DFT

题目:$x(n)$$N$ 点序列,$X(k)=\mathrm{DFT}_N[x(n)]$。将 $x(n)$ 末尾补零到 $rN$ 点:$y(n)=x(n)$$0\le n\le N-1$),$y(n)=0$$N\le n\le rN-1$)。求 $\mathrm{DFT}_{rN}[y(n)]$$X(k)$ 的关系。

目标:理解末尾补零对频谱的影响。

  1. 代入 $rN$ 点 DFT 定义:$Y(k)=\sum_{n=0}^{N-1}x(n)W_{rN}^{kn}$
  2. $k=rm$$m=0,\ldots,N-1$)时,利用 $W_{rN}^r=W_N$$Y(rm)=\sum_{n=0}^{N-1}x(n)W_N^{mn}=X(m)$
  3. $k$ 不是 $r$ 的整数倍时,$Y(k)$ 给出 DTFT 在原频点之间的内插值。

答案:$Y(rm)=X(m)$$m=0,1,\ldots,N-1$),原频点处值不变;其余 $k$ 处为新的频率内插值。

末尾补零不增加新的频谱信息,等效于在原 DTFT 曲线上更密集地采样。

例题 11:内插零值的 $rN$ 点 DFT

题目:$x(n)$$N$ 点序列。每两点之间补 $r-1$ 个零得到 $rN$ 点序列 $y(n)$,求 $\mathrm{DFT}_{rN}[y(n)]$$X(k)$ 的关系。

目标:理解时域补零对应频域频谱内插(周期复制)。

  1. $y(n)$ 只在 $n=0,r,2r,\ldots$ 处非零,代入得 $Y(k)=\sum_{i=0}^{N-1}x(i)W_{rN}^{ikr}=\sum_{i=0}^{N-1}x(i)W_N^{ik}$
  2. 这与 $N$ 点 DFT 定义形式相同,但 $k$ 取值 $0,1,\ldots,rN-1$

答案:$Y(k)=X(k\bmod N)$。时域补零使频域产生 $r$ 个周期副本,但并未增加频谱信息。

8 点 radix-2 FFT 蝶形结构示意图
FFT 的意义不只是"算得快",而是利用偶奇拆分和旋转因子复用,让原本 $N^2$ 级别的 DFT 在工程上可用。
Part 5 · FFT
$N^2$$N\log N$:快速傅里叶变换

5.1 直接计算 DFT 的运算量

DFT 的定义式为

$$X[k]=\sum_{n=0}^{N-1}x[n]\,W_N^{kn},\quad k=0,1,\ldots,N-1.$$

每个 $X[k]$ 需要 $N$ 次复数乘法,一共 $N$$k$,所以直接计算 $N$ 点 DFT 需要 $N^2$ 次复乘。当 $N$ 较小时问题不大,但工程中 $N$ 经常很大:

$N$$N^2$ 次复乘直接计算时间(每次复乘 $5\,\mu\text{s}$
$64$$4\,096$$20\,\text{ms}$
$512$$262\,144$$1.31\,\text{s}$
$8192$$67\,108\,864$$336\,\text{s}$(5.6 分钟)
$2^{20}$$\approx 10^{12}$约 58 天

音频 CD 以 $44.1\,\text{kHz}$ 采样,1 秒的数据对应 $N=44100$,直接算 DFT 要 $\sim 2\times 10^9$ 次复乘,实时处理根本不可能。图像处理、雷达、MRI 等场景的 $N$ 更大。如果 DFT 只能 $O(N^2)$ 地算,它在工程中几乎没用。

5.2 减少运算量的途径

直接计算 DFT 之所以慢,是因为每一个 $X[k]$ 都独立地遍历所有 $N$$x[n]$,各 $X[k]$ 之间没有共享任何中间结果。FFT 的核心突破就是:利用旋转因子 $W_N$ 的性质,让不同的 $X[k]$ 共享计算。

旋转因子 $W_N=e^{-j2\pi/N}$ 有两个关键性质:

旋转因子的对称性与周期性

  • 对称性:$W_N^{k+N/2}=-W_N^k$(相差半圈,方向相反)
  • 周期性:$W_N^{k+N}=W_N^k$(转一整圈回到起点),由此推出 $W_N^2=W_{N/2}$
  • 可约性:$W_N^2=W_{N/2}$$W_N^4=W_{N/4}$$\ldots$

这意味着:如果我们把 $N$ 点 DFT 拆成两个 $N/2$ 点 DFT,它们的旋转因子从 $W_N$ 变成 $W_{N/2}$,恰好可以利用 $W_N^2=W_{N/2}$ 复用已有计算。这就是分治的起点。

FFT(Fast Fourier Transform,快速傅里叶变换)是什么

FFT 不是一个新变换,而是计算 DFT 的一种快速算法。它算出的结果和直接按定义算的完全一样,但把计算量从 $O(N^2)$ 降到 $O(N\log_2 N)$

核心思想:分治——把一个 $N$ 点 DFT 拆成两个 $N/2$ 点 DFT,递归下去,最终只需要 $\frac{N}{2}\log_2 N$ 次复乘。

这个思想最早由 Gauss 在 1805 年提出,1965 年 Cooley 和 Tukey 的论文使其广为人知。FFT 被誉为 20 世纪最重要的数值算法之一。

关键认知:FFT 算的是精确 DFT,不是近似值。快来自旋转因子的周期性和对称性被复用,不是牺牲精度换速度。

FFT 的两条路线:DIT 与 DIF

分治的关键问题是:"拆什么?" DFT 有输入端(时域 $x[n]$)和输出端(频域 $X[k]$),两侧都可以拆。

DIT(按时间抽取)DIF(按频率抽取)
拆分对象输入序列 $x[n]$:按 $n$ 的奇偶分成两组输出频谱 $X[k]$:按 $k$ 的奇偶分成两组
"时间抽取"含义对时间变量 $n$ 做抽取(下采样)
"频率抽取"含义对频率变量 $k$ 做抽取(下采样)
输入顺序bit-reversal 重排自然顺序
输出顺序自然顺序bit-reversal 重排
旋转因子位置蝶形(先乘后加减)蝶形(先加减后乘)

两者运算量完全相同($\frac{N}{2}\log_2 N$ 次复乘),只是分解视角不同。下面先讲 DIT(教材主线),再讲 DIF(对偶形式)。

为什么有两种?因为 DFT 有两端——输入和输出。拆输入就是 DIT,拆输出就是 DIF。就像同一个棋盘可以从白方视角看,也可以从黑方视角看,棋局本身不变。实际工程中 DIT 和 DIF 都被广泛使用,理解它们的关系有助于灵活实现。

5.3 按时间抽取(DIT)基 2 FFT

5.3.1 分解推导

要求 $N=2^M$。思路:把输入序列按偶数和奇数下标拆成两组,分别做 $N/2$ 点 DFT,再用一层合成得到完整的 $N$ 点 DFT。

$N=2M$ 的 DFT,按偶数和奇数样本拆开:

$$X[k]=\sum_{r=0}^{M-1}x[2r]W_N^{2rk}+\sum_{r=0}^{M-1}x[2r+1]W_N^{(2r+1)k}.$$

利用 $W_N^2=W_{N/2}=W_M$,得到

$$X[k]=\underbrace{\sum_{r=0}^{M-1}x[2r]W_M^{rk}}_{E[k]}+W_N^k\underbrace{\sum_{r=0}^{M-1}x[2r+1]W_M^{rk}}_{O[k]}.$$

$E[k]$ 是偶数样本的 $M$ 点 DFT,$O[k]$ 是奇数样本的 $M$ 点 DFT,两者都已经对 $M$ 周期,所以 $E[k+M]=E[k]$$O[k+M]=O[k]$。再利用 $W_N^{k+M}=-W_N^k$,得

$$\boxed{\begin{aligned}X[k]&=E[k]+W_N^k\,O[k],\\X[k+M]&=E[k]-W_N^k\,O[k],\end{aligned}}\quad k=0,1,\ldots,M-1.$$

5.3.2 蝶形运算

上面这对公式就是蝶形运算(butterfly)。一对输入 $(E[k],\,O[k])$ 通过一次复乘 $W_N^k O[k]$ 和两次加减,同时产生两个输出 $X[k]$$X[k+M]$。上下两支只差一个加减号。

输入运算输出
$E[k]$, $W_N^k O[k]$$+$(加)$X[k]=E[k]+W_N^k O[k]$
$E[k]$, $W_N^k O[k]$$-$(减)$X[k{+}M]=E[k]-W_N^k O[k]$

$O[k] \xrightarrow{\times W_N^k} W_N^k O[k] \longrightarrow \begin{cases} E[k]+W_N^k O[k] = X[k] \\ E[k]-W_N^k O[k] = X[k{+}M] \end{cases}$

每个蝶形只需要 1 次复乘$W_N^k O[k]$)和 2 次复加(加和减)。$N$ 点 FFT 有 $\log_2 N$ 级,每级 $N/2$ 个蝶形,所以总复乘次数为 $\frac{N}{2}\log_2 N$

递归拆分到 2 点 DFT 后,整个计算量满足

$$T(N)=2T(N/2)+\Theta(N)=\Theta(N\log_2 N).$$
PDF计算工作量分析:一次分解使计算量减半p.13
正在渲染 PDF 第 13 页…
计算工作量分析:一次分解使计算量减半(PDF 第 13 页) · 打开原文

5.3.3 $N=8$ DIT 的完整分解过程

$N=8$ 为例,展示 DIT FFT 的三层分解。

PDFN=8 DFT 分解为两个 N/4=4 点 DFTp.14
正在渲染 PDF 第 14 页…
N=8 DFT 分解为两个 N/4=4 点 DFT(PDF 第 14 页) · 打开原文

第一层:$8\to 4+4$

偶数序列 $x_1[r]=x[2r]$$x_1[0]=x[0]$$x_1[1]=x[2]$$x_1[2]=x[4]$$x_1[3]=x[6]$

奇数序列 $x_2[r]=x[2r+1]$$x_2[0]=x[1]$$x_2[1]=x[3]$$x_2[2]=x[5]$$x_2[3]=x[7]$

$$X[k]=X_1[k]+W_8^k\,X_2[k],\quad X[k+4]=X_1[k]-W_8^k\,X_2[k],\quad k=0,1,2,3.$$

第二层:$4\to 2+2$(对 $X_1$$X_2$ 各做一次)

$X_1$:偶偶序列 $x[0],x[4]$ 做 2 点 DFT,偶奇序列 $x[2],x[6]$ 做 2 点 DFT,用 $W_4$ 合成。

$X_2$:奇偶序列 $x[1],x[5]$ 做 2 点 DFT,奇奇序列 $x[3],x[7]$ 做 2 点 DFT,用 $W_4$ 合成。

第三层:$2\to 1+1$,2 点 DFT 就是一个无旋转因子的蝶形:$X[0]=a+b$$X[1]=a-b$

PDF蝶形合成公式p.15
正在渲染 PDF 第 15 页…
蝶形合成公式(PDF 第 15 页) · 打开原文
PDFN=8 DFT 分解为两个 N/2 点 DFT + 蝶形合成p.16
正在渲染 PDF 第 16 页…
N=8 DFT 分解为两个 N/2 点 DFT + 蝶形合成(PDF 第 16 页) · 打开原文

5.3.4 码位倒读(Bit-Reversal):为什么会这样?

核心问题:DIT 每次把序列按偶数/奇数下标拆分。拆到最后,输入的排列顺序变成了什么?答案是——下标二进制位的反转。这不是人为规定,而是递归偶奇拆分的必然几何后果

逐层追踪 $N=8$ 的输入重排

原始输入:$x[0],x[1],x[2],x[3],x[4],x[5],x[6],x[7]$,下标二进制:$000,001,010,011,100,101,110,111$

第一层拆分——按最低位(LSB)分组:

  • 偶数(LSB=0):$x[0]_{000},\,x[2]_{010},\,x[4]_{100},\,x[6]_{110}$
  • 奇数(LSB=1):$x[1]_{001},\,x[3]_{011},\,x[5]_{101},\,x[7]_{111}$

第二层拆分——在每组内按次低位分组:

  • 偶偶(最低两位=00):$x[0]_{000},\,x[4]_{100}$
  • 偶奇(最低两位=10):$x[2]_{010},\,x[6]_{110}$
  • 奇偶(最低两位=01):$x[1]_{001},\,x[5]_{101}$
  • 奇奇(最低两位=11):$x[3]_{011},\,x[7]_{111}$

最终排列(从上到下):

排列位置原始下标二进制位反转排列后的值
00000000$x[0]$
14100001$x[4]$
22010010$x[2]$
36110011$x[6]$
41001100$x[1]$
55101101$x[5]$
63011110$x[3]$
77111111$x[7]$

结论:第一层拆分按最低位分,第二层按次低位分,第三层按最高位分。最终排列顺序恰好是把原始下标的二进制位从右到左读,即码位倒读(Bit-Reversal)。

直观理解:$i$ 层拆分按第 $i$ 位(从低到高)决定"左子树还是右子树"。走完 $\log_2 N$ 层后,到达叶节点的路径就是从最低位到最高位的判断序列——等价于把下标的二进制位反转。这不是巧合,而是分治树的结构性质。

Bit-reversal 的对合性:位反转操作做两次就回到原序($(i^R)^R = i$),所以只需交换每一对 $(i,\,i^R)$ 即可原地完成重排,不需要额外数组。

5.3.5 原位计算(In-Place Computation)

FFT 的原地特性意味着所有中间结果直接覆盖原数组位置,无需额外存储空间——$N$ 点 FFT 只需 $O(N)$ 的存储。这是因为每一级蝶形运算的输出对 $(X[k],X[k+M])$ 恰好写入输入对 $(E[k],O[k])$ 原来的位置,不会影响其他蝶形的输入。

PDF原位运算与可并行性p.29
正在渲染 PDF 第 29 页…
原位运算与可并行性(PDF 第 29 页) · 打开原文

5.4 按频率抽取(DIF)基 2 FFT

DIF 是 DIT 的对偶形式。DIT 对输入按 $n$ 的奇偶分组(拆时间端),DIF 对输出按 $k$ 的奇偶分组(拆频率端)。两者殊途同归,算出来的 $X[k]$ 完全一样。

5.4.1 分解推导

$N$ 点 DFT 的求和拆成前半段和后半段:

$$X[k]=\sum_{n=0}^{N/2-1}x[n]W_N^{kn}+\sum_{n=N/2}^{N-1}x[n]W_N^{kn} =\sum_{n=0}^{N/2-1}\Bigl(x[n]+x[n+N/2]\,W_N^{kN/2}\Bigr)W_N^{kn}.$$

利用 $W_N^{kN/2}=(-1)^k$,分 $k$ 的奇偶讨论:

偶数频点 $k=2r$此时 $(-1)^k=1$

$$X[2r]=\sum_{n=0}^{N/2-1}\bigl(x[n]+x[n+N/2]\bigr)W_N^{2rn} =\sum_{n=0}^{N/2-1}\bigl(x[n]+x[n+N/2]\bigr)W_{N/2}^{rn}.$$

这正是 $N/2$ 点 DFT,输入是前半段与后半段之和 $a[n]=x[n]+x[n+N/2]$

奇数频点 $k=2r+1$此时 $(-1)^k=-1$

$$X[2r+1]=\sum_{n=0}^{N/2-1}\bigl(x[n]-x[n+N/2]\bigr)W_N^{(2r+1)n} =\sum_{n=0}^{N/2-1}\underbrace{\bigl(x[n]-x[n+N/2]\bigr)W_N^n}_{b[n]}\;W_{N/2}^{rn}.$$

这也是 $N/2$ 点 DFT,输入是差值乘旋转因子 $b[n]=(x[n]-x[n+N/2])W_N^n$

5.4.2 DIF 蝶形与信号流图

DIF 的蝶形与 DIT 不同:先加减,后乘旋转因子

$$\begin{aligned} a[n] &= x[n]+x[n+N/2],\\ b[n] &= \bigl(x[n]-x[n+N/2]\bigr)\cdot W_N^n. \end{aligned}$$

递归分解到 2 点 DFT 后,$X[k]$ 按码位倒读顺序排列——这次不是输入端,而是输出端需要 bit-reversal 重排。

PDFDIF-FFT 分解推导 · p.31–32p.31–32
正在渲染 PDF 第 31 页…
正在渲染 PDF 第 32 页…
DIF-FFT 分解推导(PDF p.31–32) · 打开原文
PDF8 点 DIF-FFT 完整信号流图p.49
正在渲染 PDF 第 49 页…
8 点 DIF-FFT 完整信号流图(PDF 第 49 页) · 打开原文

5.5 DIT 与 DIF 的完整对比

对比项DIT(按时间抽取)DIF(按频率抽取)
分解思路$x[n]$$n$ 奇偶拆分$X[k]$$k$ 奇偶拆分
蝶形结构先乘 $W_N^k$,后加减先加减,后乘 $W_N^k$
输入顺序bit-reversal(乱序)自然顺序
输出顺序自然顺序bit-reversal(乱序)
复乘次数$\dfrac{N}{2}\log_2 N$(完全相同)
复加次数$N\log_2 N$(完全相同)
原位计算都支持
转置关系DIT 流图转置 = DIF 流图
如何选择?如果输入数据已经在内存中且不方便重排,选 DIF(输入自然顺序)。如果希望输出直接正序,选 DIT。如果两者都要自然顺序,可以在一端做 bit-reversal。实际工程库(如 FFTW)会根据 $N$ 自动选择最优方案。

5.6 运算量与存储

FFT 运算量

复数乘法:$\frac{N}{2}\log_2 N$

复数加法:$N\log_2 N$

与直接计算 DFT 的 $N^2$ 次复乘相比,加速比为 $\frac{2N}{\log_2 N}$。当 $N=1024$ 时加速约 $204$ 倍,$N=2^{20}$ 时加速约 $10^5$ 倍。

5.7 IFFT:用 FFT 算逆变换

IDFT 的定义是 $x[n]=\frac{1}{N}\sum_{k=0}^{N-1}X[k]\,W_N^{-kn}$。与 DFT 相比只差两点:旋转因子取共轭 $W_N^{-kn}$,结果除以 $N$。因此可以用同一个 FFT 硬件/程序实现 IFFT

$$x[n]=\frac{1}{N}\Bigl(\text{FFT}\bigl(X^*[k]\bigr)\Bigr)^*$$

步骤:输入取共轭 → 做 FFT → 输出取共轭 → 除以 $N$。这种"共轭 Trick"让所有 FFT 的优化技术自动适用于 IFFT。

PDF8 点 FFT 完整蝶形信号流图p.26
正在渲染 PDF 第 26 页…
8 点 FFT 完整蝶形信号流图(PDF 第 26 页) · 打开原文
PDF进一步分解到 N/4 点 DFTp.19
正在渲染 PDF 第 19 页…
进一步分解到 N/4 点 DFT(PDF 第 19 页) · 打开原文

5.8 其他 FFT 算法(了解)

$N$ 不是 2 的幂时,Radix-2 无法直接使用。但分治思想仍然适用:

  • Mixed Radix:若 $N$ 可以分解为多个小素因子(如 $N=2^a\times 3^b\times 5^c$),可以用多基 Cooley-Tukey 分解。
  • Rader's algorithm:将素数长度 $N$ 的 DFT 转化为长度 $N-1$ 的循环卷积,再用 FFT 计算。
  • Bluestein's algorithm(chirp-Z 变换):将任意长度 $N$ 的 DFT 转化为 2 的幂长度的卷积。

5.9 频谱分析、滤波与 STFT

FFT 让 DFT 足够快,于是很多滤波和谱估计任务都可以转到频域完成:先 FFT,频域乘以滤波器响应,再 IFFT 回到时域。只要处理好零填充和块边界,就能把长信号卷积变成高效的块处理算法。

Overlap-Add(OLA)Overlap-Save(OLS)是两种经典的分块快速卷积方法:

  • OLA:将输入切成不重叠的块,每块补零后做 FFT → 频域乘法 → IFFT,相邻块的结果在重叠区相加。
  • OLS:每一块输入从前一块末尾保留 $M-1$ 个样本($M$ 为滤波器长度),卷积后丢弃前 $M-1$ 个被循环混叠污染的样本。

FFT 最广泛的应用形式是短时傅里叶变换(STFT):将长信号切成重叠的短窗,对每个窗做 FFT,得到时-频二维表示:

$$X(m,\omega)=\sum_{n=-\infty}^{\infty}x[n]\cdot w[n-mR]\cdot e^{-j\omega n}$$

其中 $w[n]$ 是窗函数,$R$ 是跳距(hop size),$m$ 是帧编号。帧长越大,频率分辨率越高($\Delta_f = f_s/N$),但时间分辨率越差——这是经典的测不准原理 trade-off。

工程中的身影:JPEG 压缩用 DCT(DFT 的亲兄弟,可用 FFT 实现)将图像块变换到频域后量化。MRI 图像重建的核心步骤就是对采样数据做 2D FFT。语音识别系统(如 Siri)的第一步也是用 STFT 提取时频特征。

例题区

例题:画出 8 点基 2 DIF FFT 流图,分析存储单元和运算量

题目:画出 8 点基 2 按频率抽取(DIF)FFT 流图,分析实现该算法所需存储单元,计算复数乘法和复数加法的次数。

(一)8 点 DIF FFT 流图

DIF 的输入是自然顺序 $x(0),x(1),\ldots,x(7)$,输出是码位倒读顺序 $X(0),X(4),X(2),X(6),X(1),X(5),X(3),X(7)$。一共 $\log_2 8=3$ 级蝶形,每级 $N/2=4$ 个蝶形。

第一级$N\to N/2$,前半段与后半段配对,旋转因子 $W_8^0\sim W_8^3$):

蝶形上端输出下端输出
$x(0),x(4)$$x(0)+x(4)$$[x(0)-x(4)]W_8^0$
$x(1),x(5)$$x(1)+x(5)$$[x(1)-x(5)]W_8^1$
$x(2),x(6)$$x(2)+x(6)$$[x(2)-x(6)]W_8^2$
$x(3),x(7)$$x(3)+x(7)$$[x(3)-x(7)]W_8^3$

上端 4 个输出送入偶数频点支路(最终产生 $X(0),X(2),X(4),X(6)$),下端 4 个输出送入奇数频点支路(最终产生 $X(1),X(3),X(5),X(7)$)。

第二级$N/2\to N/4$,各自再做 4 点 DFT,旋转因子 $W_4^0, W_4^1$):

偶数支路(上端 4 个)做 4 点 DIF,奇数支路(下端 4 个)做 4 点 DIF,各用 $W_4^0=1$$W_4^1=-j$ 做蝶形合成。

第三级$N/4\to 2$,2 点 DFT,旋转因子 $W_2^0=1$):

最后一层是无旋转因子的加减蝶形,输出 $X(k)$ 按 bit-reversal 排列。

完整流图参见课件 page=49(前文 5.4.2 节已展示)

(二)存储单元分析

存储需求

  • 数据存储:DIF 支持原位计算(in-place),每个蝶形的两个输出直接写入输入位置,因此只需 $N=8$ 个复数存储单元存放中间数据。
  • 旋转因子表:$W_8^0,W_8^1,W_8^2,W_8^3$$N/2=4$ 个独立复数值(利用对称性 $W_8^{k+4}=-W_8^k$ 只需存一半)。若不利用对称性,需存 $N=8$ 个。
  • 总计:利用对称性最少需要 $8+4=12$ 个复数存储单元;不利用对称性需 $8+8=16$ 个。

(三)运算量计算

运算量

$N=8$,级数 $L=\log_2 N = 3$,每级蝶形数 $N/2 = 4$

每个蝶形 = 1 次复乘 + 2 次复加。

  • 复数乘法:$\dfrac{N}{2}\log_2 N = \dfrac{8}{2}\times 3 = \boxed{12}$
  • 复数加法:$N\log_2 N = 8\times 3 = \boxed{24}$
关于复乘次数的两种口径:部分教材将 $W_N^0=1$ 的乘法视为"零成本"(不消耗乘法器),从而实际复乘次数为 $\dfrac{N}{2}(\log_2 N - 2)+1$。对于 $N=8$,此口径下复乘 $= 4\times 1+1=5$ 次。考试中如无特别说明,统一用 $\dfrac{N}{2}\log_2 N=12$ 次作答即可。
与直接计算对比:直接 8 点 DFT 需 $8^2=64$ 次复乘和 $8\times 7=56$ 次复加。FFT 将复乘从 64 降到 12,加速比约 5.3 倍。$N$ 越大,加速越显著。

例题 6:8 点 radix-2 DIT FFT 的分治入口

题目:说明 8 点 DFT 如何拆成两个 4 点 DFT。

  1. 从定义开始:
    $$X[k]=\sum_{n=0}^{7}x[n]W_8^{kn}.$$
  2. 按偶数和奇数下标拆分:
    $$X[k]=\sum_{r=0}^{3}x[2r]W_8^{k(2r)}+\sum_{r=0}^{3}x[2r+1]W_8^{k(2r+1)}.$$
  3. 利用 $W_8^2=W_4$
    $$X[k]=\sum_{r=0}^{3}x[2r]W_4^{kr}+W_8^k\sum_{r=0}^{3}x[2r+1]W_4^{kr}.$$
  4. 定义两个 4 点 DFT:$E[k]$ 为偶数样本的 4 点 DFT,$O[k]$ 为奇数样本的 4 点 DFT,则
    $$X[k]=E[k]+W_8^kO[k],\quad X[k+4]=E[k]-W_8^kO[k],\quad k=0,1,2,3.$$
易错点:FFT 不是近似算法,它算出的仍然是精确 DFT;快来自复用对称性和周期性。

例题 7:512 点 DFT 直接计算与 FFT 运算时间

题目:计算机每次复乘 $5\,\mu\text{s}$,每次复加 $0.5\,\mu\text{s}$。计算 512 点 DFT,直接计算和 FFT 各需多少时间?

  1. 直接计算:$N^2=262\,144$ 次复乘,$N(N-1)=261\,632$ 次复加。
    $$T_{\text{直}}=262144\times 5+261632\times 0.5=1\,441\,536\,\mu\text{s}\approx 1.44\,\text{s}.$$
  2. FFT:$\frac{N}{2}\log_2 N=2304$ 次复乘,$N\log_2 N=4608$ 次复加。
    $$T_{\text{FFT}}=2304\times 5+4608\times 0.5=13\,824\,\mu\text{s}\approx 13.8\,\text{ms}.$$

答案:直接计算约 $1.44\,\text{s}$,FFT 约 $13.8\,\text{ms}$,加速比约 $104$ 倍。

例题 8:4 点基 2 DIT FFT 流程图

题目:画出 4 点基 2 按时间抽取(DIT)FFT 的蝶形流程图。

  1. 位序重排:输入按偶奇下标分开:$x(0),x(2),x(1),x(3)$(比特逆序)。
  2. 第一级蝶形$W_2^0=1$):
    $$A(0)=x(0)+x(2),\quad A(1)=x(0)-x(2),\quad A(2)=x(1)+x(3),\quad A(3)=x(1)-x(3).$$
  3. 第二级蝶形(旋转因子 $W_4^0=1$$W_4^1=-j$):
    $$X(0)=A(0)+A(2),\quad X(1)=A(1)-jA(3),\quad X(2)=A(0)-A(2),\quad X(3)=A(1)+jA(3).$$

答案:两级蝶形,共 $8$ 次复加、$1$ 次复乘($W_4^1=-j$ 的乘法只需交换实虚部符号,实际 $0$ 次通用复乘)。

例题:时域周期延拓与频域插零(完整证明)

题目:已知实序列 $x(n)$ 长度为 8,其 8 点 DFT 为 $X(k)=\{0.9,\; 0.5,\; 0.3,\; 0.2,\; 0.1,\; 0.2,\; 0.3,\; 0.5\}$。构造 $y(n)=x((n))_8 R_{16}(n)$,即 $x(n)$ 重复 2 次得到长度 16 的序列。求 $y(n)$ 的 16 点 DFT $Y(k)$

推导:

由 16 点 DFT 定义:

$$Y(k)=\sum_{n=0}^{15}y(n)\,W_{16}^{kn}.$$

由于 $y(n)$$x(n)$ 重复两次,将求和拆成前 8 项和后 8 项,第二项令 $m=n-8$

$$Y(k)=\sum_{n=0}^{7}x(n)\,W_{16}^{kn}+\sum_{n=0}^{7}x(n)\,W_{16}^{k(n+8)} =\sum_{n=0}^{7}x(n)\,W_{16}^{kn}\bigl(1+W_{16}^{8k}\bigr).$$

关键步骤:计算 $W_{16}^{8k}$

$$W_{16}^{8k}=e^{-j2\pi\cdot 8k/16}=e^{-j\pi k}=(-1)^k.$$

因此:

$$Y(k)=\bigl(1+(-1)^k\bigr)\sum_{n=0}^{7}x(n)\,W_{16}^{kn}.$$

$k$ 为偶数$k=2r$$r=0,1,\ldots,7$):$(-1)^k=1$$1+1=2$,且 $W_{16}^{2rn}=W_8^{rn}$

$$Y(2r)=2\sum_{n=0}^{7}x(n)\,W_8^{rn}=2X(r).$$

$k$ 为奇数$(-1)^k=-1$$1+(-1)=0$

$$Y(k)=0.$$

结论:

$$Y(k)=\begin{cases}2X(k/2),& k=0,2,4,\ldots,14\\[4pt]0,& k=1,3,5,\ldots,15.\end{cases}$$

代入数值:

$$Y(k)=\{1.8,\,0,\,1.0,\,0,\,0.6,\,0,\,0.4,\,0,\,0.2,\,0,\,0.4,\,0,\,0.6,\,0,\,1.0,\,0\}.$$
一般规律:时域重复 $M$ 次(长度从 $N$ 变为 $MN$),频域在原 $X(k)$ 各点之间插入 $M-1$ 个零,非零点幅度乘以 $M$。核心原因是 $W_{MN}^{Nk}=e^{-j2\pi k/M}$,当 $k$ 不是 $M$ 的倍数时 $\sum_{m=0}^{M-1}e^{-j2\pi mk/M}=0$(等比级数求和)。
与 FFT 的关系:这正是 FFT 基 2 算法中"时域抽选"或"频域抽选"的逆过程——时域的重复对应频域的插零。该性质也是理解频谱加密(Zero-Padding)的基础:补零(插入零而非重复信号)会在频域插值,但不增加新的频率信息。
Part 6 · 后续衔接
DFT/FFT 如何通向数字滤波器

学完 DFT/FFT 后,频域分析从"能理解"变成"能计算"。下一节 数字滤波器基础与结构 会继续使用这里的思想:滤波器有频率响应,频率响应可以通过 DFT 采样和 FFT 计算,FIR 滤波器也可以通过快速卷积实现。

如果说 DTFT 是理论镜头,DFT 是有限网格,FFT 就是实际相机。没有 FFT,大规模频谱分析和实时数字滤波很难成为工程常规工具。

参考来源