我正在尋找如何把頻率軸在FFT(經由scipy.fftpack.fftfreq截取)轉換成頻率以赫茲,而不是箱或小數二進制位。SciPy的/ numpy的FFT頻率分析
我試圖以下代碼來測試出FFT:
t = scipy.linspace(0,120,4000)
acc = lambda t: 10*scipy.sin(2*pi*2.0*t) + 5*scipy.sin(2*pi*8.0*t) + 2*scipy.random.random(len(t))
signal = acc(t)
FFT = abs(scipy.fft(signal))
FFT = scipy.fftpack.fftshift(FFT)
freqs = scipy.fftpack.fftfreq(signal.size)
pylab.plot(freqs,FFT,'x')
pylab.show()
採樣速率應當是4000個樣本/120秒= 33.34樣本/秒。
該信號具有2.0赫茲信號,8.0 Hz的信號,和一些隨機噪聲。
我把FFT,抓住頻率,並繪製它。這些數字非常荒謬。如果我將頻率乘以33.34(採樣頻率),那麼我會在大約8 Hz和15 Hz處得到峯值,這似乎是錯誤的(也是頻率應該是4的因數,而不是2!)。
我在做什麼錯在這裏有什麼想法嗎?
謝謝你這樣一個完整的答案。 hyry,爲什麼你選擇繪製20 * scipy.log10(FFT)而不是FFT? – Archie1986 2013-12-24 00:38:06
HYRY爲您提供了一個以dB爲單位的Y軸圖,並且20log10爲幅度譜提供了正確的轉換。 – OldTinfoil 2014-05-15 16:06:20