主要内容

多频带动态范围压缩

此示例显示如何模拟数字音频多频带动态范围压缩系统。

介绍

动态范围压缩通过衰减强峰的水平来减少信号的动态范围,同时保持较弱的峰值不变。压缩在音频录制,混合和广播中具有应用。

多频带压缩通过首先将音频信号分成多个频段,然后通过其自身独立可调节的压缩机将音频信号分成不同的音频频段。多频带压缩广泛用于音频母带,通常包含在音频工作站中。

在该示例中的多频带压缩机首先使用多频带交叉滤波器将音频信号分成不同的频带。LinkWitz-Riley交叉过滤器用于获得整体allpass频率响应。然后使用单独的动态范围压缩机压缩每个频带。键压缩机特性,例如压缩比,攻击和释放时间,阈值和膝关节宽度为每个频带可独立地调谐。展示了压缩对信号动态范围的影响。

LinkWitz-Riley Crossover过滤器

LinkWitz-Riley Crossover滤波器包括低通和高通滤波器的组合,每个滤波器通过级联两个低通或高通巴特滤波器组成。求和两个滤波器的响应在交叉频率下产生0 dB的增益,使得交叉起到ALLPASS滤波器(因此在音频信号中引入没有失真)。

交叉Filter.可用于实现LinkWitz-Riley System对象。由于通过级联两个Butterworth滤波器形成LinkWitz-Riley Crossover滤波器,因此其顺序均均匀。Butterworth滤波器的斜率等于6 *Ndb / octave,在哪里N是过滤器订单。当。。。的时候交叉潜水艇财产交叉Filter.是可分开的12.(即筛选器是偶然的),对象实现了LinkWitz-Riley交叉。否则,对象实现了一个Butterworth交叉,其中低通和高通截面各自使用单个Butterworth滤波器进行订单来实现交叉索引/ 6.

以下是用于过滤信号的第四阶链路Wi​​tz-Riley交叉的示例。请注意,低通和高通节点各自在交叉频率下具有-6 dB增益。低通和高通段的总和是asspass。

FS = 44100;%LinkWitz-Riley过滤器交叉=交叉Filter(1,5000,4 * 6,FS);%转移函数估计transferfuncestimator = dsp.transferfuncleactientimator(......'频率范围''片面''spectralaverages'20);FrameLength = 1024;scope = dsp.arrayplot(......'plottype''线'......'ylimits',[ -  40 1],......'ylabel''幅度(db)'......'xscale''日志'......'SampleIncrement',(fs / 2)/(frameLength / 2 + 1),......'xlabel''频率(Hz)'......'标题''第八次命令LinkWitz-Riley Crossover Filter'......'陈旧',真的,......'ChannelNames',{'乐队1''乐队2''和'});Tic.尽管TOC <10 IN = RANDN(FRAMELENG,1);%返回交叉过滤器的低通和高通响应[YLP,YHP] =交叉(IN);%总结响应Y = YLP + YHP;v = transferfuncestimator(Repmat(在,1,3),[YLP YHP Y]);范围(20 * log10(abs(v)));结尾

多频带交叉过滤器

交叉Filter.也可用于通过在树状结构中组合双频交叉滤波器和AllApd滤波器来实现多频带交叉滤波器。滤波器将频谱划分为多个频段,使得它们的总和是完美的AllPass滤波器。

下面的示例示出了由第四顺序形成的四带交叉滤波器,该滤波器LinkWitz-Riley交叉过滤器形成。注意四个频段的总和的Allpass响应。

FS = 44100;交叉=交叉滤器(3,[2E3 5E3 10E3],[24 24 24],44100);transferfuncestimator = dsp.transferfuncleactientimator('频率范围''片面''spectralaverages'20);l = 2 ^ 14;scope = dsp.arrayplot(......'plottype''线'......'xoffset',0,......'ylimits',[ -  120 5],......'xscale''日志'......'SampleIncrement',.5 * fs /(l / 2 + 1),......'ylabel''频率响应(DB)'......'xlabel''频率(Hz)'......'标题''四带交叉过滤器'......'陈旧',真的,......'ChannelNames',{'乐队1''乐队2''乐队3''乐队4''和'});tic;尽管TOC <10 IN = RANDN(L,1);%将信号分成四个频段[YLP,YBP1,YBP2,YHP] =交叉(IN);Y = YLP + YBP1 + YBP2 + YHP;z = transferfuncestimator(Repmat(In,1,5),[YLP,YBP1,YBP2,YHP,Y]);范围(20 * log10(abs(z))))结尾

动态范围压缩

压缩机是一个动态范围压缩机系统对象。当超过指定阈值时,输入信号被压缩。压缩量由指定的压缩比控制。攻击和释放时间确定压缩机启动或停止压缩的速度如何。膝关节宽度为压缩机增益周围提供了平滑的转换。最后,可以在压缩机的输出端应用化妆增益。该化妆增益同样放大强度和弱峰。

压缩机的静态压缩特性取决于压缩比,阈值和膝关节宽度。下面的示例说明了硬膝的静态压缩特性:

DRC =压缩机(-15,5);可视化(DRC);

为了查看阈值,比率和膝关节宽度对压缩机的静态特性的影响,改变了值的值临界点比率kneewidth.特性。静态特征图应该相应地改变。

压缩机的攻击时间被定义为当信号电平超过阈值时,压缩机的增益从其最终值的10%到90%所花费的时间(在MSEC中)。当信号电平下降到阈值以下时,压缩机的释放时间被定义为时刻(以秒为单位),压缩机的增益从其值的90%降至10%。下面的示例说明了不同释放和攻击时间的信号包络:

FS = 44100;DRC =压缩机(-10,5,......'采样率',fs,......'攻击时间',0.050,......'推出日期',0.200,......'makeupgainmode''财产');x = [(fs,1); 0.1 * ofer(fs,1)];[y,g] = drc(x);t =(1 / fs)*(0:2 * FS  -  1);图形子图(211)绘图(t,x);抓住网格绘图(t,y,'r')ylabel('振幅') 传奇('输入''压缩输出')子图(212)绘图(t,g)网格传奇('压缩机增益(DB)')Xlabel('时间(秒)')ylabel('收益(DB)'

图包含2个轴。轴1包含2个类型的2个物体。这些对象表示输入,压缩输出。轴2包含类型线的对象。该对象表示压缩机增益(DB)。

输入最大级别为0 dB,高于指定的-10 dB阈值。0 dB输入的稳态压缩机输出为-10 + 10/5 = -8 dB。因此增益-8 dB。当输入电平超过阈值时或在这种情况下,从-0.8 db到-7.2 dB时,攻击时间被定义为压缩机增益从其最终值的10%到90%所需的时间。让我们发现压缩阶段的收益的时间分别等于-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('攻击时间是%d s \ n',tittack)
攻击时间为5.000000E-02 S.

然后输入信号掉回0,其中没有压缩。当输入远低于阈值时,或者在这种情况下,将释放时间定义为增益从其绝对值的90%到10%所花费的时间。让我们发现没有压缩阶段的收益等于-7.2 db和-0.8 db的时间:

[〜,t1] = min(abs(g(fs:end)+ 0.9 * 8));[〜,t2] = min(abs(g(fs:end)+ 0.1 * 8));trelease =(t2  -  t1)/ fs;fprintf('释放时间是%d s \ n',孕妇)
发布时间为2.000000E-01 s

下面的示例说明了动态范围压缩对音频信号的影响。压缩阈值设置为-15dB,压缩比为7。

FrameLength = 1024;reader = dsp.audiofilereader('文件名'......'Rockguitar-16-44p1-stereo-72secs.wav'......'samplesperframe',frameLength);%压缩机。阈值= -15 dB,比率= 7DRC =压缩机(-15,7,......'采样率',读者。赞美,......'makeupgainmode''财产'......'kneewidth'5);范围= timescope('采样率',读者。赞美,......'timespansource''财产'......'时间跨度',1,'bufferLength',fs * 4,......'showgrid',真的,......'layoutdimensions',[2 1],......'numinputports'2,......'timespanoverrunaction''滚动');scope.activedisplay = 1;scope.ylimits = [-1 1];scope.showlegend = true;scope.channelnames = {'原始与压缩音频'};scope.activedisplay = 2;scope.ylimits = [-6 0];scope.ylabel ='收益(DB)';scope.showlegend = true;scope.channelnames = {'压缩机增益在DB'};尽管〜Isdone(读者)x =读取器();[y,g] = drc(x);x1 = x(:,1);Y1 = Y(:,1);范围([x1,y1],g(:,1))结尾

万博1manbetxMultibilink版本的MultiBand动态范围压缩示例

以下模型实现了多频带动态范围压缩示例:

模型='audiomulibanddynamiccompression';Open_System(型号)

在该示例中,音频信号首先使用多频带交叉滤波器划分为四个频带。每个频带都使用单独的压缩机压缩。然后重新组合四个频带以形成音频输出。计算未压缩和压缩信号的动态范围(定义为信号RMS的最大绝对值与信号RMS的比率)。要听到原始音频信号和压缩音频信号之间的差异,请在顶层上切换开关。

该模型集成了旨在与模拟交互的用户界面(UI)。UI允许您调整参数,结果立即反映在模拟中。要启动控制模拟的UI,请单击模型上的“启动参数调整UI”链接。

set_param(型号,'停止''(1/44100)* 8192 * 20');SIM(型号);

关闭模型:

bdclose(模型)

Matlab版本的多频带动态范围压缩示例

HelperMultibandCompressionsim是包含多频带动态范围压缩示例的Matlab功能的实现。它通过形成算法的对象实例化,初始化和步骤。

功能MultibandAudiocompectrupleExampleapp.包裹HelperMultibandCompressionsim并迭代地称之为。它还绘制未压缩的与压缩音频信号。绘制时发生Plotesults.输入到该函数是'true'。

执行MultibandAudiocompectrupleExampleapp.运行模拟并绘制范围的结果。请注意,只要用户未明确停止它,模拟运行。

MultibandAudiocompectrupleExampleapp.启动旨在与模拟交互的UI。UI允许您调整参数,结果立即反映在模拟中。有关UI的更多信息,请参阅helpercreateparamtuningui.

MATLAB编码器可用于为函数生成C代码HelperMultibandCompressionsim。为了为您的平台生成MEX文件,执行HelperMultibandCompressionCodegeneration.

通过调用包装函数MultibandAudiocompectrupleExampleapp.'真的'作为一个参数,可以使用生成的MEX文件而不是HelperMultibandCompressionsim用于模拟。在这种情况下,UI仍在MATLAB环境内运行,但是MEX文件正在执行主要处理算法。在这种模式下性能得到改善,而不会影响调谐参数的能力。

称呼multibandaudiocompecturalexampleapp(true)使用MEX文件进行仿真。同样,模拟运行,直到用户明确地从UI停止它。