我正在使用python,并想执行以下操作。我有一个wav音频文件,我想要读取和绘制频率响应。我只对3-4秒的时间窗口感兴趣,而不是整个文件。另外,我想将我的输入文件重新采样为48k,而不是192k。
我想我的图是与线,快速傅立叶变换长度8192,汉明窗口,对数比例从20 - 20k赫兹。
发布于 2016-02-27 16:50:05
在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个样本。
发布于 2016-02-27 08:28:32
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中剪切出所需的柱状图。
https://stackoverflow.com/questions/35663232
复制相似问题