在音頻通話和視頻會議中,音頻自動增益控制AGC模塊的主要作用:
- ? 穩定音頻信號的輸出電平。無論麥克風采集信號的強弱(如用戶離麥克風遠近程度不同),盡可能保證音頻采集模塊的輸出音量保持相對一致,不會偏大造成消波,也不會偏小導致聽不清楚。
- ? 動態適應音量采集的變化環境。即可以應對環境中噪音變化、設備差異(如不同麥克風靈敏度)、用戶說話習慣差異,動態自動調整語音信號的強度,使得其輸出保持在一個合適的水平。
在常見的消費類電子產品的音頻編解碼器Audio Codec的處理鏈路之中,AGC模塊一般工作中經過ADC轉換之后的數字域處理環節,通過DSP算法來實現動態調整語音信號數據增益的功能,這樣的處理方式靈活性更好,并且可以與其他DSP算法如降噪、AEC等協同優化。當然,一些低端的Audio Codec(例如TLV320AIC3101)內部缺少豐富的數字音頻處理功能,那么AGC模塊也可以直接在模擬域對PGA的增益進行調節來實現自動增益控制的效果。如下圖是TLV310AIC3101的AGC處理鏈路。
另外,我們只有在音頻信號的輸入鏈路的處理中,也就是對麥克風采集語音信號的處理中,才會用到AGC動態調整增益來實現語音信號強度基本保持一致的效果;在音頻信號的輸出鏈路,也就是對揚聲器播放語音信號的處理鏈路之中,一般是不需要AGC的,此時對于輸出語音信號的大小通常由用戶手動設置或系統音量管理,無需自動增益。
1. AGC音頻處理鏈路與VAD模塊
一般而言,從麥克風采集到的聲音信號中,除了真正的我們想要保留的本地端語音信號以外,不可避免地還會包含有一定的噪聲、雙向對接狀態下的回聲等,而AGC既然是通過調整音頻采樣數據的增益來維持音量的穩定性,那么其要穩定的對象勢必是盡可能去除了噪聲和回聲的本地端語音信號,這就是在音頻3A鏈路中,應該把AGC放在AEC和ANS之后進行處理的原因所在,因為我們要進行音量自動增益控制的對象并不包含回聲和噪聲。
以上的噪聲和回聲分別在ANS和AEC環節處理后,在AGC自動增益控制的處理流程中,還包含一個VAD(語音活動檢測)模塊用于決定何時啟動音頻采樣數據的增益調整。VAD模塊的主要目標就是對麥克風連續采集的語音信號區分為語音段與非語音段(如靜默或背景噪聲),只在語音段才會激活AGC對音頻數據的增益進行動態控制,非語音段抑制增益調整或維持固定增益,防止放大噪聲,避免AGC的動態增益調整對非語音信號產生負面影響。
VAD模塊對于語音段和非語音段的判決,以音頻幀為單位,對音頻幀內音頻采樣數據的均方根能量進行統計,與VAD模塊維護的動態本地噪聲的能量進行比較,若當前幀能量高于動態噪聲本底+固定偏移(如+3dB),可判定為語音段候選,再結合狀態機控制機制(如連續多幀高于閾值判定為語音段,連續多幀低于閾值判定為非語音段),給出語音段和非語音段的最終判決。
2. AGC的處理流程
2.1. 音頻采樣數據的預處理
如上所述,AGC工作在Audio Codec的數字域,也就是對麥克風采集信號經過ADC以及其他音頻處理模塊處理后的數字采樣序列中執行自動增益處理的流程。在該環節,首先對連續的音頻采樣數據進行切片處理,把連續的音頻數據切分為固定采樣數量的音頻幀,后續的AGC處理是以音頻幀為單位。
在AGC的分幀處理上,一般會采用50%重疊的方式進行處理,即當前音頻幀的前50%采樣與上一個音頻幀的后50%采樣相同,以平滑音頻幀的邊界效應,避免兩個連續的音頻幀增益不同造成的突變。
2.2. VAD檢測
如上所述,VAD模塊通過比較當前音頻的幀能量與噪聲本底的能量,判斷當前音頻幀處于語音段還是非語音段。
AGC的流程中一般僅在語音段觸發AGC增益調整。
2.3. 自動增益的計算階段
自動增益的計算階段要依賴于AGC模塊的幾個提前預設值:
- ? 目標電平,也就是對于AGC模塊的調整而言,期望AGC模塊的輸出能夠達到的目標音量水平。
- ? 時間常數,表示增益調整的時間參數,用于控制增益調節的平滑度,避免聲音音量忽大忽小。
在計算增益時,對當前音頻幀的能量和目標電平進行比較,當當前幀能量高于目標電平時,應適當減小增益以避免音頻采樣數據疊加增益后過載;而如果當前幀能量低于目標電平,則增大增益提高音量的幅度。
針對信號的動態范圍比較小(信號幅度的差異不大)的應用場景,一般就可以簡單的選擇線性增益調整模式:即根據當前音頻幀的能量與目標電平的差異確定一個增益的大小,對所有的音頻采樣進行相同的增益調整。
而針對復雜信號環境(如突發噪聲、多頻段干擾),則需采用非線性增益的調整策略:
- ? 動態范圍壓縮(DRC)。DRC是一種通過非線性增益調整信號動態范圍的技術,不僅可以用于語音信號的處理,也廣泛應用于通信系統和智能設備領域中。DRC的工作大致依賴于三個參數:threshold_low、threshold_high和ratio。其工作邏輯大概為:當音頻采樣的幅度和能量低于threshold_low閾值的時候,DRC就會設置比較低的增益以抑制噪聲;當音頻采樣的幅度和能量在threshold_low和threshold_high之間的時候,DRC按照前面計算出來的目標增益對該音頻采樣進行設置;而當音頻采樣的幅度和能量大于threshold_high時,就按照ratio的設置,對這個音頻采樣的增益進行適當壓縮,以避免出現消頂的問題。
- ? 多頻段增益控制。首先通過FFT運算執行頻帶分割,把信號分為低頻、中頻、高頻子帶;然后對每個子帶單獨計算并調整增益,這樣可以避免整體調整所導致的頻譜失衡問題,整個處理方式有點類似于EQ的工作流程了,對于不同頻段設置不同的增益,或者抑制,或者增強。
此外,自動增益計算和調整的時間常數則主要包含兩種類型的時間參數,用于實現增益和調整后語音幅度的平滑和自然變化:
- ? 啟動時間(Attack Time):當音頻信號的幅度突增時,快速降低增益(典型值20~100ms),防止出現瞬時過載的問題。
- ? 釋放時間(Release Time):當信號幅度減弱時,則緩慢恢復增益(典型值100~2000ms)。
2.4. 增益的應用階段及其后處理
AGC處理的最后階段,就是把計算階段所計算出來的增益應用到當前音頻幀的所有采樣數據上。根據前一階段采用線性或者非線性的增益計算策略,針對性的對音頻采樣設置一致或者不一致的增益。
此外,經過以上AGC處理以后的音頻采樣序列數據,還需要限制其幅值(如-1dBFS),防止DAC或揚聲器過載;以及與前面階段的AEC、ANS等音頻處理模塊反饋聯動,實現對音頻數據的穩定控制。