我正在尝试在python中实现一个算法,但我不确定何时应该使用fftshift(fft(fftshift(x)))
,何时只使用fft(x)
(来自numpy)。是否有基于输入数据形状的经验法则?
由于向量fftshift
中的值为偶数,我使用的是ifftshift
而不是x
。
答案 0 :(得分:5)
这实际上取决于你想要什么。 DFT(以及因此FFT)在频域中是周期性的,周期等于2pi。
fft()
函数将返回DFT的近似值,其中omega(弧度/秒)从0
到pi
(即0
到fs
,其中fs
是采样频率。所有fftshift()
都会将fft()
的输出向量交换到中间。因此fftshift(fft())
的输出现在从-pi/2
到pi/2
。
通常,人们喜欢使用FFT绘制DTFT(或者甚至是CTFT)的良好近似值,因此他们用大量的零对输入进行零填充(函数) fft()
在其上执行此操作)然后他们使用fftshift()
函数在-pi
和pi
之间进行绘图。
换句话说,使用fftshift(fft())
进行绘图,使用fft()
进行数学计算!
答案 1 :(得分:4)
fft(fftshift(x))旋转输入向量,使得复FFT结果的相位相对于原始数据窗口的中心。如果输入波形在FFT宽度中不是精确的整数周期,则相对于原始数据窗口的中心的相位可能比相对于不连续开始和结束之间的某些平均的相位更有意义。 fft(fftshift(x))还具有以下特性:对于任何反对称波形分量的窗口中心的正零过零,结果的虚部将始终为正。
fftshift(fft(y))旋转FFT结果,使得DC bin位于结果的中心,介于-Fs / 2和Fs / 2之间,这是一种常见的频谱显示格式。