2013-01-15 75 views
5

我正在研究一個項目,該項目涉及隨着時間的推移使用wave文件查看音高/頻率的變化(我是MATLAB新手,但不是編程) 。我能夠看到時間幅度圖和頻率幅度(FFT後)圖,但是我將如何能夠隔離頻率並在每個時間點顯示它?MATLAB - .wav文件的繪圖時間頻率圖

代碼:

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

你說「我將如何隔離頻率並在每個時間點顯示它?」就這一點而言,這有一些很好的答案,但重要的是要認識到,根本不需要瞬時頻率這樣的事情。換句話說,沒有唯一對應於每個時間點的頻率值(或者至少不能從時域數據導出信息,如果可以的話,你會違反海森堡不確定性原理) 。 –

回答

7

如果有信號處理工具箱,那麼你可能會發現spectrogram功能非常有用。

如果您不這樣做,那麼您可以通過計算時域數據的連續(可能重疊)窗口部分的FFT來手動獲得相同的效果,然後繪製振幅。

這實質上是short-time Fourier transform(STFT)。

+0

爲了補充......你(OP)正在嘗試做的事情屬於時頻分析領域。如果你有興趣,有很多文章用短期傅立葉變換(MATLAB'spectrogram'函數使用什麼)等技術編寫。這是一個有趣的話題! – notthetup

+0

感謝您的幫助!我實際上是在尋找更多沿線圖的東西,但我認爲可以學習閱讀譜圖。 – airplaneman19

+0

@ airplaneman19:很高興能幫到你。但是請注意上面的比約恩的評論。 –