本文內容均翻譯自這篇博文:(該博主的相關文章都比較好,感興趣的可以自行學習)
Voice Activity Detection(VAD) Tutorial
語音端點檢測一般用於鑒別音頻信號當中的語音出現(speech presence)和語音消失(speech absence)。這里將提供一個簡單的VAD方法,當檢測到語音時輸出為1,否則,輸出為0。
語音是否出現或者在背景噪聲上是否平坦決定了VAD方法的檢測是否穩定(The job of a VAD is to reliably determine if speech is present or not even in background noise)。在純凈背景噪聲環境下(clean conditions),即使簡單的能量檢測方法也能夠得到較好的語音檢測效果,然而,一般情況下,我們得到的音頻信號均會存在背景噪聲。這就意味着,我們的VAD方法必須對噪聲具有較好的魯棒性。

VAD的總體步驟如下:
- 將音頻信號進行分幀處理;
- 從每一幀數據當中提取特征;
- 在一個已知語音和靜默信號區域的數據幀集合上訓練一個分類器;
- 對未知的分幀數據進行分類,判斷其屬於語音信號還是靜默信號。
通常,一個VAD算法會將音頻信號划分為發音部分(voiced)、未發音部分(unvoiced)和靜默部分(silence)。這里介紹的特征能夠很好的適用於這種分類任務,但是分類器的分類類別是3類而非兩類(voiced speech,unvoiced speech and silence)。
預處理
第一步是將音頻信號通過一個高通濾波器,截止頻率大約為\(200Hz\)。這一步的目的是移除信號當中的直流偏置分量和一些低頻噪聲。雖然在低於\(200Hz\)的部分仍然有部分語音信息,但是不會對語音信號造成很大的影響。
在特征提取之前,我們首先要對音頻信號進行長度為\(20-40ms\)的分幀,一般幀與幀之間的重疊為\(10ms\)。舉例來說,如果我們的音頻信號采樣率為\(16kHz\),取窗口大小為\(25ms\),這種情況下,每一幀數據的所包含的數據點為:\(0.025*16000=400\)采樣點。令幀之間重疊為\(10ms\)來計算,第一幀的數據起始點為\(sample 0\),第二幀數據的起始點為\(sample 160\)。
特征提取
分幀完成之后,就可以對每一幀數據進行特征提取。在下面的討論中,\(x(n)\)為音頻數據的一幀數據,其中\(n\)的范圍為\(1 \rightarrow L\)(\(L\)為每一幀數據的長度)。對每一幀數據進行下面五種特征的提取:
- 對數幀能量(logarithm of frame energy):
- 過零率(zero crossing rate):每一幀數據穿過零點的次數
- 在延遲一個位置處標准化自相關系數(normalised autocorrelation coefficient at lag 1):
- \(P_{th}\)階線性預測的第一個系數
- \(P_{th}\)階線性預測誤差的對數
在本文中,我們使用\(P=12\),也就是說線性預測器的階數為\(12\)。
分類
上面介紹的特征,單一使用時無法有效的對音頻信號進行端點檢測,但是我們可以使用多種特征的組合,來有效的解決這一問題,並且降低錯誤分類的概率。
Rabiner使用一個推測(calculating)靜默信號特征均值和方差;語音信號特征均值和方差的貝葉斯分類器來進行分類。為了對一個未知數據幀進行分類,我們計算該數據幀來自每一個標簽數據的似然,假設數據分布服從多變量高斯分布。然后,選擇最大似然所對應的模型作為該數據幀的標簽。
我們也可以選擇discriminative classifier,如:支持矢量機,神經網絡等。這里有一個SVM庫libsvm,能夠簡單的訓練一個SVM分類器來用於語音信號和靜默信號的分類。
訓練
訓練分類器需要足夠的帶標簽數據,這就要求人們進行人工標注數據。具體的,在VAD應用當中,要求對音頻信號中的語音部分和靜默部分進行划分。一般來說,帶標簽數據越多,訓練得到的分類器分類效果越好。一個重要的細節是:在訓練數據當中的背景噪聲要盡量與測試數據當中的背景噪聲相匹配,否則會引起噪聲失配問題。如果你無法對訓練和測試數據當中的噪聲類型進行確定,那么盡量使用多種噪聲和多種\(SNR\)(信噪比)數據對分類器進行訓練。
如果你想要應用VAD到一個實際應用當中,如:電話語音數據,很重要的一點是:進行訓練的數據需要在相同的通道(channel)獲取,訓練所獲取數據的channel和應用場景的channel相同。這樣可以降低訓練數據集和測試數據集的失配問題。一旦訓練完成之后,你可以獲得一個可以預測未知數據標簽的模型。
Putting it All Together
模型訓練完成之后,我們可以使用該模型對未知數據幀的標簽進行預測。隨着數據中噪聲的增加,可以推測到,VAD模型的准確率會下降。
有時,預測標簽在speech present和speech abscent之間劇烈震盪,這種情況是我們所不願意看到的。在這種情況下,我們可以對預測標簽使用中值濾波Median Filter進行處理。
