Skip to content

算法Algorithm

快速 Fourier 变换

Fast Fourier transform · FFT

利用单位根的偶奇分解在 O(nlog⁡n) 时间计算离散 Fourier 变换。

形式陈述 ​

输入是长度 n=2k、k≥0 的复数序列 a=(a0,…,an−1)。固定正号约定 ωn=e2πi/n,离散 Fourier 变换(DFT)的输出是完整向量

a^j=∑m=0n−1amωnjm,0≤j<n.

radix-2 FFT 在 n=1 时直接返回 a0。在 n≥2 时,递归计算偶数下标序列和奇数下标序列的长度 n/2 的 DFT,分别记为 Ej,Oj。对 0≤j<n/2 合并

a^j=Ej+ωnjOj,a^j+n/2=Ej−ωnjOj.

把原和拆成偶项与奇项,并使用 ωn2=ωn/2、ωnn/2=−1,就得到这两个等式;递归基例与合并共同证明输出正确。每个长度的旋转因子由给定单位根逐次相乘生成,共用线性次运算。因此在复数加法、乘法为单位成本且单位根已给定的精确算术模型中,

T(1)=Θ(1),T(n)=2T(n/2)+Θ(n),T(n)=Θ(nlog⁡(n+1)).

这是分治的运算计数;它不把任意精度复数的表示与运算视为实际机器中的常数成本。

按深度优先顺序执行 radix-2 递归,并及时复用或释放已经合并的子问题缓冲区,可将系数工作空间控制在 O(n),递归控制信息另占 O(log⁡(n+1)) 个索引或长度记录。这里按系数槽位计空间;系数表示的 bit 存储另计。

逆变换把 ωn 换成 ωn−1,最后除以 n:

am=1n∑j=0n−1a^jωn−jm.

将正变换代入,内层几何和在两个下标相同时为 n,否则为零,便证明互逆。对有限域等其他域,只要提供阶恰为 n 的单位根且 n 在域中可逆,相同蝶形、几何和与逆变换证明仍成立;这给出数论变换的代数接口。

直觉

FFT 不是一种新的变换,而是利用单位根的对称性快速计算离散 Fourier 变换。从系数表示切换到单位根上的点值表示后,多项式乘法变成逐点乘法;把偶数次与奇数次系数拆开后,在 n 次单位根上的两个半规模求值可复用,因为 ωnk+n/2=−ωnk,而单位根平方后又折半。递归由此把 n2 次直接求和降为 nlog⁡n,本质是结构化线性变换的分治。

FFT 的旋转因子与蝶形合并
例子与边界

对长度分别为 r,s≥1 的两个系数向量,取二次幂 N≥r+s−1 并补零。两次正变换、逐点相乘和一次逆变换得到它们的线性卷积:一般长度 N 的 DFT 乘积对应模 xN−1 的循环卷积,而这里乘积次数小于 N,没有系数绕回低位。

例如 a=(1,2,3,4),ω4=i。偶部 (1,3) 的 DFT 为 (4,−2),奇部 (2,4) 的 DFT 为 (6,−2),蝶形给出

a^=(10,−2−2i,−2,−2+2i).

使用负号单位根并除以 4 就恢复原向量。若只把正变换的符号改掉,两个非实坐标会互换;因而符号与归一化是输入输出接口的一部分。

DFT 的代数定义与 FFT 的 O(nlog⁡n) 运算计数都以精确算术为基准;机器实现遵循标准浮点运算模型时,每个蝶形还会引入舍入误差。整数卷积若要通过舍入恢复精确值,须证明每个实部误差小于 1/2;拆位或满足单位根条件的数论变换(NTT)提供另外的实现路线。补零长度不足以覆盖卷积结果次数时会得到循环卷积。经典 radix-2 实现要求长度为二次幂,其他长度可用 mixed-radix 或 Bluestein 等方法。DFT 定义中的正负号与归一化约定也必须前后一致。

推论与应用

FFT 结合序列、复数与分治法,用于快速多项式乘法、信号频谱、大整数乘法、生成函数算法和字符串相关计算;数论变换则在有限域中复现单位根结构,避免浮点误差。它计算的是有限循环群上的 DFT;Fourier 级数处理周期函数的无穷展开,Fourier 变换处理非周期函数的连续频率积分,三者共享频率分解思想,却有不同的对象、归一化与收敛问题。

量子 Fourier 变换与 FFT 共享有限 Fourier 矩阵,但输入输出接口不同:FFT 读取并返回整个经典复数向量,QFT 则对已经制备好的振幅态施加归一化 Fourier 矩阵,输出仍是量子态。态制备和读出全部经典系数的成本须另计,量子门数不能直接替代本页的完整向量计算成本。

FFT 的卷积接口还通向子集卷积,但后者的“加法”发生在子集并分拆上,需 Möbius/zeta 变换,不能直接把数组下标卷积公式照搬。超比较整数排序有时使用字级打包、多项式评估或卷积子程序;这不表示一般 FFT 排序,也不绕过任意比较键的决策树下界,模型仍须保留有限字长与整数操作。

有限循环群上的加性能量提供了一个四阶矩应用:若采用不归一化 DFT,集合指示数组满足 E(A)=n−1∑k|1A^(k)|4。当群阶 n 为二次幂时,本页的 radix-2 FFT 可以从频谱计算有多少有序四元组满足 a+b=a′+b′;若输入代表整数集合,仍须选择足够大的周期,避免不同整数和被模运算合并。

FFT 加速的离散卷积会按网格长度折叠频率。谱混叠与去混叠用单模态平方展示一个伪低频,并从保留带范围推导二次非线性的补零与截断规则。

参考资料
关系图谱14 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系