繁体   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