В этом примере показано, как проектировать классические фильтры IIR. Первоначальный фокус на ситуации, для которой критическим расчетным параметром является частота отсечки, при которой мощность фильтра падает до половины (-3 дБ) номинального значения полосы пропускания.
Пример иллюстрирует, как легко заменить конструкцию Баттерворта либо Чебышевым, либо эллиптическим фильтром того же порядка и получить более крутой накат за счет некоторой пульсации в полосе пропускания и/или полосе останова фильтра. После этого изучаются конструкции минимального заказа.
Давайте сконструируем фильтр 8-го порядка с нормированной частотой отсечки 0,4pi. Во-первых, мы создаем фильтр Баттерворта, который является максимально плоским (нет пульсации в полосе пропускания или в полосе останова):
N = 8; F3dB = .4; d = fdesign.lowpass('N,F3dB',N,F3dB); Hbutter = design(d,'butter','SystemObject',true)
Hbutter =
dsp.BiquadFilter with properties:
Structure: 'Direct form II'
SOSMatrixSource: 'Property'
SOSMatrix: [4x6 double]
ScaleValues: [5x1 double]
InitialConditions: 0
OptimizeUnityScaleValues: true
Show all properties
Конструкция типа I Чебышева позволяет контролировать рябь в полосе пропускания. В стоп-полосе до сих пор нет ряби. Более крупные ряби обеспечивают более крутой накат. Здесь мы определяем пиковые пульсации 0.5dB:
Ap = .5; setspecs(d,'N,F3dB,Ap',N,F3dB,Ap); Hcheby1 = design(d,'cheby1','SystemObject',true); hfvt = fvtool(Hbutter,Hcheby1,'Color','white'); axis([0 .44 -5 .1]) legend(hfvt,'Butterworth','Chebyshev Type I');

Конструкция типа II Чебышева позволяет контролировать затухание стоп-полосы. Рябь в полосе пропускания отсутствует. Меньшее затухание полосы останова обеспечивает более крутой накат. В этом примере мы задаем затухание полосы останова 80 дБ:
Ast = 80; setspecs(d,'N,F3dB,Ast',N,F3dB,Ast); Hcheby2 = design(d,'cheby2','SystemObject',true); hfvt = fvtool(Hbutter,Hcheby2,'Color','white'); axis([0 1 -90 2]) legend(hfvt,'Butterworth','Chebyshev Type II');

Наконец, эллиптический фильтр может обеспечить более крутой накат по сравнению с предыдущими конструкциями, позволяя пульсации как в полосе остановки, так и в полосе пропускания. Чтобы проиллюстрировать это, мы повторно используем те же характеристики полосы пропускания и полосы останова, что и выше:
setspecs(d,'N,F3dB,Ap,Ast',N,F3dB,Ap,Ast); Hellip = design(d,'ellip','SystemObject',true); hfvt = fvtool(Hbutter,Hcheby1,Hcheby2,Hellip,'Color','white'); axis([0 1 -90 2]) legend(hfvt, ... 'Butterworth','Chebyshev Type I','Chebyshev Type II','Elliptic');

Увеличивая полосу пропускания, мы проверяем, что все фильтры имеют одинаковую точку частоты -3dB, и что только модели Butterworth и Chebyshev Type II имеют совершенно плоскую полосу пропускания:
axis([0 .44 -5 .1])

Если фаза является проблемой, полезно отметить, что конструкции Butterworth и Chebyshev Type II также вносят меньшее искажение (их групповая задержка более плоская):
hfvt.Analysis = 'grpdelay';
В случаях, когда частота отсечки 3dB не представляет основного интереса, но вместо этого и полоса пропускания, и полоса останова полностью определены с точки зрения частот и количества допустимых пульсаций, мы можем использовать метод конструирования минимального порядка:
Fp = .1; Fst = .3; Ap = 1; Ast = 60; setspecs(d,'Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast); Hbutter = design(d,'butter','SystemObject',true); Hcheby1 = design(d,'cheby1','SystemObject',true); Hcheby2 = design(d,'cheby2','SystemObject',true); Hellip = design(d,'ellip','SystemObject',true); hfvt = fvtool(Hbutter,Hcheby1,Hcheby2,Hellip, 'DesignMask', 'on',... 'Color','white'); axis([0 1 -70 2]) legend(hfvt, ... 'Butterworth','Chebyshev Type I','Chebyshev Type II','Elliptic');

Фильтр 7-го порядка необходим для соответствия спецификации с конструкцией Butterworth, тогда как 5-го порядка достаточно с любой из методик Чебышева. Порядок фильтра может быть даже уменьшен до 4 с эллиптической конструкцией:
order(Hbutter)
ans = 7
order(Hcheby1)
ans = 5
order(Hcheby2)
ans = 5
order(Hellip)
ans = 4
В конструкциях с минимальным порядком идеальный порядок должен быть округлен до следующего целого числа. Этот дополнительный дробный порядок позволяет алгоритму фактически превышать спецификации. Мы можем использовать MatchExactly флаг для ограничения алгоритма конструирования до соответствия только одной полосе. Другая полоса будет превышать свои спецификации. По умолчанию конструкции типа I Чебышева соответствуют полосе пропускания, Butterworth и Chebyshev Type II соответствуют полосе останова, а затухания обеих полос соответствуют эллиптической схеме (при превышении частоты края полосы останова):
Hellipmin1 = design(d, 'ellip', 'MatchExactly', 'passband',... 'SystemObject',true); Hellipmin2 = design(d, 'ellip', 'MatchExactly', 'stopband',... 'SystemObject',true); hfvt = fvtool(Hellip, Hellipmin1, Hellipmin2, 'DesignMask', 'on',... 'Color','white'); axis([0 1 -80 2]); legend(hfvt, 'Matched passband and stopband', ... 'Matched passband', 'Matched stopband', ... 'Location', 'Northeast')

Увеличьте масштаб полосы пропускания, чтобы сравнить края полосы пропускания. Согласованная полоса пропускания и согласованная обе конструкции имеют затухание ровно 1 дБ при Fpass = .1:
axis([0 .11 -1.1 0.1]); legend(hfvt, 'Location', 'Southwest')

Мы проверяем, что результирующий порядок фильтров не изменился:
order(Hellip)
ans = 4
order(Hellipmin1)
ans = 4
order(Hellipmin2)
ans = 4
Результаты, представленные выше, могут быть расширены на типы ответа с высокой полосой пропускания, полосой пропускания и полосой пропускания. Например, здесь представлены полосовые фильтры минимального порядка:
d = fdesign.bandpass('Fst1,Fp1,Fp2,Fst2,Ast1,Ap,Ast2', ... .35,.45,.55,.65,60,1,60);
Hbutter = design(d,'butter','SystemObject',true); Hcheby1 = design(d,'cheby1','SystemObject',true); Hcheby2 = design(d,'cheby2','SystemObject',true); Hellip = design(d,'ellip','SystemObject',true); hfvt = fvtool(Hbutter,Hcheby1,Hcheby2,Hellip, 'DesignMask', 'on',... 'Color','white'); axis([0 1 -70 2]) legend(hfvt, ... 'Butterworth','Chebyshev Type I','Chebyshev Type II','Elliptic',... 'Location', 'Northwest')
