DRC
一般而言,DRC是音效处理的最后一个模块,前面的模块虽然完成了音效处理功能,实现了产品想要的效果,但是当声音音量很大的时候,为了避免动态范围过大导致的音频失真,也为了保护硬件,扬声器需要利用DRC进行动态范围控制,以压制大信号,防止出现过载失真。
动态范围控制其实也就是可以自动调节信号的动态范围,即最大值和最小值比值的对数,一般用dB表示。DRC还可以通过噪声门来压制一部分噪声,以避免噪声在增大音量的同时放大,此外还可以优化音频信号使用满幅的动态范围。
一般可以包括三个部分 噪声门,expander和compressor
1.compressor/limiter:
当输入信号超过指定的阈值时,对其进行压缩。压缩量由指定的压缩比控制。attack and release times决定了compressor启动或停止压缩的速度; knee width为压缩器增益在阈值附近提供了平滑过渡。最后,可以在compressor的输出端应用补偿增益。这种补偿增益对强峰值和弱峰值的放大程度相等。
compressor的静态压缩特性取决于compression ratio, the threshold and the knee width;
knee分为hard和soft,hard是硬过渡,soft是软过渡。
compressor的attack时间被定义为当信号电平超过阈值时,压缩器的增益从其最终值的10%上升到90%所需的时间(以毫秒为单位)。压缩器的release时间被定义为当信号电平下降到阈值以下时,compressor的增益从其值的90%下降到10%所需的时间(以秒为单位)。以下示例说明了不同attack和release时间的信号包络:
输入最大电平为0 dB,高于指定的-10 dB阈值。0 dB输入的稳态压缩机输出为-10+10/5=-8 dB。因此,增益为-8 dB。启动时间被定义为当输入电平高于阈值时,或者在这种情况下,从-0.8 dB上升到-7.2 dB时,compressor增益从其最终值的10%上升到90%所需的时间。让我们找到compressor增益分别等于-0.8 dB和-7.2 dB的时间:
[~,t1] = min(abs(g(1:Fs) + 0.1 * 8));
[~,t2] = min(abs(g(1:Fs) + 0.9 * 8));
tAttack = (t2 - t1) / Fs;
fprintf('Attack time is %d s\n',tAttack)
Attack time is 5.000000e-02 s
然后,输入信号回落到0,在这里没有压缩。释放时间被定义为当输入低于阈值时,增益从其绝对值的90%下降到10%所需的时间,或者在这种情况下,从-7.2dB下降到-0.8dB。让我们找到无压缩级中增益分别等于-7.2dB和-0.8dB的时间:
[~,t1] = min(abs(g(Fs:end) + 0.9 * 8));
[~,t2] = min(abs(g(Fs:end) + 0.1 * 8));
tRelease = (t2 - t1) / Fs;
fprintf('Release time is %d s\n',tRelease)
Release time is 2.000000e-01 s
其余需要注意的参数Compression ratio:假设hard knee,则ratio是超过操作阈值的信号的输入/输出比。
对于soft knee,knee width定义如下:
Make-up gain 补偿增益补偿压缩过程中的增益损失
系统整体如下:
算法流程:
——matlab Compressor流程
对于limiter 压缩倍数较大的就是limiter,和compressor对matlab而言区别在于如下:
然后实现的时候正向处理,因此需要lookaheadtime,来留一段缓冲时间<分帧,每帧都需要的>。
对于agc而言可以用反馈式处理,响应更快无时延。
此外,因为limiter主要是处理峰值部分,因此最好可以通过过采样来找到真正的峰值,不然有可能压缩的并不是实际的峰值。
峰值检测也有两种,一种是rms一种是peak
此外,还可能有holdtime参数,保持时间是指当输入电平降至阈值以下时,(负)增益在开始向其稳态值下降之前保持的时间段。
<平缓处理其实也约等于一个滤波器处理。>
2.expander
动态范围扩展,其实就是抬升阈值以上的信号幅度值:
其中各个参数都和compressor相反,即比如attack那就是从0.1-0.9的时间
knee同理:
流程略有不同,如下:
如上,注意其中的holdtime部分
3.noisegate
类似compressor,就是压制很低的信号,认为那是噪声,参数都差不多
整体流程相对简单
Multiband Dynamic Range Compression
多带drc——Linkwitz-Riley交叉滤波器用于获得整体全通频率响应。然后使用单独的动态范围压缩器对每个频带进行压缩。关键的压缩器特性,compression ratio, the attack and release time, the threshold and the knee width,对于每个频带都是独立可调的。展示了压缩对信号动态范围的影响。
由于Linkwitz-Riley交叉滤波器是由两个巴特沃斯滤波器级联而成的,因此其阶数总是偶数。巴特沃斯滤波器的斜率等于6*N dB/倍频程,其中N是滤波器阶数。当crossoverFilter的CrossoverSlopes属性可被12整除时(即过滤器是偶数顺序的),该对象实现Linkwitz-Riley交叉。否则,该对象实现巴特沃斯交叉,即低通和高通部分分别使用CrossoverSlopes/6阶的单个巴特沃斯滤波器来实现。
——Linkwitz-Riley滤波器是由Siegfried Linkwitz以及Russ Riley两人在1976年设计完成的,主要用于主动式滤波器电路中,例如许多精密的多音路电子分音系统中,当然,音箱的无源分频网络也可以采用。这种滤波器的特点是具有高达四阶的衰减斜率,换句话说,每隔一个八度音阶的频率,声音就会衰减24dB的能量,即衰减斜率为-24dB/Oct(Oct即Octave,一个八度音程的意思)。同时,在整个音频段(20Hz-20kHz),Linkwitz-Riley滤波器具有平坦的相位响应,讯号经过滤波器之后,不会产生严重的相位扭曲。