exponenta event banner

Проектирование параметрического эквалайзера

В этом примере показано, как проектировать фильтры параметрического эквалайзера. Параметрические эквалайзеры - цифровые фильтры, используемые в звуке для регулировки частотного содержания звукового сигнала. Параметрические эквалайзеры обеспечивают возможности помимо возможностей графических эквалайзеров, позволяя регулировать коэффициент усиления, центральную частоту и полосу пропускания каждого фильтра. Напротив, графические эквалайзеры допускают только регулировку коэффициента усиления каждого фильтра.

Обычно параметрические эквалайзеры проектируются как БИХ-фильтры второго порядка. Эти фильтры имеют тот недостаток, что из-за их низкого порядка они могут иметь относительно большие пульсирующие или переходные области и могут перекрываться друг с другом, когда несколько из них соединены каскадом. Система DSP Toolbox™ обеспечивает возможность проектирования параметрических эквалайзеров IIR высокого порядка. Такие конструкции высокого порядка обеспечивают гораздо больший контроль над формой каждого фильтра. Кроме того, проектирует специальный случай с традиционными параметрическими эквалайзерами второго порядка, если порядок фильтра установлен на два.

В этом примере рассматриваются два отдельных подхода к проектированию параметрического эквалайзера. Первый использует designParamEQ и второй использует fdesign.parameq. designParamEQ должны удовлетворять большинство потребностей. Это проще и обеспечивает возможность для большинства распространенных конструкций. Он также поддерживает генерацию кода C, которая необходима, если существует желание настроить фильтр во время выполнения с сгенерированным кодом. fdesign.parameq предоставляет множество расширенных вариантов конструкции для окончательного управления результирующим фильтром. В этом примере рассматриваются не все варианты конструкции.

Некоторые базовые проекты

Рассмотрим следующие две конструкции параметрических эквалайзеров. Проектные спецификации одинаковы, за исключением порядка фильтров. Первая конструкция представляет собой типичный параметрический эквалайзер второго порядка, который повышает сигнал около 10 кГц на 5 дБ. Вторая конструкция делает то же самое с фильтром шестого порядка. Обратите внимание, что фильтр шестого порядка ближе к идеальному фильтру кирпичной кладки по сравнению с конструкцией второго порядка. Очевидно, что аппроксимация может быть улучшена за счет еще большего увеличения порядка фильтрации. Цена за такую улучшенную аппроксимацию увеличивается, поскольку требуется больше мультипликаторов.

Fs = 48e3;
N1 = 2;
N2 = 6;
G  = 5; % 5 dB
Wo = 10000/(Fs/2);
BW = 4000/(Fs/2);
[B1,A1] = designParamEQ(N1,G,Wo,BW);
[B2,A2] = designParamEQ(N2,G,Wo,BW);
BQ1 = dsp.BiquadFilter('SOSMatrix',[B1.',[1,A1.']]);
BQ2 = dsp.BiquadFilter('SOSMatrix',[B2.',[ones(3,1),A2.']]);
hfvt = fvtool(BQ1,BQ2,'Fs',Fs,'Color','white');
legend(hfvt,'2nd-Order Design','6th-Order Design');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent 2nd-Order Design, 6th-Order Design.

Одним из конструктивных параметров является полоса пропускания фильтра, BW. В предыдущем примере полоса пропускания была указана как 4 кГц. Полоса пропускания 4 кГц составляет половину коэффициента усиления (2,5 дБ).

Проекты, основанные на коэффициенте качества

Другим общим конструктивным параметром является коэффициент качества, Q. Q фильтра определяется как Wo/BW (центральная частота/полоса пропускания). Он обеспечивает измерение резкости фильтра, т.е. степени резкости перехода фильтра между опорным значением (0 дБ) и коэффициентом усиления G. Рассмотрим две конструкции с одинаковыми значениями G и Wo, но различными значениями Q.

