我正在使用python并希望执行以下操作。我有一个wav音频文件,我想阅读并绘制频率响应。我只对3-4秒的时间窗口感兴趣,而不是整个文件。另外,我想将我的输入文件重新采样为48k,而不是将其作为。
我希望我的情节是线条,FFT长度为8192,汉明窗口,logx刻度为20 - 20k Hz。
答案 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中剪下所需的箱子。