DRC介紹
開門見山,動態範圍的定義就是訊號的最大幅值和最小幅值比值的對數(單位dB),
動態範圍會受到系統中各個環節的影響。例如同樣是這段音樂,在一個40dB背景噪聲的環境中播放,那麼由於掩蔽效應等因素的影響,最終實際聽到的音樂動態範圍實際上是50dB。
動態範圍會受到系統中各個環節的影響。例如同樣是這段音樂,在一個40dB背景噪聲的環境中播放,那麼由於掩蔽效應等因素的影響,最終實際聽到的音樂動態範圍實際上是50dB。如果對響度和動態範圍感興趣的可以移步看鬼斧神工的文章《詳解音訊中的響度與動態範圍。(推力、耳放、響度戰爭、高解析度等)》
動態範圍控制(Dynamic Range Control,DRC)將輸入音訊訊號的動態範圍對映到指定的動態範圍,可以使聲音聽起來更柔和或更大聲,即一種訊號幅度調節方式。通常對映後的動態範圍小於對映前的動態範圍,因此稱之為動態範圍壓縮。音訊訊號可以進行整體的動態範圍控制,也可以劃分為若干子帶分別進行動態範圍控制。DRC廣泛應用於音訊訊號處理領域,例如助聽器中最常見的寬動態範圍壓縮方法(Wide Dynamic Range Compression,WDRC)、音訊訊號處理中最常用的自動增益控制(Automatic Gain Control,AGC)方法等。DRC側重於從數字域上對增益進行有選擇、有目的地調整,以保證最大訊號有合適的headroom,中間訊號得到合適的amplify,小訊號或者底噪被cutoff掉。
作用
- 將音訊訊號電平與其環境相匹配
- 對輸入的忽大忽小語音進行動態拉伸,使語音聽起來平穩。
- 抑制低電平噪聲,避免噪聲在後續模組AGC中被放大。
- 保護 AD 轉換器免受過載
- 最佳化資訊;也就是使音訊訊號使用到滿幅的動態範圍;
動態範圍控制的型別
- 動態範圍壓縮器(Dynamic range compressor):衰減超過給定閾值聲音的音量;通常用於錄音系統以保護硬體並提高整體響度。
- 動態範圍限幅器(Dynamic range limiter):是壓縮器的一種,可以限制超過給定閾值的訊號;
- 動態範圍擴充套件器(Dynamic range expander):衰減低於給定閾值的安靜聲音音量。它們通常用於使安靜的聲音更加安靜。
- 噪聲門(Noise gate):是擴充套件器的一種,可以限制聲音低於給定閾值
DRC的增益調整基本上是三段:對底噪,中等幅度訊號,幅度較大的訊號的三段不同的處理,比如:
- 底噪:Cutoff,attenuation
- 中等幅度訊號:Expander
- 幅度較大,防止削頂的:Limiter
整體而言演算法較為簡單,其中最關鍵的地方在於曲線的設計。DRC的曲線一般具備下圖這樣的結構,該圖表示的是來濾除小訊號的曲線圖,如果想要動態拉伸的功能,那麼整體曲線需要高於$y=x$這條直線。
靜態曲線(圖片來自《Digital Audio Signal Processing-Udo Zölzer》第七章)
名詞解釋
- NT:噪聲門限(Noise Gate),低於NT的輸入訊號將會被濾除
- LT:限制器閾值(Limiter threshold),高於CT且低於LT的訊號也會被壓縮,而高於LT的訊號將會被直接限幅
- CT:壓縮器閾值(Compressor threshold),高於ET且低於CT的訊號將會保持不變
- ET:擴充套件器閾值(Expander threshold),高於NT且低於ET的訊號將會被抑制
MALTAB的Audio Toolbox中實現了 動態範圍壓縮器、動態範圍限幅器、動態範圍擴充套件器和噪聲門。本教程還提供了動態範圍限制器各個階段的動態範圍限制示例。
基本原理
DRC的原理其實很簡單,就是透過設計一條曲線,將輸入語音幅度$x(n)$透過曲線進行對映得到另一語音幅度值$y(n)$。然後計算兩者之間的差值得到增益值$g_c(n)$,然後根據設定的attack time和release time進行增益平滑以及計算make-up增益,最後再應用到語音得到處理後的語音。基本流程如下
通用的動態範圍控制系統 (來自Matlab官網)
1、線性到dB轉換
從線性值轉換為dB值
$$x_{dB}(n) = 20log_{10}(x(n))$$
2、計算增益
透過將$x_{dB}(n) $訊號傳遞到靜態特徵方程(DRC靜態曲線),假設設計的曲線函式關係為$f(x)$
$$x_{sc}(x_{db})=f(x_{db}(n))$$
計算差值:$g_c(n)=x_{sc}(n)-x_{dB}(n)$
不同型別的DRC都具有不同的靜態特徵和不同的可調屬性:
- Threshold:所有的靜態特性都有一個閾值。在閾值的一側,訊號不變。在閾值的另一側,應用compression, expansion, limiting, 或 gating。
- Ratio:Expanders 和 compressors 使您能夠將靜態特性的輸入輸出比調整為高於或低於給定閾值。
- KneeWidth:expander、compressors和 limiters 使您能夠調整靜態特性的拐點寬度。靜態特性的拐點以閾值為中心。knee width的增加會在閾值周圍產生更平滑的過渡。knee width為零不提供平滑,稱為硬拐點(hard knee)。knee width大於零被稱為軟拐點(soft knee)。
在下面這些靜態特性圖中,expander、limiter和compressor 各有一個 knee width 的拐點寬度。
3、增益平滑
增益平滑減少了增益的急劇變化,避免偽像和不自然的聲音。expander和noiseGate具有相同的平滑方程(都是擴充套件器),limiter和compressor具有相同的平滑方程(都是壓縮器)。
增益平滑的型別由啟動時間(attack time)、釋放時間(release time)和保持時間(hold time)組合指定。啟動時間和釋放時間對應於增益訊號從其最終值的10%上升到90%所需的時間。保持時間是應用增益之前的延遲時間。
expander 和 noiseGate 的平滑方程
$$g_s[n]=\left\{\begin{array}{cl}
\alpha_A g_s[n-1]+\left(1-\alpha_A\right) g_c[n] & \text { if }\left(C_A>k\right) \&\left(g_c[n] \leq g_s[n-1]\right) \\
g_S[n-1] & \text { if } C_A \leq k \\
\alpha_{R}g_s[n-1]+\left(1-\alpha_R\right) g_c[n] & \text { if }\left(C_R>k\right) \&\left(g_c[n]>g_s[n-1]\right) \\
g_S[n-1] & \text { if } C_R \leq k
\end{array}\right.$$
$\alpha_A$和$\alpha_R$由取樣率和指定的啟動和釋放時間確認:$\alpha_A=exp(\frac{-log(9)}{Fs*T_A})$,$\alpha_R=exp(\frac{-log(9)}{Fs*T_R})$
$k$是以樣本為單位的指定保持時間。$C_A$和$C_R$分別是啟動和釋放hold counters
compressor 和 limiter 的平滑方程
$$g_s(n)=\left\{\begin{matrix}
a_Ag_s(n-1)+(1-\alpha_A)g_c(n),\ \ g_c\le g_s(n-1) \\
a_Rg_s(n-1)+(1-\alpha_R)g_c(n),\ \ g_c > g_s(n-1)
\end{matrix}\right.$$
$\alpha_A$和$\alpha_R$由取樣率和指定的啟動和釋放時間確認:$\alpha_A=exp(\frac{-log(9)}{Fs*T_A})$,$\alpha_R=exp(\frac{-log(9)}{Fs*T_R})$
增益平滑例項
輸入訊號兩步動態範圍壓縮的一個簡單案例。在此示例中,壓縮器的閾值為 –10 dB,壓縮比為 5,拐點較硬。
下圖為了顯示了增益平滑的幾種變化。
- 在頂部,顯示了針對不同啟動時間值的平滑增益曲線,釋放時間設定為零秒
- 在中間,釋放時間是變化的,啟動時間保持在零秒不變
- 在底部,啟動和釋放時間均由非零值指定
4、補償增益(make-up gain)
補償增益適用於compressors 和 limiters,其中訊號的較高 dB 部分被衰減或阻塞。dB 降低會顯著降低總訊號功率。在這些情況下,增益平滑後應用補償增益以增加訊號功率。在MATLAB的 Audio Toolbox 中,可以指定一個設定的補償量或將補償模式指定為'auto'。
'auto'補償增益確保 0 dB 輸入產生 0 dB 輸出。例如,假設具有軟拐點的compressors 的靜態特性:
$$x_{s c}\left(x_{d B}\right)=\left\{\begin{array}{cc}
x_{d B} & x_{d B}<\left(T-\frac{W}{2}\right) \\
x_{d B}+\frac{\left(\frac{1}{R}-1\right)\left(x_{d B}-T+\frac{W}{2}\right)^2}{2 W} & \left(T-\frac{W}{2}\right) \leq x_{d B} \leq\left(T+\frac{W}{2}\right) \\
T+\frac{\left(x_{d B}-T\right)}{R} & x_{d B}>\left(T+\frac{W}{2}\right)
\end{array}\right.$$
$T$是threshold,$W$是knee width,$R$是compression ratio。計算出的自動補償增益是在 0 dB 時評估的靜態特性方程的負值:
$$\text { MAKE-UP GAIN }=-x_{s c}(0)=\left\{\begin{array}{cl}
0 & \frac{W}{2}<T \\
-\frac{\left(\frac{1}{R}-1\right)\left(T-\frac{W}{2}\right)^2}{2 W} & -\frac{W}{2} \leq T \leq \frac{W}{2} \\
-T+\frac{T}{R} & -\frac{W}{2}>T
\end{array}\right.$$
5、dB到線性轉換
將增益從dB域變換到線性域:$g_{lin}(n)=10^{\frac{g_m(n)}{20}}$
6、應用增益
$$y(n)=x(n)*g_{lin}(n)$$
栗子
示例:動態範圍限制器
本例中描述的音訊訊號是 0.5 秒間隔的鼓音。limiter屬性是:
- Threshold = –15 dB
- Knee width = 0(硬膝蓋)
- Attack time = 0.004 秒
- Release time = 0.1 秒
- Make-up gain = 1 dB
此示例提供了動態範圍限制器系統各個階段的視覺化演練。
線性到 dB 轉換
增益計算
靜態特性將 dB 訊號限制在 –15 dB。為了確定導致此限制的 dB 增益,增益計算從靜態特性處理的 dB 訊號中減去原始 dB 訊號。
增益平滑
當所應用的增益突然增加時,相對較短的啟動時間規格會導致陡峭的曲線。相對較長的釋放時間會導致應用增益逐漸減小。
補償增益
假設限制器具有 1 dB 補償增益值。補償增益被新增到平滑增益訊號。
dB 到線性轉換
以 dB 為單位的增益逐個元素轉換為線性標度。
應用計算增益
原始訊號乘以線性增益
參考
【書籍】Digital Audio Signal Processing 2nd Edition
【音訊探險記】DRC--動態範圍控制
【MATLAB】Dynamic Range Control
【MATLAB】Multiband Dynamic Range Compression
【知乎】詳解音訊中的響度與動態範圍。(推力、耳放、響度戰爭、高解析度等)
【論文】Zolzer, Udo. "Dynamic Range Control." Digital Audio Signal Processing. 2nd ed. Chichester, UK: Wiley, 2008.
【論文】Giannoulis, Dimitrios, Michael Massberg, and Joshua D. Reiss. "Digital Dynamic Range Compressor Design –– A Tutorial And Analysis." Journal of Audio Engineering Society. Vol. 60, Issue 6, 2012, pp. 399–408.