FFTshift导致振荡 - 为什么? (numpy)

问题描述:

我的原始问题如下:FFTshift导致振荡 - 为什么? (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(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

+3

移位之前:低频率是在0和100的移位后,它们在50中,就好像它们在相当高的频率。 FFT和FFT^{ - 1}非常接近。因此,随着移位信号的FFT被计算,出现高频闭塞。 'np.fft.fftshift()'仅用于在曲线中间显示低频。仅用于显示! – francis

你行

a_shift = np.fft.fftshift(a) 

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

comparison