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

6

我正在处理一个涉及使用波形文件查看时间内音高/频率变化的项目(我对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
你说:“我该如何分离频率并在每个时间点显示它?” 对此有一些好的答案,但重要的是要意识到,在你想要的意义上,不存在瞬时频率这样的东西。换句话说,没有频率值与每个时间点唯一对应(或者至少,你无法从时域数据中推导出这些信息。如果你能够这样做,那么你将违反海森堡不确定性原理)。 - Bjorn Roche
2个回答

8
如果您拥有信号处理工具箱,则可能会发现spectrogram函数很有用。
如果没有,您可以通过计算时间域数据的连续(可能重叠)窗口分段的FFT,然后绘制幅度来手动实现相同的效果。
这本质上是短时傅里叶变换(STFT)。

另外,你(楼主)正在尝试的是时频分析领域。如果你感兴趣,有很多文章介绍使用短时傅里叶变换等技术(MATLAB的spectrogram函数使用的就是这种技术)。这是一个有趣的话题! - notthetup
谢谢你的帮助!实际上我在寻找的是一种类似于折线图的东西,不过我认为我可以学会读取谱图。 - airplaneman19
@airplaneman19:很高兴我能帮到你。但请注意Bjorn上面的评论。 - Oliver Charlesworth

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接