Fs  = 48e3;
N   = 2;
Q1  = 1.5;
Q2  = 10;
G   = 15; % 15 dB
Wo  = 6000/(Fs/2);
BW1 = Wo/Q1;
BW2 = Wo/Q2;
[B1,A1] = designParamEQ(N,G,Wo,BW1);
[B2,A2] = designParamEQ(N,G,Wo,BW2);
BQ1 = dsp.BiquadFilter('SOSMatrix',[B1.',[1,A1.']]);
BQ2 = dsp.BiquadFilter('SOSMatrix',[B2.',[1,A2.']]);
hfvt = fvtool(BQ1,BQ2,'Fs',Fs,'Color','white');
legend(hfvt,'Q = 1.5','Q = 10');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Q = 1.5, Q = 10.

Хотя более высокий коэффициент Q соответствует более резкому фильтру, необходимо также отметить, что для данной полосы частот коэффициент Q увеличивается просто за счет увеличения центральной частоты. Это может показаться непривлекательным. Например, следующие два фильтра имеют одинаковый коэффициент Q, но один явно занимает большую полосу пропускания, чем другой.

Fs  = 48e3;
N   = 2;
Q   = 10;
G   = 9; % 9 dB
Wo1 = 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,'Color','white');
legend(hfvt,'BW1 = 200 Hz; Q = 10','BW2 = 1200 Hz; Q = 10');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent BW1 = 200 Hz; Q = 10, BW2 = 1200 Hz; Q = 10.

При просмотре по логарифмической шкале «октавная полоса пропускания» двух фильтров одинакова.

hfvt = fvtool(BQ1,BQ2,'FrequencyScale','log','Fs',Fs,'Color','white');
legend(hfvt,'Fo1 = 2 kHz','Fo2 = 12 kHz');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Fo1 = 2 kHz, Fo2 = 12 kHz.

Фильтры нижней и верхней полок

Полоса BW пропускания фильтра точно центрирована только вокруг центральной частоты Wo, когда такая частота установлена равной 0,5 * pi (половина скорости Найквиста). Когда Wo ближе к 0 или к pi, возникает деформирующий эффект, который делает большую часть полосы пропускания возникающей на одной стороне центральной частоты. В краевых случаях, если центральная частота установлена равной 0 (pi), вся полоса пропускания фильтра находится справа (слева) от центральной частоты. В результате получается так называемый стеллажный фильтр низкого (высокого) уровня.

Fs  = 48e3;
N   = 4;
G   = 10; % 10 dB
Wo1 = 0;
Wo2 = 1; % Corresponds to Fs/2 (Hz) or pi (rad/sample)
BW = 1000/(Fs/2); % Bandwidth occurs at 7.4 dB in this case
[B1,A1] = designParamEQ(N,G,Wo1,BW);
[B2,A2] = designParamEQ(N,G,Wo2,BW);
BQ1 = dsp.BiquadFilter('SOSMatrix',[B1.',[ones(2,1),A1.']]);
BQ2 = dsp.BiquadFilter('SOSMatrix',[B2.',[ones(2,1),A2.']]);
hfvt = fvtool(BQ1,BQ2,'Fs',Fs,'Color','white');
legend(hfvt,'Low Shelf Filter','High Shelf Filter');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Low Shelf Filter, High Shelf Filter.

Параметрический эквалайзер, который вырезает

Все предыдущие конструкции являются примерами параметрического эквалайзера, который усиливает сигнал в определенной полосе частот. Можно также сконструировать эквалайзеры, которые отсекают (ослабляют) сигнал в данной области.

Fs = 48e3;
N  = 2;
G  = -5; % -5 dB
Wo = 6000/(Fs/2);
BW = 2000/(Fs/2);
[B,A] = designParamEQ(N,G,Wo,BW);
BQ = dsp.BiquadFilter('SOSMatrix',[B.',[1,A.']]);
hfvt = fvtool(BQ,'Fs',Fs,'Color','white');
legend(hfvt,'G = -5 dB');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line. This object represents G = -5 dB.

На пределе фильтр может быть сконструирован так, чтобы иметь нулевой коэффициент усиления (-Inf дБ) на заданной частоте. Это позволяет проектировать фильтры надрезов 2-го или более высокого порядка.

