在David Voelz的《计算傅立叶光学,一个Matlab教程》一书中写道,在调用fft
或ifft
之前需要调用fftshift
,但在fftshift
的matlab文档中只写到了这个命令
通过将零频分量移动到阵列中心来重新排列fft
、fft2
和fftn
的输出。
文档中没有提到应该在调用fft
之前调用该命令,我看到了一些在没有事先调用fftshift
的情况下调用fft
的示例。
我的问题是:在调用fft
或ifft
之前是否需要调用fftshift
?
如果在调用fft
之前不需要调用fftshift
,而只需要在调用fft
之后调用fftshift
,那么我们应该在什么时候(如果有的话)使用与计算数据集的fft
相关的命令ifftshift
?
6条答案
按热度按时间zzzyeukh1#
为了节省计算时间,MatLab
fft
仅计算频谱的一半(如果采样数为奇数,则为正频率和零频率)。然后,将频谱的后半部分(即前半部分的复共轭)添加到该向量的末尾。因此,在
fft
之后得到的是以下向量:其中
Fs
是频率样本。现在,
fftshift
所做的只是移动向量开始处的负频率段(频谱的第二部分),这样你就可以显示一个很好的频谱,从-Fs/2
到+Fs/2
结束。平移后的向量变为:因此,要回答您的问题,不需要在调用
fft
或ifft
之前或之后使用fftshift
。但是,如果您在向量上使用了fftshift
,则应该通过应用ifftshift
或fftshift
来撤消它。(我认为这两种说法是等同的。)gfttwv5a2#
如果您继续阅读关于
fftshift
的文档:“它对于可视化频谱中间具有零频率分量的傅里叶变换很有用。”移位不是执行FFT所必需的,但它可以方便地可视化傅里叶变换。因此,是否使用
fftshift
取决于您是否希望可视化您的转换。svujldwt3#
请注意,
ifftshift
与fftshift
不同,因为它将负数移回正数。假设在fftshift
之前在频域中有简单的3个面元单位脉冲fftshift
提供你可以看到相间的不连续。如果执行
ifftshift
,负频率将移回正数:鉴于,
fftshift
再次提供:可以看出,相位单调性是不同的,(又名,
fftshift
-ifftshift
情况给出[减少,增加]和fftshift
-fftshift
情况给出[增加,减少])。7cwmlq894#
简单的答案是在调用FFT之前不需要调用
fftshift
。fftshift
不影响快速傅里叶变换的计算。FftShift重新排列矩阵中的值。例如:ghg1uchk5#
鉴于你正在研究的这本书的书名,我假设你正在处理图像。然后,正确的方法是在调用[i]FFT之前和之后调用fftShift和ifftShift。
您的代码应该如下所示
当应用逆傅立叶变换时,这是完全相同的
uqzxnwby6#
这取决于您要如何处理转换后的数据。如果在变换之前不执行fftShift,则FFT结果将每隔一个值乘以-1。如果您计划查看结果的大小或平方,这并不重要。但是,如果您计划比较相邻的光谱值,并且相位很重要,则需要在变换之前应用fftShift以避免交替符号。