Этот пример показывает, как разработать классические БИХ-фильтры. Начальное особое внимание находится на ситуации, для которой критический параметр проекта является частотой среза, в которой степень фильтра затухает к половине (-3 дБ) номинальное значение полосы пропускания.
Пример иллюстрирует, как легкий это должно заменить проект Баттерворта или на Чебышева или на эллиптический фильтр того же порядка и получить более крутой спад за счет некоторой пульсации в полосе пропускания и/или полосе задерживания фильтра. После этого проекты минимального заказа исследуются.
Давайте разработаем 8-й фильтр порядка с нормированной частотой среза 0.4pi. Во-первых, мы разрабатываем Фильтр Баттерворта, который является максимально плоским (никакая пульсация в полосе пропускания или в полосе задерживания):
N = 8; F3dB = .4; d = fdesign.lowpass('N,F3dB',N,F3dB); Hbutter = design(d,'butter','SystemObject',true);
Чебышевский Тип, который я разрабатываю, допускает управление пульсаций в полосе пропускания. В полосе задерживания нет все еще никаких пульсаций. Большие пульсации включают более крутой спад. Здесь, мы задаем пульсации от пика к пику 0.5 дБ:
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 точку частоты и что только у Баттерворта и Чебышевских проектов Типа II есть совершенно плоская полоса пропускания:
axis([0 .44 -5 .1])
Если фаза является проблемой, полезно заметить, что Баттерворт и Чебышевские проекты Типа II - также те вводящие меньшее искажение (их групповая задержка является более плоской):
hfvt.Analysis = 'grpdelay';
В случаях, где частота среза на 3 дБ не представляет главного интереса, но вместо этого и полоса пропускания и полоса задерживания полностью заданы с точки зрения частот и суммы терпимых пульсаций, мы можем использовать метод проектирования минимального заказа:
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-й фильтр порядка необходим, чтобы соответствовать спецификации с проектом Баттерворта, тогда как 5-й порядок достаточен с любой Чебышевские методы. Порядок фильтра может даже уменьшаться до 4 с эллиптическим проектом:
order(Hbutter) order(Hcheby1) order(Hcheby2) order(Hellip)
ans = 7 ans = 5 ans = 5 ans = 4
С проектами минимального заказа идеальный порядок должен быть округлен к следующему целому числу. Этот дополнительный дробный порядок позволяет алгоритму на самом деле превышать спецификации. Мы можем использовать флаг 'MatchExactly' для ограничения алгоритм проекта, чтобы совпадать точно с одной полосой. Другая полоса превысит свои спецификации. По умолчанию Чебышевский Тип, который я разрабатываю, совпадает с полосой пропускания, Баттерворт и Чебышевский Тип 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) order(Hellipmin1) order(Hellipmin2)
ans = 4 ans = 4 ans = 4
Результаты, представленные выше, могут быть расширены к highpass, полосе пропускания и bandstop типам ответа. Например, вот полосовые фильтры минимального заказа:
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')