Fs  = 44.1e3;
N   = 8;
G   = -inf;
Q   = 1.8;
Wo  = 60/(Fs/2); % Notch at 60 Hz
BW  = Wo/Q; % Bandwidth will occur at -3 dB for this special case
[B1,A1] = designParamEQ(N,G,Wo,BW);
[NUM,DEN]  = iirnotch(Wo,BW); % or [NUM,DEN] = designParamEQ(2,G,Wo,BW);
SOS2 = [NUM,DEN];
BQ1 = dsp.BiquadFilter('SOSMatrix',[B1.',[ones(4,1),A1.']]);
BQ2 = dsp.BiquadFilter('SOSMatrix',SOS2);
hfvt = fvtool(BQ1,BQ2,'Fs',Fs,'FrequencyScale','Log','Color','white');
legend(hfvt,'8th order notch filter','2nd order notch filter');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent 8th order notch filter, 2nd order notch filter.

Каскадные параметрические эквалайзеры

Параметрические эквалайзеры обычно подключаются каскадно (последовательно) так, что для выравнивания аудиосигнала одновременно используются несколько. Чтобы таким образом подключить несколько эквалайзеров, используйте dsp.FilterCascade.

Fs  = 48e3;
N   = 2;
G1  = 3;  % 3 dB
G2  = -2; % -2 dB
Wo1 = 400/(Fs/2);
Wo2 = 1000/(Fs/2); 
BW = 500/(Fs/2); % Bandwidth occurs at 7.4 dB in this case
[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,'Color','white','FrequencyScale','Log');
legend(hfvt,'Cascade of 2nd order filters');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line. This object represents Cascade of 2nd order filters.

Конструкции низкого порядка, такие как фильтры второго порядка, описанные выше, могут создавать помехи друг другу, если их центральные частоты находятся на близком расстоянии друг от друга. В приведенном выше примере фильтр, центрированный на частоте 1 кГц, должен иметь коэффициент усиления -2 дБ. Из-за помех от другого фильтра фактический коэффициент усиления больше похож на -1 дБ. Конструкции более высокого порядка менее подвержены таким помехам.

Fs  = 48e3;
N   = 8;
G1  = 3;  % 3 dB
G2  = -2; % -2 dB
Wo1 = 400/(Fs/2);
Wo2 = 1000/(Fs/2); 
BW = 500/(Fs/2); % Bandwidth occurs at 7.4 dB in this case
[B1,A1] = designParamEQ(N,G1,Wo1,BW);
[B2,A2] = designParamEQ(N,G2,Wo2,BW);
BQ1a = dsp.BiquadFilter('SOSMatrix',[B1.',[ones(4,1),A1.']]);
BQ2a = dsp.BiquadFilter('SOSMatrix',[B2.',[ones(4,1),A2.']]);
FC2  = dsp.FilterCascade(BQ1a,BQ2a);
hfvt = fvtool(FC,FC2,'Fs',Fs,'Color','white','FrequencyScale','Log');
legend(hfvt,'Cascade of 2nd order filters','Cascade of 8th order filters');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line. These objects represent Cascade of 2nd order filters, Cascade of 8th order filters.

Дополнительные варианты конструкции: задание низких и высоких частот

Для более совершенных конструкций, fdesign.parameq может использоваться. Например, из-за искажения частоты, в общем, может быть трудно управлять точными частотными краями, на которых происходит полоса пропускания. Для этого можно использовать следующее:

Fs    = 44.1e3;
N     = 4;
Flow  = 3000;
Fhigh = 4000;
Grsq  = 1;
Gref  = 10*log10(Grsq);
G     = -8;
Gsq   = 10.^(G/10); % Magnitude squared of filter; G = 5 dB
GBW   = 10*log10((Gsq + Grsq)/2);  % Flow and Fhigh occur at -2.37 dB

PEQ = fdesign.parameq('N,Flow,Fhigh,Gref,G0,GBW',...
    N,Flow/(Fs/2),Fhigh/(Fs/2),Gref,G,GBW);
BQ = design(PEQ,'SystemObject',true);
hfvt = fvtool(BQ,'Fs',Fs,'Color','white');
legend(hfvt,'Equalizer with Flow = 3 kHz and Fhigh = 4 kHz');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line. This object represents Equalizer with Flow = 3 kHz and Fhigh = 4 kHz.

