我什么时候应该使用 fftshift(fft(fftshift(x))) 什么时候使用 fft(x)?

When should I use fftshift(fft(fftshift(x))) and when fft(x)?

我正在尝试在 python 中实现一个算法,但我不确定何时应该使用 fftshift(fft(fftshift(x))) 以及何时只使用 fft(x)(来自 numpy)。是否有基于输入数据形状的经验法则?
由于向量 x.

中的偶数个值,我使用 fftshift 而不是 ifftshift

这真的取决于你想要什么。 DFT(以及 FFT)在频域中是周期性的,周期等于 2pi。

fft() 函数将 return 具有 omega (radians/s) 的 DFT 的近似值从 0pi(即 0fs,其中 fs 是采样频率)。 fftshift() 所做的只是在中间交换 fft() 的输出向量。所以 fftshift(fft()) 的输出现在是从 -pi/2pi/2.

通常,人们喜欢使用 FFT 绘制 DTFT (or maybe even the CTFT) 的良好近似值,因此他们用大量零填充输入(函数 fft() 在它自己的),然后他们使用 fftshift() 函数在 -pipi 之间绘制。

换句话说,用fftshift(fft())作图,fft()作数学!

fft(fftshift(x)) 旋转输入向量,使复数 FFT 结果的相位相对于原始数据的中心 window。如果输入波形在 FFT 宽度中不是精确的整数周期,则相对于原始数据 window 中心的相位可能比相对于不连续开始和结束之间的某个平均的相位更有意义。 fft(fftshift(x)) 还具有 属性 结果的虚部对于任何反对称波形分量的 window 中心的正过零始终为正。

fftshift(fft(y)) 旋转 FFT 结果,使 DC bin 位于结果的中心,介于 -Fs/2 和 Fs/2 之间,这是常见的频谱显示格式。