В этом примере показано, как спроектировать фильтры параметрического эквалайзера. Параметрические эквалайзеры являются цифровыми фильтрами, используемыми в аудио для корректировки содержимого частоты звукового сигнала. Параметрические эквалайзеры предусматривают возможности вне тех из графических эквалайзеров путем разрешения корректировки усиления, центральной частоты и полосы пропускания каждого фильтра. В отличие от этого графические эквалайзеры только допускают корректировку усиления каждого фильтра.
Как правило, параметрические эквалайзеры спроектированы как БИХ-фильтры второго порядка. Эти фильтры имеют недостаток, что из-за их младшего разряда, они могут представить относительно большую пульсацию или области перехода и могут перекрыться друг с другом, когда несколько из них соединяются в каскаде. 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');
Один из расчетных параметров является полосой пропускания фильтра, BW. В предыдущем примере полоса пропускания была задана как 4 кГц. Полоса пропускания на 4 кГц происходит в половине усиления (2,5 дБ).
Другой параметр общего умысла является добротностью, Q. Q фильтра задан как Wo/BW (центральная частота/полоса пропускания). Это обеспечивает меру резкости фильтра, i.e., как резко переходы фильтра между ссылочным значением (0 дБ) и усилением G. Рассмотрите два проекта с тем же G и Во, но различными значениями 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');
Несмотря на то, что более высокий фактор 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');
Когда просматривается по шкале логарифмической частоты, хотя, "полоса пропускания октавы" двух фильтров является тем же самым.
hfvt = fvtool(BQ1,BQ2,'FrequencyScale','log','Fs',Fs,'Color','white'); legend(hfvt,'Fo1 = 2 kHz','Fo2 = 12 kHz');
BW полосы пропускания фильтра только отлично сосредоточен вокруг центральной частоты Во, когда такая частота установлена в 0.5*pi (половина уровня Найквиста). Когда Во ближе к 0 или к пи, существует деформирующийся эффект, который делает больший фрагмент полосы пропускания, чтобы произойти в одной стороне центральной частоты. В случаях ребра, если центральная частота установлена в 0 (пи), целая полоса пропускания фильтра происходит направо (слева) центральной частоты. Результатом является так называемое откладывание низко (высокий) фильтр.
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');
Все предыдущие проекты являются примерами параметрического эквалайзера, который повышает сигнал по определенному диапазону частот. Можно также спроектировать эквалайзеры, которые сокращают (ослабляют) сигнал в данной области.
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');
В пределе фильтр может быть спроектирован, чтобы иметь усиление нуля (-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');
Параметрические эквалайзеры обычно соединяются в каскаде (последовательно) так, чтобы несколько использовались одновременно, чтобы компенсировать звуковой сигнал. Чтобы соединить несколько эквалайзеров таким образом, используйте 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');
Проекты младшего разряда, такие как фильтры второго порядка выше могут вмешаться друг в друга, если их центральные частоты близко расположены. В примере выше, фильтр, сосредоточенный на уровне 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');
Для более усовершенствованных проектов, 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');
Заметьте, что фильтр имеет усиление-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');
Полоса пропускания перехода и усиление полосы пропускания, соответствующее каждому значению 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');
Обеспечение качества добротности может использоваться вместо параметра наклона полки 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');