matlab 在调用FFT或IFFT之前,我需要调用fftShift吗?

disbfnqx  于 2022-11-15  发布在  Matlab
关注(0)|答案(6)|浏览(663)

在David Voelz的《计算傅立叶光学,一个Matlab教程》一书中写道,在调用fftifft之前需要调用fftshift,但在fftshift的matlab文档中只写到了这个命令
通过将零频分量移动到阵列中心来重新排列fftfft2fftn的输出。
文档中没有提到应该在调用fft之前调用该命令,我看到了一些在没有事先调用fftshift的情况下调用fft的示例。
我的问题是:在调用fftifft之前是否需要调用fftshift
如果在调用fft之前不需要调用fftshift,而只需要在调用fft之后调用fftshift,那么我们应该在什么时候(如果有的话)使用与计算数据集的fft相关的命令ifftshift

zzzyeukh

zzzyeukh1#

为了节省计算时间,MatLab fft仅计算频谱的一半(如果采样数为奇数,则为正频率和零频率)。然后,将频谱的后半部分(即前半部分的复共轭)添加到该向量的末尾。
因此,在fft之后得到的是以下向量:

0 1 2 3 ... Fs/2   -Fs/2 ... -3 -2 -1
<----------------> <------------------>
  positive freq        negative freq

其中Fs是频率样本。
现在,fftshift所做的只是移动向量开始处的负频率段(频谱的第二部分),这样你就可以显示一个很好的频谱,从-Fs/2+Fs/2结束。平移后的向量变为:

-Fs/2 ... -3 -2 -1   0 1 2 3 ... Fs/2
<------------------> <---------------->
    negative freq      positive freq

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

gfttwv5a

gfttwv5a2#

如果您继续阅读关于fftshift的文档:“它对于可视化频谱中间具有零频率分量的傅里叶变换很有用。”
移位不是执行FFT所必需的,但它可以方便地可视化傅里叶变换。因此,是否使用fftshift取决于您是否希望可视化您的转换。

svujldwt

svujldwt3#

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

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

fftshift提供

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

你可以看到相间的不连续。如果执行ifftshift,负频率将移回正数:

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

鉴于,fftshift再次提供:

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

可以看出,相位单调性是不同的,(又名,fftshift-ifftshift情况给出[减少,增加]和fftshift-fftshift情况给出[增加,减少])。

7cwmlq89

7cwmlq894#

简单的答案是在调用FFT之前不需要调用fftshiftfftshift不影响快速傅里叶变换的计算。FftShift重新排列矩阵中的值。例如:

cameraman = imread('cameraman.tif');
fftshifted_cameraman = fftshift(cameraman);
subplot(1,2,1); imshow(cameraman); title('Cameraman');
subplot(1,2,2); imshow(fftshifted_cameraman); title('FFTShifted Cameraman');
ghg1uchk

ghg1uchk5#

鉴于你正在研究的这本书的书名,我假设你正在处理图像。然后,正确的方法是在调用[i]FFT之前和之后调用fftShift和ifftShift。
您的代码应该如下所示

spectrum = fftshift(fft2(ifftshift(myimage))

当应用逆傅立叶变换时,这是完全相同的

myimage = fftshift(ifft2(ifftshift(spectrum))
uqzxnwby

uqzxnwby6#

这取决于您要如何处理转换后的数据。如果在变换之前不执行fftShift,则FFT结果将每隔一个值乘以-1。如果您计划查看结果的大小或平方,这并不重要。但是,如果您计划比较相邻的光谱值,并且相位很重要,则需要在变换之前应用fftShift以避免交替符号。

相关问题