file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-17569.png
所以你如果用FFT反变换计算的是实数时域,则要满足上图的对称性。
--------------------------------
FFT如何工作
FFT的计算可以分为三步:首先将1个N点的时域信号分成N个1点的时域信号,然后计算这N个1点时域信号的频域,得到N个频域的点,然后将这个N个频域的点按照一定的顺序加起来,就得到了我们需要的频谱。这里每个点的意思是复数,都有实部和虚部。
第一步的信号分解按照下面的规律执行:
file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-9479.png
file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-18447.png
可以看出它是按照比特反转顺序来分解的。
第二步是计算每个点的频谱:
这一步很简单,因为一个时域的点的频谱的数值就是它自己,所以这一步什么也不需做,但需明白这时候N个点不是时域信号了,而是频域信号。
第三步是将这N个频域信号结合起来
这一步是最麻烦的一步。就是和前面时域分解的顺序相反,将2个1点的频域信号变成1个2点的频域信号,再将2个2点的频域信号变成1个4点的频域信号,一直到结束。这里看下如何将2个4点的频域信号变成1个8点的频域信号。
file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-14586.png
首先对1个4点的频域信号进行复制,这样能稀释时域信号,也对另1个4点的频域信号进行复制不过复制之前需要乘上正弦函数,这样得到的稀释时域信号时经过了平移的,然后将这两个频域信号加起来,如下图所示。之所以这么做的目的是在时域分解的时候就是用这种交织的分解方式的。file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-9251.png
以下是基本的运算,称为蝶形运算,它将2个1点的复数变成1个2点的复数。
file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-1309.png
以下是FFT运算的流程图
file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-9793.png
--------------------------------
运算速度比较
如果用相关方法计算DFT:
file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-13387.png
如果用FFT方法计算DFT:
file:///C:\DOCUME~1\WHOAMI~1\LOCALS~1\Temp\ksohtml\wps_clip_image-15549.png |