我對Matlab很新穎,我正在嘗試編寫一個基於簡單頻率的語音檢測算法。最終目標是在wav文件上運行腳本,併爲每個語音段輸出開始/結束時間。如果使用代碼:Matlab:在音頻數據幀中查找主頻率
fr = 128;
[ audio, fs, nbits ] = wavread(audioPath);
spectrogram(audio,fr,120,fr,fs,'yaxis')
我得到一個有用的頻率強度隨時間變化曲線圖是這樣的:
通過看它,它很容易看到,當出現語音。我可以編寫一個算法,通過查看每個x軸幀來自動化檢測過程,計算出哪些頻率占主導地位(具有最高強度),測試主頻率以查看它們是否足夠超過某個強度閾值(圖中黃色和紅色之間的差異),然後將該幀標記爲語音或非語音。一旦幀被標記,就很容易得到每個語音段的開始/結束時間。
我的問題是,我不知道如何訪問該數據。我可以使用代碼:
[S,F,T,P] = spectrogram(audio,fr,120,fr,fs);
獲得光譜圖的所有功能,但該代碼的結果對我沒有任何意義。 S,F,T,P數組和矩陣的界限與我在圖上看到的任何東西都沒有關係。我瀏覽過幫助文件和API,但是當我們開始討論算法名稱和首字母縮略詞時,我感到困惑 - 我的DSP背景非常有限。
如何獲得頻譜圖分析每幀的頻率強度值數組?我可以從那裏找出其餘部分,我只需要知道如何獲取適當的數據。
我很困惑 - 哪裏實際音頻數據就進入方程? – Cbas
我的意思是,我知道我可以通過做'q = 10 * log(abs(fftshift(fft(audio))))'來得到方程給我的任何數據,'但是我不確定哪些數據那是。這是一個335570x1矢量,最小值爲0.0218,最大值爲497,它應該表示什麼? – Cbas
你應該將緩衝區分成更小的數據包並分析每個數據包 – 0x90