WebRTC之語音活動檢測(VAD)演算法

來源:互聯網
上載者:User

原文轉載於:http://blog.csdn.net/shichaog/article/details/52399354  非常感謝。

VAD(Voice Activity Detection)演算法的作用是檢測語音,在遠場語音互動情境中,VAD面臨著兩個難題: 1.    如何成功檢測到最低能量的語音(靈敏度)。
2.    如何在多噪環境下成功檢測(漏檢率和虛檢率)。
漏檢反應的是原本是語音但是沒有檢測出來,而虛檢率反應的是不是語音訊號而被檢測成語音訊號的機率。相對而言漏檢是不可接受的,而虛檢可以通過後端的ASR和NLP演算法進一步過濾,但是虛檢會帶來系統資源使用率上升,隨之系統的功耗和發熱會進一步增加,而這會上升為可移動和隨聲攜帶裝置的一個難題。
本文基於WebRTC的AEC演算法,WebRTC的VAD模型採用了高斯模型,這一模型應用極其廣泛。
高斯分布

高斯分布又稱為常態分佈(Normal distribution/Gaussian distribution)。
若隨機變數X服從一個數學期望為μ,標準差為σ^2的高斯分布,則:
X~N(μ,σ^2)
其機率密度函數為:
f(x)=1/(√2π σ) e^(-〖(x-u)〗^2/(2σ^2 ))
高斯在webRTC中的使用:
f(x_k |Z,r_k)=1/√2π e^(-(x_k-u_z )^2/(2σ^2 ))
x_k是選取的特徵向量,webRTC中指x_k是六個子帶的能量(子帶是80~250Hz,250~500Hz,500Hz~1K, 1~2K,2~3K,3~4KHz,變數feature_vector存放的就是子帶能量序列),r_k是均值u_z和方差σ的參數結合,這兩個參數決定了高斯分布的機率。Z=0情況是計算雜訊的機率,Z=1是計算是語音的機率。

這裡採用最高頻率是4KHz的原因是,webRTC中程式將輸入(48KHz,32HKz,16KHz)都下採樣到8KHz,這樣根據奎斯特頻率定理,有用的頻譜就是4KHz以下。

當然也可以採用8KHz截止頻率,這樣就需要自己訓練和修改高斯模型的參數了,這個演算法我試過,要比基於DNN的方法好用,靈活性大些,體現在參數自適應更新上,舉例來說,在夜晚安靜家庭情境中,雜訊的均值就比較低的,白天周邊環境雜訊多了時,雜訊特徵的均值也會隨之調整,針對DNN的方法,參數一旦訓練完畢,那麼適用的情境的就定了,如果要增大適用情境,首先要收集目標情境的資料,標註好的資料重新訓練(通常要增加參數數量),這樣的過程會導致1.資料收集成本高,2.參數過多計算代價大(VAD一般是一直工作的)。


Webrtc採用的是GMM模型

等待視頻連結地址。
WebRTC演算法流程 1. 設定VAD激進模式

共四種模式,用數字0~3來區分,激進程度與數值大小正相關。
0: Normal,1:low Bitrate, 2:Aggressive;3:Very Aggressive
這些激進模式是和以下參數是息息相關的。
[cpp]  view plain  copy <comman_audio/vad/vad_core.c>   // Mode 0, Quality.   static const int16_t kOverHangMax1Q[3] = { 8, 4, 3 };   static const int16_t kOverHangMax2Q[3] = { 14, 7, 5 };   static const int16_t kLocalThresholdQ[3] = { 24, 21, 24 };   static const int16_t kGlobalThresholdQ[3] = { 57, 48, 57 };   // Mode 1, Low bitrate.   static const int16_t kOverHangMax1LBR[3] = { 8, 4, 3 };   static const int16_t kOverHangMax2LBR[3] = { 14, 7, 5 };   static const int16_t kLocalThresholdLBR[3] = { 37, 32, 37 };   static const int16_t kGlobalThresholdLBR[3] = { 100, 80, 100 };   // Mode 2, Aggressive.   static const int16_t kOverHangMax1AGG[3] = { 6, 3, 2 };   static const int16_t kOverHangMax2AGG[3] = { 9, 5, 3 };   static const int16_t kLocalThresholdAGG[3] = { 82, 78, 82 };   static const int16_t kGlobalThresholdAGG[3] = { 285, 260, 285 };   // Mode 3, Very aggressive.   static const int16_t kOverHangMax1VAG[3] = { 6, 3, 2 };   static const int16_t kOverHangMax2VAG[3] = { 9, 5, 3 };   static const int16_t kLocalThresholdVAG[3] = { 94, 94, 94 };   static const int16_t kGlobalThresholdVAG[3] = { 1100, 1050, 1100 };   它們在計算高斯模型機率時用到。 2. 幀長設定

