FFTshift 导致振荡 - 为什么? (麻木的)

FFTshift causes oscillations - why? (numpy)

我原来的问题如下:

我在数组 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_fft = np.fft.fft(a)

a_fft:

 a_fft_shift = np.fft.fftshift(a_fft)

a_fft_shift:

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

a_shift_fft:

    a_shift_fft_shift = np.fft.fftshift(a_shift_fft)

a_shift_fft_shift:

你的线路

a_shift = np.fft.fftshift(a)

重新排序您的原始时域信号。这意味着就 FFT 而言,您正在改变相位。 另请注意,您的信号存在不连续性。通过上面的线,这种不连续性被转移到信号的中心,这导致 FFT 产生无限量的高频余弦分量。如果你把它移到另一个地方,能量就会相应地分配。 另一个问题是您只考虑频谱的实部,即。 e.,余弦分量。也总是看虚部! 另请查看幅度谱,发现不连续点的位置仅影响相位。总能量始终保持不变。