Параметрический уравнитель Проекта

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

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

В этом примере рассматриваются два отдельных подхода к проекту параметрического эквалайзера. Первый - использование 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 dB) на заданной частоте. Это позволяет проектировать узкополосные фильтры второго порядка или выше.

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.