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