读取音频wav文件并绘制在python中平滑的音频频率响应

时间:2016-02-26 22:55:04

标签: python audio fft wav frequency-analysis

我正在使用python并希望执行以下操作。我有一个wav音频文件,我想阅读并绘制频率响应。我只对3-4秒的时间窗口感兴趣,而不是整个文件。另外,我想将我的输入文件重新采样为48k,而不是将其作为。

我希望我的情节是线条,FFT长度为8192,汉明窗口,logx刻度为20 - 20k Hz。

2 个答案:

答案 0 :(得分:1)

在Python中不难做到,你只需要安装一些软件包:

import numpy as np
from scipy.io import wavfile
from scipy import signal
from matplotlib import pyplot as plt

sr, x = wavfile.read('file.wav')

x = signal.decimate(x, 4)
x = x[48000*3:48000*3+8192]
x *= np.hamming(8192)

X = abs(np.fft.rfft(x))
X_db = 20 * np.log10(X)
freqs = np.fft.rfftfreq(8192, 1/48000)
plt.plot(freqs, X_db)
plt.show()

我不明白,你的时间窗口为3-4秒。你的意思是窗口从3秒开始? (这是在上面的代码中完成的。)或者你是否意味着持续3秒的窗口?然后窗口必须是3 * 48000个样本。

答案 1 :(得分:0)

Matlab是最简单的:

[x,fs] = audioread('file.wav');

;; downsample 4:1
x = resample(x, 4, 1);

;; snip 8192 samples 3 seconds in
x = x(48000*3:48000*3+8192);

plot(abs(fft(x));

我会留给你让你按照你想要的方式格式化情节,但只是提示你需要构建一个频率轴并从fft中剪下所需的箱子。