Классический БИХ-проект фильтра

Этот пример показывает, как разработать классические БИХ-фильтры. Начальное особое внимание находится на ситуации, для которой критический параметр проекта является частотой среза, в которой степень фильтра затухает к половине (-3 дБ) номинальное значение полосы пропускания.

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

Фильтры Lowpass

Давайте разработаем 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, полосовые и заграждающие фильтры

Результаты, представленные выше, могут быть расширены к 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')