MATLAB - 绘制.wav文件的时频图

时间:2013-01-15 00:00:58

标签: matlab graph signal-processing frequency wave

我正在开展一个项目,其中包括使用波形文件查看音高/频率随时间的变化(我是MATLAB的新手,但不是编程)。我能够看到时间幅度图和频率幅度(在FFT之后)图,但是我如何能够隔离频率并在每个时间点显示频率?

代码:

filename = '/Users/Username/Sample_1.wav'

[y, fs] = wavread(filename);
y = y(:,1);
dt = 1/fs;
t = 0:dt:(length(y)*dt)-dt;
plot(t,y); xlabel('Seconds'); ylabel('Amplitude');

transformed = fft(y);
mag = abs(transformed);
plot(mag);

2 个答案:

答案 0 :(得分:8)

如果您有信号处理工具箱,那么您可能会发现spectrogram功能很有用。

如果不这样做,那么您可以通过计算时域数据的连续(可能重叠)窗口段的FFT来手动实现相同的效果,然后绘制幅度。

这基本上是short-time Fourier transform(STFT)。

答案 1 :(得分:0)

如果你有信号处理工具箱,光谱图是要走的路(正如Oli Charlesworth所说)。

如果你没有,那么MATLAB中央文件交换总是一个寻找一般内容的好地方。

http://www.mathworks.com/matlabcentral/fileexchange/1553-spectrogram-short-time-ft-log-magnitude

这似乎是频谱图功能的合理且良好的实现方式。