快速傅里叶变换
Fast Fourier Transform FFT
是一种高效计算离散傅里叶变换(DFT)及其逆变换的算法。FFT 算法显著减少了执行 DFT 所需的乘法和加法次数,从而提高了计算效率。
FFT 的基本原理
FFT 算法基于 DFT 的递归分解,将 DFT 分解为多个较小的 DFT 问题,然后递归地解决这些较小的问题。这种分解利用了“蝶形操作”(butterfly operation),它是一种特定的计算模式,可以减少所需的乘法次数。
FFT 的主要算法
-
Cooley-Tukey 算法:这是最常用的 FFT 算法,它使用分而治之的策略,将 DFT 分解成较小的 DFT,通常是偶数点和奇数点的 DFT。
-
Good-Thomas 算法:这种算法适用于处理矩形数据集,例如二维 FFT。
-
Rader 算法:当输入数据是周期性的或已知具有某些对称性质时,Rader 算法可以减少计算量。
-
Swinney 算法:这种算法适用于处理具有对称性的信号。
FFT 的计算复杂度
FFT 算法将 DFT 的计算复杂度从 ( O (N^2) ) 降低到 ( O (N \log N) ),其中 ( N ) 是输入数据的长度。这意味着对于长度为 ( N ) 的序列,FFT 算法的计算时间与 ( N ) 成线性对数关系,而不是与 ( N^2 ) 成二次方关系。
FFT 的应用
-
信号处理:FFT 是信号分析中的核心工具,用于频谱分析、滤波和信号检测。
-
图像处理:在图像压缩和图像分析中,FFT 用于快速变换到频域。
-
音频处理:在音频分析和处理中,FFT 用于分析音频信号的频率成分。
-
数据压缩:FFT 用于数据压缩算法中,以减少数据的存储和传输需求。
-
量子计算:在量子算法中,FFT 是量子傅里叶变换的基础。
-
机器学习:在某些机器学习算法中,FFT 用于快速计算卷积和相关性。
FFT 算法的高效性使其成为现代计算中不可或缺的一部分,特别是在需要处理大量数据的应用中。
AI 结构化补充(2026-05-02)
Fast Fourier Transform FFT
是一种高效计算离散傅里叶变换(DFT)及其逆变换的算法。若把 DFT 写成 Fourier 矩阵乘法
量级。
FFT 的基本原理
本页采用正号单位根约定
若采用工程软件中常见的负号单位根,得到的是共轭 Fourier 矩阵;递归结构相同,只是旋转因子取共轭。
FFT 的核心不是改变 DFT 的定义,而是把同一个矩阵乘法重新因式分解。对
定义约定与适用边界
DFT 本身由长度
radix-2 FFT 要求
输入可以是实数或复数。实输入的 DFT 满足共轭对称
所以实际软件常用 real FFT 只计算一半频谱;复输入则没有这个对称性。
FFT 的主要算法
-
Cooley-Tukey 算法:本页主线采用 radix-2 情形,把输入按偶数下标和奇数下标分成两个半长 DFT,再通过蝶形合并得到完整输出。
-
Good-Thomas、Rader 等变体:这些算法处理不同长度分解或素数长度等情形;在这里只作为 FFT 家族的补充背景,不作为本页推导主线。
一步偶奇分解
令
先计算两个半长 Fourier 变换
那么完整输出
给出。
推导直接来自把求和按偶数项与奇数项分开:
关键关系是
因此两个求和正是
所以合并公式中的第二项变为负号。这就是蝶形合并的代数来源。
Fourier 矩阵分解形式
把上面的偶奇拆分写成矩阵乘积,令
若
其中
第一因子完成蝶形合并,第二因子执行两个半长 Fourier 变换,第三因子只改变输入顺序。未归一化 Fourier 矩阵的列正交性可写成
等价地,归一化矩阵
当
的三因子分解
四点情形已经包含 FFT 的完整结构。设
最右侧矩阵是 even-odd permutation,把
FFT 的计算复杂度
直接计算
若
例如
次,约一百万次;FFT 的旋转因子乘法为
次,节省约两个数量级。
位反转顺序
每一层都先把偶数下标放在奇数下标之前。把所有层的 even-odd permutation 合起来,会得到二进制位反转顺序。以
所以
许多迭代式 FFT 实现先按这个顺序重排输入,再逐层执行蝶形合并。
线性代数解释与唯一性
从矩阵分解角度看,FFT 把稠密 Fourier 矩阵写成置换矩阵、块对角小 Fourier 矩阵、对角旋转因子和蝶形矩阵的乘积。每个因子都很稀疏或结构化,因此整体乘法比直接使用
这就是 Parseval 恒等式的矩阵形式。
FFT 分解不唯一。可以按时间抽取或频率抽取组织蝶形,可以选择不同 radix,也可以把同一组旋转因子分配到不同层。只要符号和归一化一致,这些算法计算的是同一个 DFT;差异主要体现在内存访问顺序、常数因子、并行性和舍入误差分布。
边界情形中,
FFT 的应用
-
信号处理:FFT 是信号分析中的核心工具,用于频谱分析、滤波和信号检测。
-
图像处理:在图像压缩和图像分析中,FFT 用于快速变换到频域。
-
音频处理:在音频分析和处理中,FFT 用于分析音频信号的频率成分。
-
数据压缩:FFT 用于数据压缩算法中,以减少数据的存储和传输需求。
-
量子计算:在量子算法中,FFT 是量子傅里叶变换的基础。
-
机器学习:在某些机器学习算法中,FFT 用于快速计算卷积和相关性。
FFT 算法的高效性使其成为现代计算中不可或缺的一部分,特别是在需要处理大量数据的应用中。