在David的“计算傅里叶光学,Matlab教程”一书中,有人写到在调用fft或ifft之前需要调用fft,但在fftshift的MATLAB文档中,只编写了以下命令
通过将零频率分量移动到数组的中心,重新排列
fft、fft2和fftn的输出。
在文档中没有提到应该在调用fft之前调用这个命令,而且我看到了一些在没有调用fftshift的情况下调用fftshift的例子。
我的问题是:在调用fft或ifft之前是否需要调用fft或ifft
如果fftshift不需要在调用fft之前调用,并且只需要在调用fft之后调用,那么我们什么时候应该使用(如果有的话)命令ifftshift来计算数据集的fft?
发布于 2015-08-24 08:22:23
为了节省计算时间,matlab fft只计算一半的频谱(正频率和零频率,如果样本数是奇数的话)。然后,将频谱的后半部分(即前半部分的复共轭)加到这个向量的末尾。
因此,在fft之后得到的是以下向量:
0 1 2 3 ... Fs/2 -Fs/2 ... -3 -2 -1
<----------------> <------------------>
positive freq negative freq其中Fs是频率样本。
现在,fftshift所做的就是把负频率箱(频谱的第2部分)移到矢量的开头,这样你就可以显示一个很好的频谱,从-Fs/2开始,到+Fs/2结束。移位矢量变成:
-Fs/2 ... -3 -2 -1 0 1 2 3 ... Fs/2
<------------------> <---------------->
negative freq positive freq因此,要回答您的问题,不需要在调用fft或ifft之后或之前使用ifft。但是,如果在向量上使用了fftshift,则应该通过应用ifftshift或fftshift来撤销它。(我认为这两个电话是等价的。)
发布于 2015-08-23 13:00:12
如果你继续阅读fftshift上的文档:“这对于可视化频谱中间的零频率成分的傅里叶变换很有用。”
这种移位对于执行fft并不是必要的,但是可视化傅里叶变换是很方便的。因此,是否使用fftshift取决于您是否希望可视化您的转换。
发布于 2017-11-02 19:35:52
请注意,ifftshift与fftshift不同,因为它将负值移回正数。假设在fftshift前频域有一个简单的3bin单位脉冲。
[0, exp(-jw1), exp(-(jw1-pi)=exp(-jw1+pi)];fftshift给出
[exp(-jw1+pi)], 0, exp(-jw1)];你可以看到相位上的不连续性。如果执行ifftshift,负freq将移回正数:
[0, exp(-jw1), exp(-jw1+pi)];然而,fftshift再次给出:
[exp(-jw1), exp(-jw1+pi), 0];可以看出,相位单调性是不一样的(即,fftshift-ifftshift情形给出了减少,增加了,fftshift-fftshift情形给出了相位的增减)。
https://stackoverflow.com/questions/32166879
复制相似问题