Python FFT音频文件
Posted
技术标签:
【中文标题】Python FFT音频文件【英文标题】:Python FFT an audio file 【发布时间】:2021-10-18 22:37:23 【问题描述】:我正在尝试从 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()
【问题讨论】:
前 100 个样本中真的有什么有趣的东西吗?毕竟,音频文件以静音开始的情况并不少见 我明白你的意思,有没有办法解决这个问题并且仍然计算 100 的 FFT?也许是抽取? @哈罗德 另外,计算频率需要随着时间的推移进行测量。您拥有的时间越少,您可以覆盖的频域就越少,即使实际上在数据集的那一部分中存在除静默之外的其他东西 【参考方案1】:看看librosa,它是一个非常好的python音频分析库,包括色谱图、频谱图、打击图和其他很酷的东西。
它有很好的例子,还有很多关于堆栈溢出的其他文档,所以我不会在这里复制它们。
此外,我见过的大多数应用程序都倾向于使用 STFT,即短期傅立叶变换(又名 DFT,离散傅立叶变换)。这仍然比普通的 FFT 快得多,并且对于建模和控制输入形状的东西更有用,并且还消除了 FFT 可以得到的大量噪声,因为它需要窗口而不是瞬时变化。
【讨论】:
以上是关于Python FFT音频文件的主要内容,如果未能解决你的问题,请参考以下文章
在将数据输入 FFT 用于音频频谱分析仪之前,使用 python 将 wav 文件转换为 csv 文件 [关闭]