我正在开展一个项目,其中包括使用波形文件查看音高/频率随时间的变化(我是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);
答案 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
这似乎是频谱图功能的合理且良好的实现方式。