作為一種人機交互的手段,語音的端點檢測在解放人類雙手方面意義重大。同時,工作環(huán)境存在著各種各樣的背景噪聲,這些噪聲會嚴重降低語音的質量從而影響語音應用的效果,比如會降低識別率。未經壓縮的語音數據,網絡交互應用中的網絡流量偏大,從而降低語音應用的成功率。因此,音頻的端點檢測、降噪和音頻壓縮始終是終端語音處理關注的重點,目前仍是活躍的研究主題。
為了能和您一起了解端點檢測和降噪的基本原理,帶您一起一窺音頻壓縮的奧秘,科大訊飛資深研發(fā)工程師李洪亮將為我們詳解語音處理檢測技術中的熱點——端點檢測、降噪和壓縮 。
▎端點檢測
首先來看端點檢測(Voice AcTIvity DetecTIon, VAD)。音頻端點檢測就是從連續(xù)的語音流中檢測出有效的語音段。它包括兩個方面,檢測出有效語音的起始點即前端點,檢測出有效語音的結束點即后端點。
在語音應用中進行語音的端點檢測是很必要的,首先很簡單的一點,就是在存儲或傳輸語音的場景下,從連續(xù)的語音流中分離出有效語音,可以降低存儲或傳輸的數據量。其次是在有些應用場景中,使用端點檢測可以簡化人機交互,比如在錄音的場景中,語音后端點檢測可以省略結束錄音的操作。
為了能更清楚說明端點檢測的原理,先來分析一段音頻。上圖是一段只有兩個字的簡單音頻,從圖上可以很直觀的看出,首尾的靜音部分聲波的振幅很小,而有效語音部分的振幅比較大,一個信號的振幅從直觀上表示了信號能量的大小:靜音部分能量值較小,有效語音部分的能量值較大。語音信號是一個以時間為自變量的一維連續(xù)函數,計算機處理的語音數據是語音信號按時間排序的采樣值序列,這些采樣值的大小同樣表示了語音信號在采樣點處的能量。
采樣值中有正值和負值,計算能量值時不需要考慮正負號,從這個意義上看,使用采樣值的絕對值來表示能量值是自然而然的想法,由于絕對值符號在數學處理上不方便,所以采樣點的能量值通常使用采樣值的平方,一段包含N個采樣點的語音的能量值可以定義為其中各采樣值的平方和。
這樣,一段語音的能量值既與其中的采樣值大小有關,又與其中包含的采樣點數量有關。為了考察語音能量值的變化,需要先將語音信號按照固定時長比如20毫秒進行分割,每個分割單元稱為幀,每幀中包含數量相同的采樣點,然后計算每幀語音的能量值。
如果音頻前面部分連續(xù)M0幀的能量值低于一個事先指定的能量值閾值E0,接下來的連續(xù)M0幀能量值大于E0,則在語音能量值增大的地方就是語音的前端點。同樣的,如果連續(xù)的若干幀語音能量值較大,隨后的幀能量值變小,并且持續(xù)一定的時長,可以認為在能量值減小的地方即是語音的后端點。
現在的問題是,能量值閾值E0怎么???M0又是多少?理想的靜音能量值為0,故上面算法中的E0理想狀態(tài)下取0。不幸的是,采集音頻的場景中往往有一定強度的背景音,這種單純的背景音當然算靜音,但其能量值顯然不為0,因此,實際采集到的音頻其背景音通常有一定的基礎能量值。
我們總是假設采集到的音頻在起始處有一小段靜音,長度一般為幾百毫秒,這一小段靜音是我們估計閾值E0的基礎。對,總是假設音頻起始處的一小段語音是靜音,這一點假設非常重要?。。。≡陔S后的降噪介紹中也要用到這一假設。在估計E0時,選取一定數量的幀比如前100幀語音數據(這些是“靜音”),計算其平均能量值,然后加上一個經驗值或乘以一個大于1的系數,由此得到E0。這個E0就是我們判斷一幀語音是否是靜音的基準,大于這個值就是有效語音,小于這個值就是靜音。
至于M0,比較容易理解,其大小決定了端點檢測的靈敏度,M0越小,端點檢測的靈敏度越高,反之越低。語音應用的場景不同,端點檢測的靈敏度也應該被設置為不同的值。例如,在聲控遙控器的應用中,由于語音指令一般都是簡單的控制指令,中間出現逗號或句號等較長停頓的可能性很小,所以提高端點檢測的靈敏度是合理的,M0設置為較小值,對應的音頻時長一般為200-400毫秒左右。在大段的語音聽寫應用中,由于中間會出現逗號或句號等較長時間的停頓,宜將端點檢測的靈敏度降低,此時M0值設置為較大值,對應的音頻時長一般為1500-3000毫秒。所以M0的值,也就是端點檢測的靈敏度,在實際中應該做成可調整的,它的取值要根據語音應用的場景來選擇。
以上只是語音端點檢測的很簡單的一般原理,實際應用中的算法遠比上面講的要復雜。作為一個應用較廣的語音處理技術,音頻端點檢測仍然是一個較為活躍的研究方向??拼笥嶏w已經使用循環(huán)神經網絡(Recurrent Neural Networks, RNN)技術來進行語音的端點檢測,實際的效果可以關注訊飛的產品。