这个例子展示了如何设计参数均衡器滤波器。参数均衡器是用于音频的数字滤波器,用于调整声音信号的频率内容。参数均衡器提供了超越图形均衡器的功能,允许调整增益,中心频率和每个滤波器的带宽。相反,图形均衡器只允许调整每个滤波器的增益。
通常,参数均衡器被设计成二阶IIR滤波器。这些滤波器的缺点是,由于它们的低阶,它们可以呈现相对较大的波纹或过渡区域,当它们中的几个级联时,可能会相互重叠。DSP System Toolbox™提供了设计高阶IIR参数均衡器的能力。这种高阶设计为每个滤波器的形状提供了更多的控制。此外,当滤波器阶数为2时,设计了传统二阶参数均衡器的特例。
这个例子讨论了两种不同的参数均衡器设计方法。第一个是使用designParamEQ
第二个是使用fdesign.parameq
.designParamEQ
应该满足大多数需要。它更简单,并且为大多数常见的设计提供了能力。它还支持C代码生金宝app成,如果希望在运行时用生成的代码调优过滤器,则需要C代码生成。fdesign.parameq
提供了许多先进的设计选项,最终控制的结果过滤器。本例中并没有探讨所有的设计选项。
考虑以下两种参数均衡器的设计。除过滤器顺序不同外,设计规格均相同。第一个设计是一个典型的二阶参数均衡器,它将信号放大约10 kHz 5 dB。第二种设计使用了六阶滤波器。请注意,与二阶设计相比,六阶滤波器更接近理想的砖墙滤波器。显然,近似可以通过进一步增加滤波器阶数来改进。为这种改进的近似所付出的代价是增加了实现成本,因为需要更多的乘数。
Fs = 48 e3;N1 = 2;N2 = 6;G = 5;% 5分贝我们= 10000 / (Fs / 2);BW = 4000 / (Fs / 2);(B1, A1] = designParamEQ (N1, G,我们,BW);(B2 A2) = designParamEQ (N2, G,我们,BW);BQ1 = dsp。BiquadFilter (“SOSMatrix”[B1。”,[1 A1。]]);BQ2 = dsp。BiquadFilter (“SOSMatrix”, [B2。”[(3,1),A2。]]);hfvt = fvtool (BQ1 BQ2,“Fs”Fs,“颜色”,“白色”);传奇(hfvt的二阶设计,“六阶设计”);
其中一个设计参数是滤波器带宽BW。在上例中,带宽设置为4khz。4千赫带宽出现在一半的增益(2.5 dB)。
另一个常见的设计参数是质量因子Q。滤波器的Q被定义为Wo/BW(中心频率/带宽)。它提供了一个衡量滤波器锐度的指标,即滤波器在参考值(0 dB)和增益G之间的锐度变化。考虑两个G和Wo相同但Q值不同的设计。
Fs = 48 e3;N = 2;Q1 = 1.5;Q2 = 10;G = 15;% 15分贝我们= 6000 / (Fs / 2);BW1 =我们/ Q1;BW2 =我们/ Q2;(B1, A1] = designParamEQ (N, G,我们BW1);(B2 A2) = designParamEQ (N, G,我们BW2);BQ1 = dsp。BiquadFilter (“SOSMatrix”[B1。”,[1 A1。]]);BQ2 = dsp。BiquadFilter (“SOSMatrix”, (B2。”,[1 A2。]]);hfvt = fvtool (BQ1 BQ2,“Fs”Fs,“颜色”,“白色”);传奇(hfvt“Q = 1.5”,“Q = 10”);
虽然较高的Q因子对应于更锐的滤波器,但也必须注意,对于给定的带宽,Q因子仅仅通过增加中心频率而增加。这似乎不太直观。例如,下面两个滤波器具有相同的Q因子,但显然其中一个占用的带宽比另一个大。
Fs = 48 e3;N = 2;Q = 10;G = 9;% 9 dBWo1 = 2000 / (Fs / 2);Wo2 = 12000 / (Fs / 2);BW1 = Wo1 / Q;BW2 = Wo2 / Q;(B1, A1] = designParamEQ (N, G, Wo1 BW1);(B2 A2) = designParamEQ (N, G, Wo2 BW2);BQ1 = dsp。BiquadFilter (“SOSMatrix”[B1。”,[1 A1。]]);BQ2 = dsp。BiquadFilter (“SOSMatrix”, (B2。”,[1 A2。]]);hfvt = fvtool (BQ1 BQ2,“Fs”Fs,“颜色”,“白色”);传奇(hfvt'BW1 = 200hz;Q = 10 ','BW2 = 1200 Hz;Q = 10 ');
然而,当在对数频率尺度上观察时,两个滤波器的“倍频带宽”是相同的。
hfvt = fvtool (BQ1 BQ2,“FrequencyScale”,“日志”,“Fs”Fs,“颜色”,“白色”);传奇(hfvt'Fo1 = 2千赫','Fo2 = 12khz ');
当中心频率设置为0.5*pi(奈奎斯特速率的一半)时,滤波器的带宽BW仅完美地围绕中心频率Wo居中。当Wo接近0或pi时,会出现翘曲效应,使带宽的大部分发生在中心频率的一侧。在边缘情况下,如果中心频率设置为0 (pi),滤波器的整个带宽发生在中心频率的右侧(左侧)。结果就是所谓的搁置低(高)过滤器。
Fs = 48 e3;N = 4;G = 10;% 10 dBWo1 = 0;Wo2 = 1;对应Fs/2 (Hz)或pi (rad/sample)BW = 1000 / (Fs / 2);%带宽发生在7.4 dB在这种情况下(B1, A1] = designParamEQ (N, G, Wo1, BW);(B2 A2) = designParamEQ (N, G, Wo2, BW);BQ1 = dsp。BiquadFilter (“SOSMatrix”, [B1。”[(2,1),A1。]]);BQ2 = dsp。BiquadFilter (“SOSMatrix”, [B2。”[(2,1),A2。]]);hfvt = fvtool (BQ1 BQ2,“Fs”Fs,“颜色”,“白色”);传奇(hfvt“低货架滤波器”,“高架子上过滤”);
所有以前的设计都是参数均衡器的例子,提高信号在一定的频带。你也可以设计均衡器,在给定的区域切断(衰减)信号。
Fs = 48 e3;N = 2;G = 5;% 5分贝我们= 6000 / (Fs / 2);BW = 2000 / (Fs / 2);[B] = designParamEQ (N, G,我们,BW);BQ = dsp。BiquadFilter (“SOSMatrix”[B。”,[1]]);。”hfvt = fvtool (BQ,“Fs”Fs,“颜色”,“白色”);传奇(hfvt'G = -5 dB');
在极限情况下,滤波器可以被设计成在指定的频率下增益为零(-Inf dB)。这允许设计二阶或更高阶陷波滤波器。
Fs = 44.1 e3;N = 8;G =无穷;Q = 1.8;我们= 60 / (Fs / 2);% 60hz下行BW =我们/ Q;在这种特殊情况下,%带宽将出现在-3 dB(B1, A1] = designParamEQ (N, G,我们,BW);(NUM窝]= iirnotch(我们,BW);% or [NUM,DEN] = designparameterq (2,G,Wo,BW); / /设计参数SOS2 = (NUM,穴);BQ1 = dsp。BiquadFilter (“SOSMatrix”, [B1。”[(4,1),A1。]]);BQ2 = dsp。BiquadFilter (“SOSMatrix”, SOS2);hfvt = fvtool (BQ1 BQ2,“Fs”Fs,“FrequencyScale”,“日志”,“颜色”,“白色”);传奇(hfvt“8阶陷波滤波器”,“二阶陷波滤波器”);
参数均衡器通常以级联(串联)方式连接,以便几个参数均衡器同时使用来均衡一个音频信号。要以这种方式连接多个均衡器,请使用dsp。FilterCascade
.
Fs = 48 e3;N = 2;G1 = 3;% 3 dBG2 = 2;% 2 dBWo1 = 400 / (Fs / 2);Wo2 = 1000 / (Fs / 2);BW = 500 / (Fs / 2);%带宽发生在7.4 dB在这种情况下(B1, A1] = designParamEQ (N, G1、Wo1 BW);(B2 A2) = designParamEQ (N, G2、Wo2 BW);BQ1 = dsp。BiquadFilter (“SOSMatrix”[B1。”,[1 A1。]]);BQ2 = dsp。BiquadFilter (“SOSMatrix”, (B2。”,[1 A2。]]);FC = dsp.FilterCascade (BQ1 BQ2);hfvt = fvtool (FC,“Fs”Fs,“颜色”,“白色”,“FrequencyScale”,“日志”);传奇(hfvt“二级滤波器级联”);
低阶设计,如上面的二阶滤波器,如果它们的中心频率是紧密间隔的,就会相互干扰。在上面的例子中,以1 kHz为中心的滤波器被认为有-2 dB的增益。由于其他滤波器的干扰,实际增益更接近-1 dB。高阶设计不太容易受到这种干扰。
Fs = 48 e3;N = 8;G1 = 3;% 3 dBG2 = 2;% 2 dBWo1 = 400 / (Fs / 2);Wo2 = 1000 / (Fs / 2);BW = 500 / (Fs / 2);%带宽发生在7.4 dB在这种情况下(B1, A1] = designParamEQ (N, G1、Wo1 BW);(B2 A2) = designParamEQ (N, G2、Wo2 BW);BQ1a = dsp。BiquadFilter (“SOSMatrix”, [B1。”[(4,1),A1。]]);BQ2a = dsp。BiquadFilter (“SOSMatrix”, [B2。”[(4,1),A2。]]);FC2 = dsp.FilterCascade (BQ1a BQ2a);FC2 hfvt = fvtool (FC,“Fs”Fs,“颜色”,“白色”,“FrequencyScale”,“日志”);传奇(hfvt“二级滤波器级联”,“8阶滤波器级联”);
对于更高级的设计,fdesign.parameq
可以使用。例如,由于频率扭曲,通常很难控制带宽发生的准确频率边缘。要做到这一点,可以使用以下方法:
Fs = 44.1 e3;N = 4;流= 3000;Fhigh = 4000;Grsq = 1;Gref = 10 * log10 (Grsq);G = 8;Gsq = 10 ^ (G / 10);滤波器的%幅度平方;G = 5 dBGBW = 10*log10((Gsq + Grsq)/2);%流量和Fhigh出现在-2.37 dBPEQ = fdesign.parameq (' N,流、Fhigh Gref、G0 GBW”,...N,流量/ (Fs / 2) Fhigh / (Fs / 2), Gref, G, GBW);BQ =设计(PEQ,“SystemObject”,真正的);hfvt = fvtool (BQ,“Fs”Fs,“颜色”,“白色”);传奇(hfvt‘Flow = 3 kHz and Fhigh = 4 kHz的均衡器’);
注意,滤波器在指定的3 kHz和4 kHz有-2.37 dB的增益。
搁板滤波器的特性之一是过渡带宽(有时也称为过渡斜率),它可以由搁板斜率参数s来指定。带宽参考增益GBW总是被设置为搁板滤波器升压增益或削减增益的一半。所有其他参数不变,随着S的增加,过渡带宽减小,(响应的斜率增加)在GBW点附近产生一个“斜率旋转”,如下例所示。
N = 2;Fs = 48 e3;Fo = 0;% F0=0设计低通滤波器,F0=1设计高通滤波器Fc = 2 e3 / (Fs / 2);%截止频率G = 10;S = 1.5;PEQ = fdesign.parameq (N, F0、Fc、年代,G0”、N、Fo Fc, S, G);BQ1 =设计(PEQ,“SystemObject”,真正的);PEQ。S = 2.5;BQ2 =设计(PEQ,“SystemObject”,真正的);PEQ。S = 4;BQ3 =设计(PEQ,“SystemObject”,真正的);hfvt = fvtool (BQ1 BQ2 BQ3,“Fs”Fs,“颜色”,“白色”);传奇(hfvt' S = 1.5,' S = 2.5,' S = 4 ');
通过计算,可以得到每个S值对应的跃迁带宽和带宽增益测量
函数。我们验证了三种设计的带宽参考增益GBW是相同的,并且我们量化了当S增加时过渡宽度减少的多少。
m1 =测量(BQ1);get (m1,“GBW”)
ans = 5
m2 =测量(BQ2);get(平方米,“GBW”)
ans = 5
m3 =测量(BQ3);get (m3,“GBW”)
ans = 5
get (m1,“HighTransitionWidth”)
ans = 0.0945
get(平方米,“HighTransitionWidth”)
ans = 0.0425
get (m3,“HighTransitionWidth”)
ans = 0.0238
随着架坡参数S的增大,滤波器的纹波也随之增大。我们可以增加滤波器的阶数以减少纹波,同时保持所需的过渡带宽。
N = 2;PEQ = fdesign.parameq (N, F0、Fc、年代,G0”、N、Fo Fc, S, G);BQ1 =设计(PEQ,“SystemObject”,真正的);PEQ。FilterOrder = 3;BQ2 =设计(PEQ,“SystemObject”,真正的);PEQ。FilterOrder = 4;BQ3 =设计(PEQ,“SystemObject”,真正的);hfvt = fvtool (BQ1 BQ2 BQ3,“Fs”Fs,“颜色”,“白色”);传奇(hfvt“N = 2”,“N = 3”,“N = 4”);
质量因子Qa可以代替货架坡度参数S来设计可变过渡带宽的货架滤波器。
N = 2;Fs = 48 e3;Fo = 1;% F0=0设计低通滤波器,F0=1设计高通滤波器Fc = 20 e3 / (Fs / 2);%截止频率G = 10;Q = 0.48;PEQ = fdesign.parameq (' N, F0、Fc、Qa、G0、N、Fo Fc, Q, G);BQ1 =设计(PEQ,“SystemObject”,真正的);PEQ。Qa = 1 /√(2);BQ2 =设计(PEQ,“SystemObject”,真正的);PEQ。Qa = 2.0222;BQ3 =设计(PEQ,“SystemObject”,真正的);hfvt = fvtool (BQ1 BQ2 BQ3,“Fs”Fs,“颜色”,“白色”);传奇(hfvt“Qa = 0.48”,“Qa = 0.7071”,“Qa = 2.0222”);