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