FFTshift引起振荡 - 为什么? (numpy的)

时间:2016-06-15 07:02:27

标签: python numpy fft ifft

我原来的问题如下:

我在数组a中有一个脉冲包络(0-元素=时间0,最后一个元素=时间T)。 我想要脉冲的傅里叶谱。所以我做的是np.fft.fftshift(np.fft.fft(a))。都好。

但后来我被告知要事先换班:np.fft.fftshift(np.fft.fft(np.fft.fftshift(a)))。然后出现振荡。

现在我想知道为什么人们会如上所示进行2次换班以及为什么会出现振荡......

这里的例子如下: 我有以下代码

x = np.arange(100)
a =np.sin(np.pi*x**2/1000)

一个: a(x)

a_fft = np.fft.fft(a)

a_fft: enter image description here

 a_fft_shift = np.fft.fftshift(a_fft)

a_fft_shift: enter image description here

    a_shift = np.fft.fftshift(a)
    a_shift_fft = np.fft.fft(a_shift)

a_shift_fft: enter image description here

    a_shift_fft_shift = np.fft.fftshift(a_shift_fft)

a_shift_fft_shift: enter image description here

1 个答案:

答案 0 :(得分:3)

你的行

a_shift = np.fft.fftshift(a)

重新排序原始时域信号。这意味着在FFT方面,您正在改变阶段。 另请注意,信号中存在不连续性。通过上面的线,这种不连续性被转移到信号的中心,这导致FFT产生无限量的高频余弦分量。如果将它转移到另一个地方,能量将相应地分配。 另一个问题是你只考虑频谱的真实部分,即。例如,余弦成分。总是看看想象中的部分! 还要看一下幅度谱,看看不连续点的位置只影响相位。总能量保持不变。

comparison