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);
4

2 回答 2

8

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

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

这本质上是短时傅里叶变换(STFT)。

于 2013-01-15T00:03:22.020 回答
0

如果你有信号处理工具箱,那么频谱图就是你要走的路(正如 Oli Charlesworth 提到的)。

如果您没有它,MATLAB 中央文件交换始终是寻找通用内容的好地方。

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

这似乎是频谱图功能的明智且运行良好的实现。

于 2013-01-15T12:51:10.287 回答