首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在拨打fft或ifft之前,我需要拨打fftshift吗?

在拨打fft或ifft之前,我需要拨打fftshift吗?
EN

Stack Overflow用户
提问于 2015-08-23 12:56:27
回答 5查看 22K关注 0票数 13

在David的“计算傅里叶光学,Matlab教程”一书中,有人写到在调用fftifft之前需要调用fft,但在fftshift的MATLAB文档中,只编写了以下命令

通过将零频率分量移动到数组的中心,重新排列fftfft2fftn的输出。

在文档中没有提到应该在调用fft之前调用这个命令,而且我看到了一些在没有调用fftshift的情况下调用fftshift的例子。

我的问题是:在调用fftifft之前是否需要调用fftifft

如果fftshift不需要在调用fft之前调用,并且只需要在调用fft之后调用,那么我们什么时候应该使用(如果有的话)命令ifftshift来计算数据集的fft

EN

回答 5

Stack Overflow用户

发布于 2015-08-24 08:22:23

为了节省计算时间,matlab fft只计算一半的频谱(正频率和零频率,如果样本数是奇数的话)。然后,将频谱的后半部分(即前半部分的复共轭)加到这个向量的末尾。

因此,在fft之后得到的是以下向量:

代码语言:javascript
复制
 0 1 2 3 ... Fs/2   -Fs/2 ... -3 -2 -1
<----------------> <------------------>
  positive freq        negative freq

其中Fs是频率样本。

现在,fftshift所做的就是把负频率箱(频谱的第2部分)移到矢量的开头,这样你就可以显示一个很好的频谱,从-Fs/2开始,到+Fs/2结束。移位矢量变成:

代码语言:javascript
复制
 -Fs/2 ... -3 -2 -1   0 1 2 3 ... Fs/2
<------------------> <---------------->
    negative freq      positive freq

因此,要回答您的问题,不需要在调用fftifft之后或之前使用ifft。但是,如果在向量上使用了fftshift,则应该通过应用ifftshiftfftshift来撤销它。(我认为这两个电话是等价的。)

票数 10
EN

Stack Overflow用户

发布于 2015-08-23 13:00:12

如果你继续阅读fftshift上的文档:“这对于可视化频谱中间的零频率成分的傅里叶变换很有用。”

这种移位对于执行fft并不是必要的,但是可视化傅里叶变换是很方便的。因此,是否使用fftshift取决于您是否希望可视化您的转换。

票数 5
EN

Stack Overflow用户

发布于 2017-11-02 19:35:52

请注意,ifftshiftfftshift不同,因为它将负值移回正数。假设在fftshift前频域有一个简单的3bin单位脉冲。

代码语言:javascript
复制
[0, exp(-jw1), exp(-(jw1-pi)=exp(-jw1+pi)];

fftshift给出

代码语言:javascript
复制
[exp(-jw1+pi)], 0, exp(-jw1)];

你可以看到相位上的不连续性。如果执行ifftshift,负freq将移回正数:

代码语言:javascript
复制
[0, exp(-jw1), exp(-jw1+pi)];

然而,fftshift再次给出:

代码语言:javascript
复制
[exp(-jw1), exp(-jw1+pi), 0];

可以看出,相位单调性是不一样的(即,fftshift-ifftshift情形给出了减少,增加了,fftshift-fftshift情形给出了相位的增减)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32166879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档