快速傅里叶变换 (FFT)
快速傅里叶变换(Fast Fourier Transform, FFT)是一种高效计算离散傅里叶变换(DFT)及其逆变换的算法,通过分治法将计算复杂度从 $O(N^2)$ 降低到 $O(N\log N)$,被IEEE评为20世纪十大算法之一。
历史
- 1805年:高斯为插值小行星轨道提出分治思想,手稿以新拉丁文撰写,生前未发表
- 1965年:Cooley和Tukey发表划时代论文,普及了FFT算法,其动机源于冷战核爆监测需求
- 现代:FFTW、cuFFT等软件库持续优化实现
核心原理
- 分治法:将长度为N的序列拆分为两个长度为N/2的子序列,递归处理
- 蝶形运算:通过交叉乘法和加法同时得到两个频率点的结果,大幅降低计算量
- 位反转:原地计算中数据重排的巧妙技术,节省内存空间
性能对比
当N=1024时,传统DFT需要超过1,000,000次运算,而FFT仅需约10,000次运算。
关键应用
- 通信:OFDM(4G/5G/Wi-Fi)的物理层基础
- 多媒体压缩:DCT(JPEG/MP3)的数学基础
- 大整数乘法:Schönhage-Strassen算法
- 科学计算:谱方法、湍流模拟、分子动力学
- 工业检测:超声检测、振动分析、模态分析
- 地质勘探:地震波反演、核爆监测
现代实现
- FFTW:MIT开发的自适应FFT库
- Intel MKL:针对Intel处理器深度优化的实现
- cuFFT:NVIDIA GPU加速库
- FPGA/ASIC:硬件级流水线实现
- 量子计算:量子傅里叶变换(QFT)是Shor算法的基础