快速傅里叶变换
快速傅里叶变换的引入为了解决传统DFT巨大的算法复杂度.
根据DFT定义
M ( k ) = ∑ n = 0 N − 1 m ( n ) W N n k , k = 0 , 1 , ⋯ N − 1 M(k)=\sum_{n=0}^{N-1}m(n)W_N^{nk} \quad,\quad k=0,1,\cdots N-1 M(k)=n=0∑N−1m(n)WNnk,k=0,1,⋯N−1
可以看到在一次计算中需要执行N次复数乘法和N-1次复数加法,共执行N次,因此时间复杂度为 O ( N 2 ) O(N^2) O(N2),可以说是一个很糟糕的算法,对于大数据的处理十分吃力.
所以这一朴素算法势必被优化,这也就出现了今天要讲解的FFT算法
FFT算法的根本是基于 W N n k W_N^{nk} WNnk的对称性
( W N n k ) ∗ = W N − n k W N n k = W N ( n + N ) k = W N n ( k + N ) (W_N^{nk})^* = W_N^{-nk} \\ W_N^{nk}=W_N^{(n+N)k}=W_N^{n(k+N)} (WNnk)∗=WN−nkWNnk=WN(n+N)k=WNn(k+N)
但是以下推导基本不用,需要知道的是
W N 2 k = W N 2 k (1) W_N^{2k}=W_{\frac N2}^k \tag{1} WN2k=W2Nk(1)
证明如下:
W N k = e − j 2 π N k W_N^{k}=e^{-j\frac{2\pi}{N}k} WNk=e−j