簡體   English   中英

Python FFT 音頻文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM