我正在研究一个项目,该项目涉及使用波形文件查看音高/频率随时间的变化(我是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 回答
如果您有信号处理工具箱,那么您可能会发现spectrogram函数很有用 .
如果不这样做,那么您可以通过计算时域数据的连续(可能重叠)窗口段的FFT来手动实现相同的效果,然后绘制幅度 .
这基本上是short-time Fourier transform(STFT) .
如果你有信号处理工具箱,光谱图是要走的路(正如Oli Charlesworth所说) .
如果你没有它,MATLAB中央文件交换总是一个寻找一般的东西的好地方 .
http://www.mathworks.com/matlabcentral/fileexchange/1553-spectrogram-short-time-ft-log-magnitude
这似乎是频谱图功能的合理且良好工作的实现 .