2015-08-23 34 views
1

David Voelz在“Computational Fourier Optics,A Matlab Tutorial”一书中写道,在调用fft或ifft之前需要调用fftshift,但在Matlab命令fftshift的文档中,只写了这个命令“通过将零频分量移动到阵列中心来重新排列fft,fft2和fftn的输出”。在Matlab文档中没有提到这个命令应该在调用fft之前调用,并且我看到一些例子在事先没有调用fftshift的情况下调用fft。在打电话给fft或ifft之前,我需要调用Matlab fftshift吗?

我的问题是:在fft或ifft调用之前是否需要调用fftshift? 如果在调用fft之前不需要调用fftshift,并且只有在调用fft之后才能调用fftshift,那么我们何时应该使用(如果有的话)iffthift与计算数据集fft的关系?

+0

然后,无论您是否事先调用fftshift,调用fft都会返回相同的结果?这怎么可能 ? – user4861528

回答

1

如果您从fftshift: 的文档中继续阅读:“对于使用频谱中间的零频率分量可视化傅里叶变换非常有用。”

移位对于执行fft不是必须的,但是对傅里叶变换进行可视化很方便。因此,是否使用fftshift取决于您是否想要将变换可视化。

+0

那我们什么时候应该使用命令ifftshift? – user4861528

+0

我想当你改变你的数组绘图并分配,而不是在一个单独的变量你原来的数组。 – Adriaan

+0

然后,无论您是否事先调用fftshift,调用fft都会返回相同的结果?这怎么可能 ? – user4861528

1

该matlab fft只计算频谱的一半(正频率和零频率,如果您的样本数是奇数),以节省计算时间。

然后,频谱的后半部分(它是前半部分的复共轭)刚刚添加在该向量的末尾。

所以一个fft后,你得到的是:

0 1 2 3 ...(频率箱> 0)... Fs/2 -Fs/2 ...(频率仓< 0)... -3 -2 -1

Fs是频率样本。

现在,fftshift所做的只是在矢量的开始处移动负频率点(频谱的第二部分),以便显示一个好的频谱,从-Fs/2开始到+ Fs/2。

因此,要回答您的问题,不需要在致电fftifft之前使用fftshift。但是,如果您的矢量上使用了fftshift,则应通过应用ifftshiftfftshift(我认为这两个调用是等同的)进行撤消。

1

请注意,iffthift与fftshift不同,因为它将负移回到正值。假设在频域中的简单的3仓单位脉冲fftshift之前

[0,实验值(-jw1),实验值( - (JW1-π)= EXP(-jw1 + PI)];

fftshift给出

[exp(-jw1 + pi)],0,exp(-jw1)];

您可以看到阶段中的不连续性。如果执行ifftshift,则负频率将移回正数: [0,exp(-jw1),exp(-jw1 + pi)];

而,fftshift再次给出:

[EXP(-jw1),实验值(-jw1 + PI),0]; (aka,fftshift-ifftshift case给出[减少,增加]和fftshift-fftshift情况给出[增加,减少]相位)可以看出相位单调性不一样。

相关问题