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