1. 程式人生 > >動態範圍控制演算法基本原理

動態範圍控制演算法基本原理

動態範圍控制可以自動調整訊號的動態範圍;(訊號的動態範圍是訊號的最大幅值與最小幅值比值的對數,使用dB作為單位)

動態範圍控制可以做的事情

  • 根據環境匹配音訊訊號電平;也就是杜比volume leveler的作用;
  • 保護ADC使其不會過載;在廣播訊號傳送時,傳送器有峰值限制,超過這個峰值會使得傳送器過載。動態範圍控制可以壓縮原始訊號的動態,使傳送訊號的動態範圍滿足傳送器的要求。在音訊領域,將數字音訊訊號送到DAC之前,音訊智慧功放演算法中的DRC可以實現揚聲器振幅保護;
  • 優化資訊;也就是使音訊訊號使用到滿幅的動態範圍;
  • 壓制低電平的噪聲;DRC的噪聲門有一定的降噪效果;

動態範圍控制的型別

  • 動態範圍壓縮器(Dynamic range compressor)--減弱超過給定閾值的大聲訊號的音量;可以保護硬體,增加整體響度;
  • 動態範圍限幅器(Dynamic range limiter)--是壓縮器的一種,可以限制超過給定閾值的訊號;
  • 動態範圍擴充套件器(Dynamic range expander)--減弱低於給定閾值的小聲訊號的音量;可以使得小訊號聽起來更加小聲
  • 噪聲門(Noise gate)--是擴充套件器的一種,可以限制低於給定閾值的訊號。
DRC 框圖

在動態範圍控制系統中,增益訊號在sidechain中計算,然後應用到輸入訊號中;

首先解釋什麼是增益訊號,在DRC中要確定對離散訊號的每一個樣本使用多少增益,也就是給沒一個樣本值分別乘以一個係數,這個係數就是增益,這個增益序列就是增益訊號;增益訊號也叫做DRC的控制訊號。

sidechain包含的模組

  • 將原始訊號從線性值轉換為dB值:x->xdB,所有的DRC系統使用的增益訊號都是用dB值進行處理。xdB = 20log10(x)
  • 增益計算,通過將dB訊號傳遞到靜態特徵方程(DRC靜態曲線),獲取差值gc=xsc-xdB;
  • 增益平滑:gc->gs;使用attack time、release time以及hold time作為係數對訊號進行平滑。也就是對於臺階訊號,增益訊號並不是臺階的,使用指數或者對數函式進行平滑過渡。Attack time和release time對應增益訊號從最終值的10%到90%所花費的時間。Hold time是在增益被施加之前的延時週期。為什麼會有hold time?因為即使使用很短的attack time,limiter仍然會出現超調量,這可以在增益平滑中使用一個很短的時延來解決,例如300微秒。增益平滑使用的是一階遞迴濾波器:gs(n) = (1 − k) · gs(n − 1) + k · gc(n),k=AttackTime,ReleaseTime;
  • 新增make-up gain(對於壓縮器和限幅器):gs->gm
  • dB值到線性值的轉換:gm->glin
  • 在原始音訊訊號中應用計算出來的增益訊號:y=glin * x

增益計算

增益計算單元進行增益訊號的初步預估,增益計算單元的核心模組是靜態特徵,每一種型別的DRC有不同的靜態特徵,包括了可調的屬性引數:

a)閾值threshold--所有的靜態特性都有一個閾值,在閾值的一邊,輸入訊號沒有被修改,在閾值的另一邊,輸入訊號被壓縮、擴充套件以及限幅;

b)壓縮比率Ratio--擴充套件器和壓縮器的靜態特徵模組在計算增益時依賴使用者提供的輸入/輸出的壓縮比;

c)kneewidth-- 擴充套件器、壓縮器以及限幅器的靜態特徵模組可以調整拐點的寬度;拐點寬度包含在閾值中,拐點寬度越大,閾值附近的過渡越平滑。如果拐點沒有提供過度,則是硬拐點;如果拐點附近有大於0的拐點寬度值,則是軟拐點。

在計算訊號增益要進行電平檢測,電平檢測使用遞迴一階濾波器獲取原始訊號的電平;有基於Peak和基於RMS兩種方法;Peak是生成訊號電平的峰值包絡,RMS是計算前N個樣本的RMS值作為當前樣本的電平。電平檢測的作用是對於一個在原點波動的訊號,DRC關心的是訊號的峰值或者RMS值,而不關心訊號的振盪情況。電平檢測一階遞迴濾波器,使用Attack time或者release time作為濾波器的係數進行控制。