动态范围控制(Dynamic Range Control,DRC)原理
DRC介绍
动态范围就是信号的最大幅值和最小幅值比值的对数(单位dB),动态范围会受到系统中各个环节的影响。例如同样是这段音乐,在一个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的曲线一般具备下图这样的结构,该图表示的是来滤除小信号的曲线图,如果想要动态拉伸的功能,那么整体曲线需要高于
静态曲线(图片来自《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的原理其实很简单,就是通过设计一条曲线,将输入语音幅度
通用的动态范围控制系统 (来自Matlab官网)
1、线性到dB转换
从线性值转换为dB值
2、计算增益
通过将
计算差值:
不同类型的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 的平滑方程
compressor 和 limiter 的平滑方程
增益平滑实例
输入信号两步动态范围压缩的一个简单案例。在此示例中,压缩器的阈值为 –10 dB,压缩比为 5,拐点较硬。
下图为了显示了增益平滑的几种变化。
- 在顶部,显示了针对不同启动时间值的平滑增益曲线,释放时间设置为零秒
- 在中间,释放时间是变化的,启动时间保持在零秒不变
- 在底部,启动和释放时间均由非零值指定
4、补偿增益(make-up gain)
补偿增益适用于compressors 和 limiters,其中信号的较高 dB 部分被衰减或阻塞。dB 降低会显著降低总信号功率。在这些情况下,增益平滑后应用补偿增益以增加信号功率。在MATLAB的 Audio Toolbox 中,可以指定一个设定的补偿量或将补偿模式指定为'auto'。
'auto'补偿增益确保 0 dB 输入产生 0 dB 输出。例如,假设具有软拐点的compressors 的静态特性:
5、dB到线性转换
将增益从dB域变换到线性域:
6、应用增益
栗子
示例:动态范围限制器
本例中描述的音频信号是 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.
作者:凌逆战
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
本文章不做任何商业用途,仅作为自学所用,文章后面会有参考链接,我可能会复制原作者的话,如果介意,我会修改或者删除。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?