Обратите внимание, что коэффициент усиления фильтра составляет -2,37 дБ при 3 кГц и 4 кГц, как указано.

Стеллажные фильтры с переменной полосой пропускания или уклоном

Одной из характеристик стеллажного фильтра является полоса пропускания перехода (иногда также называемая наклоном перехода), которая может быть задана параметром наклона полки S. Эталонное усиление полосы пропускания GBW всегда устанавливается равным половине усиления или усиления среза стеллажного фильтра. Все остальные параметры являются постоянными, поскольку S увеличивает полосу пропускания перехода, уменьшается (и наклон отклика увеличивается), создавая «поворот наклона» вокруг точки GBW, как показано в примере ниже.

N  = 2;
Fs = 48e3;
Fo = 0;  % F0=0 designs a lowpass filter, F0=1 designs a highpass filter
Fc = 2e3/(Fs/2); % Cutoff Frequency
G  = 10;

S  = 1.5;
PEQ = fdesign.parameq('N,F0,Fc,S,G0',N,Fo,Fc,S,G);
BQ1 = design(PEQ,'SystemObject',true);

PEQ.S = 2.5;
BQ2 = design(PEQ,'SystemObject',true);

PEQ.S = 4;
BQ3 = design(PEQ,'SystemObject',true);

hfvt = fvtool(BQ1,BQ2,BQ3,'Fs',Fs,'Color','white');
legend(hfvt,'S=1.5','S=2.5','S=4');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 3 objects of type line. These objects represent S=1.5, S=2.5, S=4.

Полоса пропускания перехода и коэффициент усиления полосы пропускания, соответствующие каждому значению S, могут быть получены с использованием measure функция. Мы проверяем, что опорное усиление полосы пропускания GBW одинаково для трех конструкций, и количественно оцениваем, насколько уменьшается ширина перехода при увеличении S.

m1 = measure(BQ1);
get(m1,'GBW')
ans = 5
m2 = measure(BQ2);
get(m2,'GBW')
ans = 5
m3 = measure(BQ3);
get(m3,'GBW')
ans = 5
get(m1,'HighTransitionWidth')
ans = 0.0945
get(m2,'HighTransitionWidth')
ans = 0.0425
get(m3,'HighTransitionWidth')
ans = 0.0238

По мере увеличения параметра S наклона полки увеличивается и пульсация фильтров. Мы можем увеличить порядок фильтрации, чтобы уменьшить пульсацию при сохранении требуемой полосы пропускания перехода.

N   = 2;
PEQ = fdesign.parameq('N,F0,Fc,S,G0',N,Fo,Fc,S,G);
BQ1 = design(PEQ,'SystemObject',true);

PEQ.FilterOrder = 3;
BQ2 = design(PEQ,'SystemObject',true);

PEQ.FilterOrder = 4;
BQ3 = design(PEQ,'SystemObject',true);

hfvt = fvtool(BQ1,BQ2,BQ3,'Fs',Fs,'Color','white');
legend(hfvt,'N=2','N=3','N=4');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 3 objects of type line. These objects represent N=2, N=3, N=4.

Стеллажные фильтры с заданным коэффициентом качества

Коэффициент качества Qa может быть использован вместо параметра S наклона полки для проектирования стеллажных фильтров с переменными полосами пропускания перехода.

N  = 2;
Fs = 48e3;
Fo = 1;  % F0=0 designs a lowpass filter, F0=1 designs a highpass filter
Fc = 20e3/(Fs/2); % Cutoff Frequency
G  = 10;
Q  = 0.48;
PEQ = fdesign.parameq('N,F0,Fc,Qa,G0',N,Fo,Fc,Q,G);
BQ1 = design(PEQ,'SystemObject',true);

PEQ.Qa = 1/sqrt(2);
BQ2 = design(PEQ,'SystemObject',true);

PEQ.Qa = 2.0222;
BQ3 = design(PEQ,'SystemObject',true);

hfvt = fvtool(BQ1,BQ2,BQ3,'Fs',Fs,'Color','white');
legend(hfvt,'Qa=0.48','Qa=0.7071','Qa=2.0222');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 3 objects of type line. These objects represent Qa=0.48, Qa=0.7071, Qa=2.0222.