2016-06-15 61 views
1

我的原始問題如下: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

回答

2

你行

a_shift = np.fft.fftshift(a) 

重新排序您的原始時域信號。這意味着在FFT方面你正在改變階段。 還請注意,您的信號中存在不連續性。通過上面的線,這個不連續性被移到信號的中心,這導致FFT產生無限量的高頻餘弦分量。如果你將它轉移到另一個地方,能源將相應地分配。 另一個問題是你只考慮頻譜的實際部分,即i。即餘弦分量。也總是看虛擬部分! 還要看看幅度譜,看看不連續性的位置隻影響相位。總能量總是保持不變。

comparison