A)    共有三種幀長可以用到,分別是80/10ms,160/20ms,240/30ms,實際上目前只支援10ms的幀長。
B)    其它採樣率的48k,32k,24k,16k會重採樣到8k來計算VAD。
       之所以選擇上述三種幀長度,是因為語音訊號是短時平穩訊號,其在10ms~30ms之間可看成平穩訊號,高斯馬爾科夫等訊號處理方法基於的前提是訊號是平穩的,在10ms~30ms,平穩訊號處理方法是可以使用的。
3. 高斯模型中特徵向量選取

在WebRTC的VAD演算法中用到了聚類的思想,只有兩個類,一個類是語音,一個類是雜訊,對每幀訊號都求其是語音和雜訊的機率,根據機率進行聚類,當然為了避免一幀帶來的誤差也有一個統計量判決在演算法裡,那麼問題來了,選擇什麼樣的特徵作為高斯分布的輸入呢?這關係到聚類結果的準確性,也即VAD效能,毋庸置疑,既然VAD目的是區分雜訊和語音,那麼雜訊訊號和語音訊號這兩種訊號它們的什麼特徵相差最大呢?選擇特徵相差比較大自然能得到比較好的區分度。
  眾所周知,訊號的處理分類主要有時域,頻域和空域,從空域上看,webRTC的VAD是基於單麥克的,雜訊和語音沒有空間區分度的概念,在多麥克風情境,確實基於多麥克風的VAD演算法,從時域上看,而者都是時變訊號,且短時訊號變動率比較小,所以推算來推算去只有頻域的區分度可能是比較好的。

汽車雜訊頻譜

粉紅雜訊頻譜

白色雜訊頻譜

語音聲譜

 從以上四個圖中,可以看到從頻譜來看雜訊和語音,它們的頻譜差異還是比較大,且以一個個波峰和波穀的形式呈現。
  WebRTC正式基於這一假設,將頻譜分成了6個子帶。它們是:
    80Hz~250Hz,250Hz~500Hz,500Hz~1K,1K~2K,2K~3K,3K~4K。分別對應於feature[0],feature[1],feature[2],...,feature[5]。
可以看到以1KHz為分界,向下500HZ,250Hz以及170HZ三個段,向上也有三個段,每個段是1KHz,這一頻段涵蓋了語音中絕大部分的訊號能量,且能量越大的子帶的區分度越細緻。
  我國交流電標準是220V~50Hz,電源50Hz的幹擾會混入麥克風採集到的資料中且物理震動也會帶來影響,所以取了80Hz以上的訊號。

在webRTC計算的函數在filter_bank.c檔案中,前面說的基於啟用的DNN也可以是基於fbank特徵。
高通濾波器設計

高通濾波器的作用有兩點:1.濾除直流分量,2提升高頻成分(人耳對3.5KHz最為敏感)
[cpp]  view plain  copy // High pass filtering, with a cut-off frequency at 80 Hz, if the |data_in| is   // sampled at 500 Hz.   //   // - data_in      [i]   : Input audio data sampled at 500 Hz.   // - data_length  [i]   : Length of input and output data.   // - filter_state [i/o] : State of the filter.   // - data_out     [o]   : Output audio data in the frequency interval   //           &nbs

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.