![](/img/trans.png)
[英]Is this the correct way to read FFT of a audio file? (python + wav)
[英]Python FFT an audio file
我正在嘗試從 wav 文件繪制幅度頻譜,文件的采樣率為 44.1KHz,我只想計算前 100 個樣本的 FFT,為此我使用的是np.fft.fft()
但是我得到了意想不到的結果,請參見圖 1。
當我計算至少 2048 個樣本的 FFT 時,我只會得到預期的結果。 為什么?
這是我的代碼:
import numpy as np
import matplotlib.pyplot as plt
def normalizeAudio(data):
return np.float32((data / max(data)))
SAMPLE_FOR = 1 # in seconds
samplerate, data = scipy.io.wavfile.read(r'Recording.wav')
data = normalizeAudio(data[0:int(samplerate*SAMPLE_FOR)])
fft_out = np.fft.fft(data[0:100])
freq_vector = np.arange(0, 44100, 44100 / 100)
plt.plot(freq_vector, np.abs(fft_out))
plt.show()
看看librosa ,它是一個非常好的 Python 音頻分析庫,包括色譜圖、頻譜圖、敲擊圖和其他很酷的東西。
關於堆棧溢出的示例和其他很多內容都有很好的記錄,所以我不會在這里復制它們。
此外,我見過的大多數應用程序都傾向於使用 STFT,短期傅立葉變換(又名 DFT,離散傅立葉變換)。 這仍然比普通 FFT 快得多,並且對於建模和控制輸入形狀的事情更有用,並且還消除了使用 FFT 可以獲得的大量噪聲,因為它需要窗口而不是瞬時變化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.