麦克风阵列技术 二 (自动增益控制 自动噪声抑制 回声消除 语音活动检测)
麥克風陣列技術
- 麥克風陣列技術詳解
- 自動增益控制
- 自動增益處理分類
- AGC環
- 自動噪聲抑制
- 原理及實現
- 噪聲
- 噪聲抑制的一般流程
- 回聲消除
- 回聲
- 傳統回聲消除
- 聲學回聲消除
- 原理及實現
- 語音活動檢測
- 音頻端點檢測
- 原理及實現
緊接上一個博客文章,此為第二部分。上一部分見:麥克風陣列技術 一 (名詞解釋 背景介紹 麥克風及音頻信號 麥克風陣列簡介)
麥克風陣列技術詳解
自動增益控制
AGC:Automatic Gain Control,自動增益控制,使放大電路的增益自動地隨信號強度而調整的自動控制方法。
自動增益控制是限幅輸出的一種,它利用線性放大和壓縮放大的有效組合對助昕器的輸出信號進行調整。當弱信號輸入時,線性放大電路工作,保證輸出信號的強度;當輸入信號達到一定強度時,啟動壓縮放大電路,使輸出幅度降低。也就是說,AGC功能可以通過改變輸入輸出壓縮比例自動控制增益的幅度。
最簡單的硬性增益處理是對所有音頻采樣乘上一個增益因子,它也等同于在頻域每個頻率都同時乘上這個增益因子,但由于人的聽覺對所有頻率的感知不是線性的,是遵循等響度曲線的,導致這樣處理后,聽起來感覺有的頻率加強了,有的頻率削弱了,導致語言失真的放大。
要讓整個頻段的頻率聽起來響度增益都是“相同”的,就必須在響度這個尺度下做增益,而不是在頻率域,即按照等響度曲線對語音的頻率進行加權,不能采用一個固定的增益因子進行加權。
自動增益處理分類
語音的自動增益處理可以大致分為兩個部分:
1)響度增益因子的確定。
2)把響度增益因子映射到等響度曲線上,確定最終各頻率的增益權重。
AGC環
使放大電路的增益自動地隨信號強度而調整的自動控制方法。實現這種功能的電路簡稱AGC環。
AGC環是閉環電子電路,是一個負反饋系統,它可以分成增益受控放大電路和控制電壓形成電路兩部分。增益受控放大電路位于正向放大通路,其增益隨控制電壓而改變。控制電壓形成電路的基本部件是AGC 檢波器和低通平滑濾波器,有時也包含門電路和直流放大器等部件。放大電路的輸出信號u0 經檢波并經濾波器濾除低頻調制分量和噪聲后,產生用以控制增益受控放大器的電壓uc 。當輸入信號ui增大時,u0和uc亦隨之增大。 uc 增大使放大電路的增益下降,從而使輸出信號的變化量顯著小于輸入信號的變化量,達到自動增益控制的目的。
放大電路增益的控制方法有:①改變晶體管的直流工作狀態,以改變晶體管的電流放大系數β。②在放大器各級間插入電控衰減器。③用電控可變電阻作放大器負載等。
AGC電路廣泛用于各種接收機、 錄音機和測量儀器中,它常被用來使系統的輸出電平保持在一定范圍內,因而也稱自動電平控制; 用于話音放大器或收音機時,稱為自動音量控制。。
AGC細分為AGCi(輸入自動增益控制)和AGCo(輸出自動增益控制)
自動噪聲抑制
ANS是背景噪音抑制功能(Automatic Noise Suppression),ANS可探測出背景固定頻率的雜音并消除背景噪音,例如:風扇、空調聲自動濾除。呈現出與會者清晰的聲音。
原理及實現
將實時采樣的數字信號進行頻譜分析,這樣我們就能分析背景噪聲相應的強度和頻譜分布,然后根據這個模型就能設計一個濾波器,當有人講話的時候,同時做信號分析,根據分析,ANS就能分析出講話者的頻譜,那么根據這些背景噪音和講話者的頻譜,這個濾波器根據兩個信號的對比實時的改變,讓講話者聲音頻譜通過,對背景噪聲的頻譜進行抑制,降低其能量,比如說降低15到20個分貝,就很明顯可以感覺體驗到噪音抑制的效果。
噪聲
噪聲有很多種,既有頻譜穩定的白噪聲,又有不穩定的脈沖噪聲和起伏噪聲,在語音應用中,穩定的背景噪音最為常見,技術也最成熟,效果也最好。
噪音抑制的關鍵是提取出噪聲的頻譜,然后將含噪語音根據噪聲的頻譜做一個反向的補償運算,從而得到降噪后的語音。
這句話很重要,后面的內容都是圍繞這句話展開的。
噪聲抑制的一般流程
假設音頻起始處的一小段語音是背景音,這一假設非常重要,因為這一小段背景音也是背景噪聲,是提取噪聲頻譜的基礎。
降噪過程:首先將這一小段背景音進行分幀,并按照幀的先后順序進行分組,每組的幀數可以為10或其他值,組的數量一般不少于5,隨后對每組背景噪聲數據幀使用傅里葉變換得到其頻譜,再將各頻譜求平均后得到背景噪聲的頻譜。
得到噪聲的頻譜后,降噪的過程就非常簡單了,上圖下面左側的圖中紅色部分即為噪聲的頻譜,黑色的線為有效語音信號的頻譜,兩者共同構成含噪語音的頻譜,用含噪語音的頻譜減去噪音頻譜后得到降噪后語音的頻譜,再使用傅里葉逆變換轉回到時域中,從而得到降噪后的語音數據。
在實際應用中,降噪使用的噪聲頻譜通常不是一成不變的,而是隨著降噪過程的進行被持續修正的,即降噪的過程是自適應的。這樣做的原因是:
1)一方面是語音數據前部的靜音長度有時不夠長,背景噪聲數據不足導致得到的噪聲頻譜往往不夠準確,
2)另一方面,背景噪聲往往不是絕對穩定的,而是漸變的甚至會突變到另一種穩定的背景噪聲。
這些原因都要求在降噪的過程中對使用的噪聲頻譜做及時修正,以得到較好的降噪效果。修正噪聲頻譜的方法是使用后繼音頻中的靜音,重復噪聲頻譜提取算法,得到新的噪聲頻譜,并將之用于修正降噪所用的噪聲頻譜,所以降噪的過程中仍然要使用端點檢測中用到的如何判斷靜音。噪聲頻譜修正的方法或者是新舊頻譜進行加權平均,或者使用新的噪聲頻譜完全替換使用中的噪聲頻譜。
以上介紹的是降噪的非常簡單的原理。實際應用中的降噪算法遠比上面介紹的要復雜,現實中的噪聲源多種多樣,其產生的機理和特性也較為復雜,所以噪聲抑制在現今仍然是一個較為活躍的研究領域,各種新技術也層出不窮。
回聲消除
AEC是回聲消除器(Acoustic Echo Canceller),就是在Mic采集到聲音之后,將本地音箱播放出來的聲音從Mic采集的聲音數據中消除掉,使得Mic錄制的聲音只有本地用戶說話的聲音。
回聲
回聲是指遠端說話人的聲音通過揚聲器播放出來包括其反射聲,又被近端的麥克風收集再傳送回遠端。聲學回聲主要出現的場合包括:模擬電話免提模式、手機免提模式、車載藍牙電話等場景。
在即時通訊人機語音交互中,需要進行雙方或多方的實時語音交流,在要求較高的場合,通常都是采用外置音箱放音,這樣必然會產生回音,即一方說話后,通過對方的音箱放音,然后又被對方的Mic采集到回傳給自己。如果不對回音進行處理,將會影響通話質量和用戶體驗,更嚴重的還會形成震蕩,產生嘯叫。
傳統回聲消除
傳統的回聲消除都是采用硬件方式,在硬件電路上集成DSP處理芯片,如我們常用的固定電話、手機等都有專門的回音消除處理電路,而采用軟件方式實現回聲消除一直存在技術難點,包括國內應用最廣泛的QQ超級語音,便是采用國外的GIPS技術。
難點:喇叭播放的音樂一般為立體聲,甚至是環繞立體聲,因此需要真正的多通道回聲消除技術。設備的喇叭和麥克風一般距離很近,使用者距離較遠;麥克風信號的信噪比很低(一般在-10dB~-30dB)。
聲學回聲消除
回聲消除已經成為即時通訊中提供全雙工語音的標準方法。聲學回聲消除是通過消除或者移除本地話筒中拾取到的遠端的音頻信號來阻止遠端的聲音返回去的一種處理方法。這種音頻的移除都是通過數字信號處理來完成的。回聲消除技術是數字信號處理的典型應用之一。
原理及實現
回聲消除的基本原理是以揚聲器信號與由它產生的多路徑回聲的相關性為基礎,建立遠端信號的語音模型,利用它對回聲進行估計,并不斷修改濾波器的系數,使得估計值更加逼近真實的回聲。然后,將回聲估計值從話筒的輸入信號中減去,從而達到消除回聲的目的。
AEC是對揚聲器信號與由它產生的多路徑回聲的相關性為基礎,建立遠端信號的語音模型,利用它對回聲進行估計,并不斷地修改濾波器的系數,使得估計值更加逼近真實的回聲。然后,將回聲估計值從話筒的輸入信號中減去,從而達到消除回聲的目的,AEC還將話筒的輸入與揚聲器過去的值相比較,從而消除延長延遲的多次反射的聲學回聲。根椐存儲器存放的過去的揚聲器的輸出值的多少,AEC可以消除各種延遲的回聲。
經典的回聲消除方法包括非線性回聲消除處理,通過非線性的回聲抑制技術,顯著改善了非線性情況下的效果。
一個經典的VoIP場景:
1)A用戶說話
2)B用戶Mic錄制聲音(包含A的聲音+B的聲音)
3)A聽到B的聲音(進行了回音消除,只保留B的聲音)
語音活動檢測
語音活動檢測(Voice Activity Detection,VAD)又稱語音端點檢測,語音邊界檢,是指在噪聲環境中檢測語音的存在與否,通常用于語音編碼、語音增強等語音處理系統中,起到降低語音編碼率、節省通信帶寬、減少移動設備能耗、提高識別率等作用。早先具有代表性的VAD方法有ITU-T的G.729 Annex B
音頻端點檢測
音頻端點檢測就是從連續的語音流中檢測出有效的語音段。它包括兩個方面,檢測出有效語音的起始點即前端點,檢測出有效語音的結束點即后端點。
在語音應用中進行語音的端點檢測是很必要的,首先很簡單的一點,就是在存儲或傳輸語音的場景下,從連續的語音流中分離出有效語音,可以降低存儲或傳輸的數據量。其次是在有些應用場景中,使用端點檢測可以簡化人機交互,比如在錄音的場景中,語音后端點檢測可以省略結束錄音的操作。
原理及實現
為了能更清楚說明端點檢測的原理,我們來分析一段音頻。
圖是一段包含兩個漢字語音的簡單音頻,從圖上可以很直觀的看出,首尾的靜音部分聲波的振幅很小,而有效語音部分的振幅比較大,一個信號的振幅從直觀上表示了信號能量的大小:靜音部分能量值較小,有效語音部分的能量值較大。語音信號是一個以時間為自變量的一維連續函數,計算機處理的語音數據是語音信號按時間排序的采樣值序列,這些采樣值的大小同樣表示了語音信號在采樣點處的能量。
采樣值中有正值和負值,計算能量值時不需要考慮正負號,從這個意義上看,使用采樣值的絕對值來表示能量值是自然而然的想法,由于絕對值符號在數學處理上不方便,所以采樣點的能量值通常使用采樣值的平方,一段包含N個采樣點的語音的能量值可以定義為其中各采樣值的平方和。
這樣,一段語音的能量值既與其中的采樣值大小有關,又與其中包含的采樣點數量有關。為了考察語音能量值的變化,需要先將語音信號按照固定時長比如20毫秒進行分割,每個分割單元稱為幀,每幀中包含數量相同的采樣點,然后計算每幀語音的能量值。
如果音頻前面部分連續M0幀的能量值低于一個事先指定的能量值閾值E0,接下來的連續M0幀能量值大于E0,則在語音能量值增大的地方就是語音的前端點。同樣的,如果連續的若干幀語音能量值較大,隨后的幀能量值變小,并且持續一定的時長,可以認為在能量值減小的地方即是語音的后端點。
現在的問題是,能量值閾值E0怎么取?M0又是多少?理想的靜音能量值為0,故上面算法中的E0理想狀態下取0。不幸的是,采集音頻的場景中往往有一定強度的背景音,這種單純的背景音當然算靜音,但其能量值顯然不為0,因此,實際采集到的音頻其背景音通常有一定的基礎能量值。
我們總是假設采集到的音頻在起始處有一小段靜音,長度一般為幾百毫秒,這一小段靜音是我們估計閾值E0的基礎。對,總是假設音頻起始處的一小段語音是靜音,這一點假設非常重要!!!!在隨后的降噪介紹中也要用到這一假設。在估計E0時,選取一定數量的幀比如前100幀語音數據(這些是“靜音”),計算其平均能量值,然后加上一個經驗值或乘以一個大于1的系數,由此得到E0。這個E0就是我們判斷一幀語音是否是靜音的基準,大于這個值就是有效語音,小于這個值就是靜音。
至于M0,比較容易理解,其大小決定了端點檢測的靈敏度,M0越小,端點檢測的靈敏度越高,反之越低。語音應用的場景不同,端點檢測的靈敏度也應該被設置為不同的值。例如,在聲控遙控器的應用中,由于語音指令一般都是簡單的控制指令,中間出現逗號或句號等較長停頓的可能性很小,所以提高端點檢測的靈敏度是合理的,M0設置為較小值,對應的音頻時長一般為200-400毫秒左右。在大段的語音聽寫應用中,由于中間會出現逗號或句號等較長時間的停頓,宜將端點檢測的靈敏度降低,此時M0值設置為較大值,對應的音頻時長一般為1500-3000毫秒。所以M0的值,也就是端點檢測的靈敏度,在實際中應該做成可調整的,它的取值要根據語音應用的場景來選擇。
以上是關于語音端點檢測一個較簡單的原理,實際應用中的算法遠比上面講的要復雜。作為一個應用較廣的語音處理技術,音頻端點檢測仍然是一個較為活躍的研究方向。現在不少大廠已經在使用循環神經網絡(Recurrent Neural Networks, RNN)技術來進行語音的端點檢測。
注意事項:
在進行語音活動檢測時有兩個問題需要注意:
一是背景噪聲問題,即如何在較大的背景噪聲中檢測靜音;
二是前后沿剪切問題。所謂前后沿剪切就是還原語音時,由于從實際講話開始到檢測到語音之間有一定的判斷門限和時延,有時語音波形的開始和結束部分會作為靜音被丟掉,還原的語音會出現變化,因此需要在突發語音分組前面或后面增加一個語音分組進行平滑以解決這一問題。
總結
以上是生活随笔為你收集整理的麦克风阵列技术 二 (自动增益控制 自动噪声抑制 回声消除 语音活动检测)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目部整套管理制度范本,50项都全了
- 下一篇: Carhart四因子模型实用攻略