2012-09-22 213 views
3

我想找到一種方法來創建一個圖表,顯示一個音頻波形及其時間頻率數據(x軸上的時間,y軸上的波浪能量和頻率數據)。我有這樣的代碼,它在兩個獨立的情節:在matlab中繪製時間與頻率

[audio, fs] = wavread('audio.wav'); 

subplot(211) 
spectrogram(audio,256,200,256,fs,'yaxis') 

subplot(212) 
wavEnergy=audio(:,1); 
time=(1/fs)*length(wavEnergy); 
t=linspace(0,time,length(wavEnergy)); 
plot(t,wavEnergy); 

現在我需要兩個東西的幫助。

首先,我如何獲得以秒爲單位的光譜圖時間?現在它用0-340的x範圍(標記爲'時間')進行圖表,並且我知道該剪輯大約40秒長(另一個繪圖恰當地顯示這個)。

其次,我如何將它們繪製在一起?我知道我可以從譜圖中得到一個矩陣,但是我可以從矩陣中得到哪個陣列,並且如何將其時間範圍轉換爲秒?

編輯:

第一個問題解決了,但圖表還在做一些奇怪的事情 - 他們對數據的40多歲的兩個輸出,但圖的範圍和數據的偏移量是不同的。頻譜圖從0s-40s開始,但第一個.5s沒有顯示數據,波形圖從0s-45s開始,最後5s顯示沒有數據。我怎樣才能讓範圍和偏移量相同?

編輯2:

我只需要在兩個副區

+0

將這兩幅圖在同一時基上對齊取決於確定數據的採樣頻率。根據您傳遞給光譜圖的參數,採樣頻率爲1000 Hz。根據您對「時間=(1/8000)*長度(wavEnergy)」的定義,採樣頻率爲8000 Hz。這些不一致。要從wav文件獲取音頻採樣頻率,您可以使用'[audio,fs] = wavread('audio.wav')'。另外,我認爲你的subplot命令應該是'subplot(2,1,1)'而不是'subplot(211)'。 – cjh

+0

感謝您的解釋。我能夠得到正確的時間範圍,但我遇到了一個新問題以及 – Cbas

+0

nvm。你基本上回答了我的問題 - 如果你把它變成答案,我會接受它。 – Cbas

回答

3

同一時間軸上對齊這兩個圖解中使用axis tight;依賴於確定數據的採樣頻率。根據您傳遞給光譜圖的參數,採樣頻率爲1000 Hz。根據您對time = (1/8000)*length(wavEnergy)的定義,採樣頻率爲8000 Hz。這些不一致。要從wav文件中獲取音頻採樣頻率,您可以使用[audio, fs] = wavread('audio.wav')。另外,我認爲你的subplot命令應該是subplot(2,1,1)而不是subplot(211)