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.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/159054.html