鸣谢yveh,yhzq
http://www.yhzq-blog.cc/fft总结/
又来了,板子轰炸。。。
快疯掉。。。
FFT
FFT,即为快速傅氏变换,
是离散傅氏变换的快速算法,
它是根据离散傅氏变换的奇、偶、虚、实等特性,
对离散傅立叶变换的算法进行改进获得的。
设x(n)为N项的复数序列,
形如a0*x^0+a1*x+a2*a^2+…+an*x^n
由DFT变换,任一x(m)的计算都需要N次复数乘法和N-1次复数加法,
而一次复数乘法等于四次实数乘法和两次实数加法,
一次复数加法等于两次实数加法,
即使把一次复数乘法和一次复数加法定义成一次“运算”
(四次实数乘法和四次实数加法),那么求出N项复数序列的x(m),
即N点DFT变换大约就需要N^2次运算。
当N=1024点甚至更多的时候,需要N2=1048576次运算,
在FFT中,利用Wn的周期性和对称性,
把一个N项序列(设N=2k,k为正整数),
分为两个N/2项的子序列,
每个N/2点DFT变换需要(N/2)^2次运算,
再用N次运算把两个N/2点的DFT变换组合成一个N点的DFT变换。
这样变换以后,总的运算次数就变成N*2(N/2)^2
继续上面的例子,N=1024时,总的运算次数就变成了525312次,
节省了大约50%的运算量。
而如果我们将这种“一分为二”的思想不断进行下去,
直到分成两两一组的DFT运算单元,
那么N点的DFT变换就只需要Nlog^2N次的运算,
N在1024点时,运算量仅有10240次,是先前的直接算法的1%,
点数越多,运算量的节约就越大,这就是FFT的优越性。
看起来好长一堆话,但是我还是认真的看下来了
豁然开朗【baidu大法好】
那问题来了,里面有概念看不懂啊
比如说复数?
那我们就需要初级数学普及
这样我们就对FFT有一个初步了解了
那么来一道例题?
有助于背板子
http://uoj.ac/problem/34
题解另见blog