由于fft非常烧脑,特地写一个博客以防以后忘掉。其中内容大部分参考吴永辉老师的课件,模板是刘昆老师提供的,在此由衷地表示感谢。
概念
多项式 A ( x ) = a 0 + a 1 x + a 2 x 2 + ⋅ ⋅ ⋅ + a n − 1 x n − 1 A(x)=a_{0}+a_{1}x+a_{2}x^{2}+\cdot \cdot \cdot +a_{n-1}x^{n-1} A(x)=a0+a1x+a2x2+⋅⋅⋅+an−1xn−1有两种表示法:系数表示法和点值表示法。
因为系数最高项为 n n n 的多项式 A ( x ) A(x) A(x) 可以看成 n n n 个点组成的函数图像
假设多项式 A ( x ) , B ( x ) A(x),B(x) A(x),B(x)所取的点横坐标都相同,则 A ( x ) ∗ B ( x ) A(x)*B(x) A(x)∗B(x)的点值就可表示为 ( x 1 , A ( x 1 ) ∗ B ( x 1 ) ) , ( x 2 , A ( x 2 ) ∗ B ( x 2 ) ) , ⋅ ⋅ ⋅ , ( x n , A ( x n ) ∗ B ( x n ) ) { (x_{1}, A(x_{1})*B(x_{1})), (x_{2}, A(x_{2})*B(x_{2})), \cdot \cdot \cdot , (x_{n}, A(x_{n})*B(x_{n}))} (x1,A(x1)∗B(x1)),(x2,A(x2)∗B(x2)),⋅⋅⋅,(xn,A(xn)∗B(xn))
把一个多项式的点值表示法转化为系数表示法的过程,就是离散反傅里叶变换(Inverse Discrete Fourier Transform,IDFT)。
快速傅里叶变换(Fast Fourier Transformation,FFT)就是通过取某些特殊的x的点值来加速DFT和IDFT的过程。
取哪些值呢?首先想到的肯定是1,1的任何次方都是1,但这远远不够,这时我们引用复数。
如果复数 w w w 满足 w n = 1 w_{n}=1 wn=1 ,则复数 w w w 是 n n n 次单位复数根。 n n