語音處理檢測技術(shù)端點檢測、降噪和壓縮詳解
作為一種人機交互的手段,語音的端點檢測在解放人類雙手方面意義重大。同時,工作環(huán)境存在著各種各樣的背景噪聲,這些噪聲會嚴重降低語音的質(zhì)量從而影響語音應(yīng)用的效果,比如會降低識別率。未經(jīng)壓縮的語音數(shù)據(jù),網(wǎng)絡(luò)交互應(yīng)用中的網(wǎng)絡(luò)流量偏大,從而降低語音應(yīng)用的成功率。因此,音頻的端點檢測、降噪和音頻壓縮始終是終端語音處理關(guān)注的重點,目前仍是活躍的研究主題。
本文引用地址:http://cafeforensic.com/article/201710/367885.htm為了能和您一起了解端點檢測和降噪的基本原理,帶您一起一窺音頻壓縮的奧秘,科大訊飛資深研發(fā)工程師李洪亮將為我們詳解語音處理檢測技術(shù)中的熱點——端點檢測、降噪和壓縮 。
▎端點檢測
首先來看端點檢測(Voice Activity Detection, VAD)。音頻端點檢測就是從連續(xù)的語音流中檢測出有效的語音段。它包括兩個方面,檢測出有效語音的起始點即前端點,檢測出有效語音的結(jié)束點即后端點。
在語音應(yīng)用中進行語音的端點檢測是很必要的,首先很簡單的一點,就是在存儲或傳輸語音的場景下,從連續(xù)的語音流中分離出有效語音,可以降低存儲或傳輸?shù)臄?shù)據(jù)量。其次是在有些應(yīng)用場景中,使用端點檢測可以簡化人機交互,比如在錄音的場景中,語音后端點檢測可以省略結(jié)束錄音的操作。
為了能更清楚說明端點檢測的原理,先來分析一段音頻。上圖是一段只有兩個字的簡單音頻,從圖上可以很直觀的看出,首尾的靜音部分聲波的振幅很小,而有效語音部分的振幅比較大,一個信號的振幅從直觀上表示了信號能量的大?。红o音部分能量值較小,有效語音部分的能量值較大。語音信號是一個以時間為自變量的一維連續(xù)函數(shù),計算機處理的語音數(shù)據(jù)是語音信號按時間排序的采樣值序列,這些采樣值的大小同樣表示了語音信號在采樣點處的能量。
采樣值中有正值和負值,計算能量值時不需要考慮正負號,從這個意義上看,使用采樣值的絕對值來表示能量值是自然而然的想法,由于絕對值符號在數(shù)學(xué)處理上不方便,所以采樣點的能量值通常使用采樣值的平方,一段包含N個采樣點的語音的能量值可以定義為其中各采樣值的平方和。
這樣,一段語音的能量值既與其中的采樣值大小有關(guān),又與其中包含的采樣點數(shù)量有關(guān)。為了考察語音能量值的變化,需要先將語音信號按照固定時長比如20毫秒進行分割,每個分割單元稱為幀,每幀中包含數(shù)量相同的采樣點,然后計算每幀語音的能量值。
如果音頻前面部分連續(xù)M0幀的能量值低于一個事先指定的能量值閾值E0,接下來的連續(xù)M0幀能量值大于E0,則在語音能量值增大的地方就是語音的前端點。同樣的,如果連續(xù)的若干幀語音能量值較大,隨后的幀能量值變小,并且持續(xù)一定的時長,可以認為在能量值減小的地方即是語音的后端點。
現(xiàn)在的問題是,能量值閾值E0怎么???M0又是多少?理想的靜音能量值為0,故上面算法中的E0理想狀態(tài)下取0。不幸的是,采集音頻的場景中往往有一定強度的背景音,這種單純的背景音當然算靜音,但其能量值顯然不為0,因此,實際采集到的音頻其背景音通常有一定的基礎(chǔ)能量值。
我們總是假設(shè)采集到的音頻在起始處有一小段靜音,長度一般為幾百毫秒,這一小段靜音是我們估計閾值E0的基礎(chǔ)。對,總是假設(shè)音頻起始處的一小段語音是靜音,這一點假設(shè)非常重要?。。?!在隨后的降噪介紹中也要用到這一假設(shè)。在估計E0時,選取一定數(shù)量的幀比如前100幀語音數(shù)據(jù)(這些是“靜音”),計算其平均能量值,然后加上一個經(jīng)驗值或乘以一個大于1的系數(shù),由此得到E0。這個E0就是我們判斷一幀語音是否是靜音的基準,大于這個值就是有效語音,小于這個值就是靜音。
至于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)用中的算法遠比上面講的要復(fù)雜。作為一個應(yīng)用較廣的語音處理技術(shù),音頻端點檢測仍然是一個較為活躍的研究方向??拼笥嶏w已經(jīng)使用循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Networks, RNN)技術(shù)來進行語音的端點檢測,實際的效果可以關(guān)注訊飛的產(chǎn)品。
▎降噪
降噪又稱噪聲抑制(Noise Reduction),前文提到,實際采集到的音頻通常會有一定強度的背景音,這些背景音一般是背景噪音,當背景噪音強度較大時,會對語音應(yīng)用的效果產(chǎn)生明顯的影響,比如語音識別率降低,端點檢測靈敏度下降等,因此,在語音的前端處理中,進行噪聲抑制是很有必要的。
噪聲有很多種,既有頻譜穩(wěn)定的白噪聲,又有不穩(wěn)定的脈沖噪聲和起伏噪聲,在語音應(yīng)用中,穩(wěn)定的背景噪音最為常見,技術(shù)也最成熟,效果也最好。本課程只討論穩(wěn)定的白噪聲,即總是假設(shè)背景噪聲的頻譜是穩(wěn)定或者是準穩(wěn)定的。
前面講的語音端點檢測是在時域上進行的,降噪的過程則是在頻域上進行的,為此,我們先來簡單介紹或者說復(fù)習(xí)一下用于時域-頻域相互轉(zhuǎn)換的重要工具——傅里葉變換。
為了更容易理解,先看高等數(shù)學(xué)中學(xué)過的傅里葉級數(shù),高等數(shù)學(xué)理論指出,一個滿足Dirichlet條件的周期為2T的函數(shù)f(t),可以展開成傅里葉級數(shù):
對于一般的連續(xù)時域信號f(t),設(shè)其定義域為[0,T],對其進行奇延拓后,其傅里葉級數(shù)如下式:
bn的計算同上,由上式可知,任何一個連續(xù)的時域信號f(t),都可以由一組三角函數(shù)線性疊加而成?;蛘哒f, f(t)都可以由一個三角函數(shù)線性組合組成的序列來無限的逼近。信號的傅里葉級數(shù)展示的是構(gòu)成信號的頻率以及各個頻率處的振幅,因此,式子的右端又可以看做是信號f(t)的頻譜,說的更直白一點,信號的頻譜就是指這個信號有哪些頻率成分,各個頻率的振幅如何。上式從左到右的過程是一個求已知信號的頻譜的過程,從右到左的過程是一個由信號的頻譜重構(gòu)該信號的過程。
雖然由信號的傅里葉級數(shù)很容易理解頻譜的概念,但在實際中求取信號的頻譜時,使用的是傅里葉級數(shù)的一種推廣形式——傅里葉變換。
傅里葉變換是一個大的家族,在不同的應(yīng)用領(lǐng)域,有不同的形式,在這里我們只給出兩種形式——連續(xù)形式的傅里葉變換和離散傅里葉變換:
其中的j是虛數(shù)單位,也就是j*j=-1,其對應(yīng)的傅里葉逆變換分別為:
在實際應(yīng)用中,將數(shù)字采樣信號進行傅里葉變換后,可以得到信號的頻譜。頻域上的處理完成后,可以使用傅里葉逆變換將信號由頻域轉(zhuǎn)換到時域中。對,傅里葉變換是一個可以完成由時域向頻域轉(zhuǎn)換的重要工具,一個信號經(jīng)傅里葉變換后,可以得到信號的頻譜。
以上是傅里葉變換的簡單介紹,數(shù)學(xué)功底不太好的朋友看不大懂也沒關(guān)系,只要明白,一個時域信號進行傅里葉變換后,可以得到這個信號的頻譜,即完成如下轉(zhuǎn)換:
左面的是時域信號,右面的是對應(yīng)的頻譜,時域信號一般關(guān)注的是什么時間取什么值,頻域信號關(guān)心的是頻率分布和振幅。
有了以上的理論作為基礎(chǔ),理解降噪的原理就容易多了,噪音抑制的關(guān)鍵是提取出噪聲的頻譜,然后將含噪語音根據(jù)噪聲的頻譜做一個反向的補償運算,從而得到降噪后的語音。這句話很重要,后面的內(nèi)容都是圍繞這句話展開的。
噪聲抑制的一般流程如下圖所示:
同端點檢測類似,假設(shè)音頻起始處的一小段語音是背景音,這一假設(shè)非常重要,因為這一小段背景音也是背景噪聲,是提取噪聲頻譜的基礎(chǔ)。
降噪過程:首先將這一小段背景音進行分幀,并按照幀的先后順序進行分組,每組的幀數(shù)可以為10或其他值,組的數(shù)量一般不少于5,隨后對每組背景噪聲數(shù)據(jù)幀使用傅里葉變換得到其頻譜,再將各頻譜求平均后得到背景噪聲的頻譜。
得到噪聲的頻譜后,降噪的過程就非常簡單了,上圖下面左側(cè)的圖中紅色部分即為噪聲的頻譜,黑色的線為有效語音信號的頻譜,兩者共同構(gòu)成含噪語音的頻譜,用含噪語音的頻譜減去噪音頻譜后得到降噪后語音的頻譜,再使用傅里葉逆變換轉(zhuǎn)回到時域中,從而得到降噪后的語音數(shù)據(jù)。
下圖展示了降噪的效果
左右兩幅圖是降噪前后時域中的對比,左面的是含噪語音信號,從圖中可以看到噪聲還是很明顯的。右側(cè)的是降噪后的語音信號,可以看出,背景噪聲被大大的抑制了。
下面兩幅圖是頻域中的對比
其中橫軸表示時間軸,縱軸表示頻率,左面的是含噪語音,其中的亮紅色部分是有效語音,而那些像沙子一樣的紫色的部分則是噪聲。從圖中可以看出,噪聲不僅是“無時不在”,而且還是“無處不在”,也就是在各種頻率處都有分布,右側(cè)的是降噪后的語音,可以很明顯的看出,降噪前那些像沙子一樣的紫色的部分淡了很多,就是噪聲被有效的抑制了。
在實際應(yīng)用中,降噪使用的噪聲頻譜通常不是一成不變的,而是隨著降噪過程的進行被持續(xù)修正的,即降噪的過程是自適應(yīng)的。這樣做的原因一方面是語音數(shù)據(jù)前部的靜音長度有時不夠長,背景噪聲數(shù)據(jù)不足導(dǎo)致得到的噪聲頻譜往往不夠準確,另一方面,背景噪聲往往不是絕對穩(wěn)定的,而是漸變的甚至?xí)蛔兊搅硪环N穩(wěn)定的背景噪聲。
這些原因都要求在降噪的過程中對使用的噪聲頻譜做及時修正,以得到較好的降噪效果。修正噪聲頻譜的方法是使用后繼音頻中的靜音,重復(fù)噪聲頻譜提取算法,得到新的噪聲頻譜,并將之用于修正降噪所用的噪聲頻譜,所以降噪的過程中仍然要使用端點檢測中用到的如何判斷靜音。噪聲頻譜修正的方法或者是新舊頻譜進行加權(quán)平均,或者使用新的噪聲頻譜完全替換使用中的噪聲頻譜。
以上介紹的是降噪的非常簡單的原理。實際應(yīng)用中的降噪算法遠比上面介紹的要復(fù)雜,現(xiàn)實中的噪聲源多種多樣,其產(chǎn)生的機理和特性也較為復(fù)雜,所以噪聲抑制在現(xiàn)今仍然是一個較為活躍的研究領(lǐng)域,各種新技術(shù)也層出不窮,比如在實際應(yīng)用中已經(jīng)使用了多麥克風(fēng)陣列來進行噪聲抑制。
▎音頻壓縮
音頻壓縮的必要性眾所周知,不再贅述。所有的音頻壓縮系統(tǒng)都要求有兩種對應(yīng)的算法,一種是運行于源端上的編碼算法(encoding),另一種是運行于接收端或用戶終端的解碼算法(decoding)。
編碼算法和解碼算法表現(xiàn)出一定的不對稱性。這種不對稱性一是表現(xiàn)在編碼算法和解碼算法的效率可以不同。音頻或視頻數(shù)據(jù)在存儲時,通常只被編碼一次,但將被解碼成千上萬次,所以編碼算法較復(fù)雜、效率降低、費用昂貴是可以被接受的,但解碼算法一定要快速、簡單而且廉價。編碼算法和解碼算法的不對稱性還表現(xiàn)在編碼和解碼的過程通常是不可逆的,也就是說,解碼后得到的數(shù)據(jù)和編碼之前的原始數(shù)據(jù)可以是不同的,只要它們聽起來或看起來是一樣的即可,這種編解碼算法通常稱為有損的,與此對應(yīng)的是,如果解碼后得到和原始數(shù)據(jù)一致的數(shù)據(jù),這種編碼和解碼稱為無損的。
音視頻編解碼算法大多是有損的,因為忍受一些少量信息的丟失,往往可以換來壓縮率的大幅提升,音頻信號的壓縮編碼采用了數(shù)據(jù)編碼中的一些技術(shù),如熵編碼、波形編碼、參數(shù)編碼、混合編碼、感知編碼等。
本次課重點介紹感知編碼,相對于其他的編碼算法,感知編碼基于人耳聽覺的一些特性(心理聲學(xué)),去除音頻信號中的冗余,從而達到音頻壓縮的目的。相對于其他的音頻編碼算法(無損的),在人耳沒有感覺到明顯失真的條件下,可以達到10倍以上的較大壓縮率。
首先來介紹感知編碼的心理聲學(xué)基礎(chǔ)。音頻壓縮的核心是去除冗余。所謂冗余就是語音信號中包含的不能為人耳所感知的信息,它對人類確定音色、音調(diào)等信息沒有任何幫助,比如,人耳能聽到的聲音頻率范圍為20-20KHz,無法感知頻率低于20Hz的次聲波和頻率高于20KHz的超聲波。再比如,人耳也無法聽到一段“不夠響”的聲音。感知編碼就是利用了人類聽覺系統(tǒng)的這類特性,達到去除音頻冗余信息的目的。
感知編碼中的心理聲學(xué)主要有:頻率屏蔽、時域屏蔽、可聽度閾值等。
頻率屏蔽 頻率屏蔽在生活中處處可見,比如你在家中坐在沙發(fā)上安靜的看電視,突然,正在裝修的鄰居家一陣很刺耳的電鉆鉆墻的聲音傳來,這時你所能聽到的只有手提電鉆發(fā)出的很強的噪聲,盡管此時電視所發(fā)出的聲音仍然在刺激著你的耳膜,但你卻充耳不聞,也就是說,一段強度很高的聲音可以完全屏蔽一段強度較低的聲音,這種現(xiàn)象稱為頻率屏蔽。
時域屏蔽 承接前一個例子,不僅在電鉆發(fā)出聲音的時間內(nèi)人耳聽不到電視機的聲音,就是在電鉆的聲音剛停下來的一小段時間內(nèi),人耳也聽不到電視機的聲音,這種現(xiàn)象稱為時域屏蔽。產(chǎn)生時域屏蔽的原因是人類的聽覺系統(tǒng)是一個增益可調(diào)的系統(tǒng),聽強度較大的聲音時,增益較低,聽強度較小的聲音時,增益較高。有時人類甚至借助外部手段來改變聽覺系統(tǒng)的增益,比如,捂耳朵以避免強度很大的聲音損傷耳膜,而屏住呼吸、側(cè)耳、以手放耳廓后更是聽較弱聲音時的常見行為。在上例中,強度很大的聲音剛消失時,聽覺系統(tǒng)需要一小段時間來調(diào)高增益,正是在這一小段時間內(nèi)產(chǎn)生了時域屏蔽。
下面來說可聽度閾值,它對于音頻壓縮灰常重要。
設(shè)想在一個安靜的房間中,一臺由計算機控制的揚聲器可以發(fā)出某一頻率的聲音,剛開始時揚聲器功率較小,處于一定距離上的聽覺正常的人聽不到揚聲器發(fā)出的聲音。然后開始逐漸增大揚聲器的功率,當功率增大到剛好可以被聽見的時候,記錄下此時揚聲器的功率(聲強級,單位分貝),這個功率就是這個頻率下的可聽度閾值。
然后改變揚聲器所發(fā)音頻的頻率,重復(fù)以上實驗,最終獲得的可聽度閾值隨頻率變化的曲線如下圖所示:
由圖中可以很明顯的看出,人類的聽覺系統(tǒng)對頻率在1000-5000Hz范圍的聲音最敏感,頻率越接近兩側(cè),人類聽覺反應(yīng)越遲鈍。
回過頭來再看頻率屏蔽的情形,這次實驗在房間中增加一個頻率為150Hz,強度為60dB的信號,然后重復(fù)實驗,實驗得出的可聽度閾值曲線如下圖所示:
從圖中很明顯的看出,可聽度閾值曲線在150Hz附近被強烈的扭曲了,被向上提高了很多。這意味著,本來位于可聽度閾值之上的150Hz附近的某個頻率的聲音,有可能由于150Hz的更強的信號的存在而變得不可聞了,也就是被屏蔽了。
音頻壓縮1#e#
感知編碼的基本規(guī)則就是,永遠不需要對人耳聽不到的信號進行編碼,簡單來說就是,聽不到的信號不需要編碼,這句廢話恰恰是語音壓縮研究的重點之一。廢話的另外一種含義就是非常容易理解的正確的話。言歸正傳,哪些東西聽不見呢?功率低于可聽度閾值的信號或者說分量,被屏蔽的信號或者說分量,這些人耳都聽不見,都是上文提到的“冗余”。
以上是心里聲學(xué)的一些東西。要想很好的理解音頻壓縮,還需要理解一個更重要的概念:子帶。子帶(subband)是指這樣的一種頻率范圍,當兩個音調(diào)的頻率位于一個子帶內(nèi)時,人就會把兩個音調(diào)聽成一個。更一般的情況是,如果一個復(fù)雜信號的頻率分布位于一個子帶內(nèi)時,人耳的感覺是該信號等價于一個頻率位于該子帶中心頻率處的簡單信號,這是子帶的核心內(nèi)涵。簡單說,子帶是指一個頻率范圍,頻譜位于這個范圍內(nèi)的信號可以用一個單一頻率的分量來代替。
一般等價的頻率取子帶的中心頻率,振幅取子帶內(nèi)個頻率分量振幅的加權(quán)和,更簡單的方法則是將各頻率分量的振幅直接相加,作為等價信號的振幅,這樣一個范圍內(nèi)的頻率分量用一個分量就可以代替了。
設(shè)一個信號的頻譜頻率最低值為w0,最大值為w1。子帶編碼就是將w0-w1之間的頻率范圍劃分成若干子帶,然后每個子帶范圍內(nèi)的分量用一個等價的頻率分量來替換。這樣,一個具有復(fù)雜頻譜的信號可以等價為一個頻譜構(gòu)成灰常簡單的信號——頻譜被大大簡化了,需要存儲的東西就非常少了。
從以上過程不難知道,子帶如何劃分對壓縮后音頻的質(zhì)量影響很大(畢竟是近似等價)。子帶的劃分方法是子帶編碼的一個很重要的研究主題,大致可以分為等寬子帶編碼和變寬子帶編碼,見名知意,不解釋。
子帶劃分后子帶數(shù)量的不同導(dǎo)致了壓縮算法的不同等級。容易知道,碼率越低壓縮率越高時,子帶數(shù)量少,同時音質(zhì)較差。相反的情況也容易理解。
理解了子帶編碼,音頻壓縮就很容易理解了,一個信號經(jīng)過一組三角濾波器(等同于一組子帶)后,被精簡為數(shù)量很少的頻率分量。然后考察這些頻率分量,能量或者說振幅位于可聽度閾值曲線之下的直接無視(刪除該分量,因為聽不到)。再考察余下的兩兩相鄰的頻率分量,如果其中一個被旁邊的頻率屏蔽,也刪除掉。經(jīng)過以上的處理,一個復(fù)雜信號的頻譜所含有的頻率分量就很簡單了,使用很少的數(shù)據(jù)就可以存儲或者傳輸這些信息。
解碼的時候使用傅里葉逆變換將上面得到的簡單頻譜重構(gòu)到時域上,得到解碼后的語音。
以上就是音頻壓縮的簡單原理,下面談?wù)勔纛l編解碼庫。
可以公開獲取的音頻編解碼開源庫很多,其特點和能力也有所不同,如下圖:
由圖中可以看到,AAC和MP3等走的是“高端路線”,用來對高采樣率的音樂進行編碼,而AMR和SPEEX等走的是中低端路線,可以處理16K采樣率以下的語音信號,這對于語音合成、語音識別、聲紋識別等語音應(yīng)用足夠了。
科大訊飛語音云使用的是SPEEX系列,算法相關(guān)信息如下圖所示:
Speex編解碼庫壓縮率變換范圍較廣,壓縮等級可供選擇的范圍較寬,所以應(yīng)用在網(wǎng)絡(luò)狀況較為復(fù)雜的移動終端應(yīng)用中甚為合適。
好了,以上就是本次課分享的全部內(nèi)容。
小結(jié):
音頻端點檢測、降噪和語音壓縮,很多人覺得神秘、難于理解和難以把握。但經(jīng)李老師娓娓道來,平時感覺高大上的語音處理技術(shù)也被講的深入淺出。原來,不需要很高深的理論功底也可以理解這些技術(shù)的關(guān)鍵:音頻端點檢測的關(guān)鍵是根據(jù)前面的靜音確定用來分辨靜音和有效語音的標尺,降噪的關(guān)鍵是使用前面的一小段背景噪音提取出噪聲的頻譜,音頻壓縮方法之一是充分利用人類的心里聲學(xué),劃分子帶,去除冗余等。
讓我們一起關(guān)注語音處理技術(shù)在以上幾個方面的最新發(fā)展吧。
演講嘉賓介紹
李洪亮,畢業(yè)于中國科學(xué)技術(shù)大學(xué)??拼笥嶏w資深研發(fā)工程師,長期從事語音引擎和語音類云計算相關(guān)開發(fā),科大訊飛語音云的締造者之一,主導(dǎo)研發(fā)的用于訊飛語音云平臺上的語音編解碼庫,日使用量超過二十億。主導(dǎo)語音類國家標準體系的建設(shè),主導(dǎo)、參與多個語音類國家標準的制定。 他今天的分享將分為兩大部分,第一部分是端點檢測和降噪,第二部分是音頻壓縮。
評論