2013-11-25 38 views
1

所以我有這個單音音頻文件,其中包含人們說話,說話暫停,然後他們再次交談。當他們在說話,而他們不說話的時候,孩子們不時在背景中哭泣,汽車休息時間尖叫,當你在外面時聽到的東西。提高語音檢測算法的準確性

我的目標是在講話時保留這些部分,並在他們不講話時剪切這些部分。沒有必要過濾背景噪音。

基本上我的最終目標是有一個切割清單這樣

Start in seconds, End in seconds 

我有什麼企圖?

  1. 我手動創建的聲音僅由裝配在一起所有包含語音的部分的文件。(10秒)
  2. 我手動創建的噪聲僅由裝配在一起的所有不包含語音的部分的文件。(50秒),
  3. 我得到的頻率+振幅其通過應用快速傅立葉變換
  4. 我通過音頻文件走在每100毫秒,並採取FFT快照
  5. 我把一個快照的所有的值(在我的情況512)在列表中,並將其饋送到機器學習算法(numl)結合一個標籤(在第一種情況下語音=真,第二種情況下語音=假)
  6. 然後我使用我的主音頻文件,做基本相同,但這次使用我的機器學習模型的結果來確定是否它是講話與否,並輸出在幾秒鐘內實現這一點的時間。

我的問題是我得到了很多誤報和誤報。它似乎在沒有聲音時識別聲音,反之亦然。

原因可能是一個訓練有素的模型(我使用決策樹)還是需要採取其他措施才能獲得更好的結果?

+0

使用PCA到主揚聲器和背景噪聲中分離應該給你更好的數據開始。 – greeness

回答

0

關於語音的常見誤解是它被視爲不相關的數據幀序列。言語的核心屬性是它是一個持續的過程,而不僅僅是一系列數據點。

任何合理的VAD都應該考慮到這一點,並使用像HMM這樣的面向時間的分類器。在你的情況下,任何需要考慮時間的分類器將是一個簡單的基於能量的語音活動檢測,監測背景水平或基於GMM-HMM的VAD將比任何靜態分類器做得更好。

有關簡單算法的說明,您可以檢查Wikipedia

如果你正在尋找一個好的成熟的VAD的實現,你可以找到一個在的WebRTC項目,該VAD是由谷歌開發:

https://code.google.com/p/webrtc/source/browse/trunk/webrtc/common_audio/vad/

+0

你有一個c#的實現嗎? – Gewinn

+0

您可以通過interop來使用C#中的C代碼。很少有機會在C#中找到一個好的VAD,因爲它們大多數都是用C/C++/Matlab實現的。 –

+0

請分享如何在c#中通過谷歌在這個例子中使用這個非常VAD,通過編輯你的回覆給大家看。 – Gewinn

相關問題