Этот пример показывает, как разработать lowpass КИХ-фильтр с помощью fdesign
. Идеал lowpass фильтр требует бесконечного импульсного ответа. При усечении или работа с окнами импульсный ответ приводит к так называемому методу окна КИХ-проекта фильтра.
КИХ-фильтры широко используются из-за мощных алгоритмов проекта, которые существуют для них, их свойственная устойчивость, когда реализовано в нерекурсивной форме, простоте, с которой может достигнуть линейной фазы, их простой расширяемости к многоскоростным случаям и вполне достаточной аппаратной поддержки, которая существует для них среди других причин. Этот пример демонстрирует функциональность в DSP System Toolbox™ для проекта низких КИХ-фильтров передачи со множеством характеристик. Многие концепции, представленные здесь, могут быть расширены к другим ответам, таким как highpass, полоса пропускания, и т.д.
Рассмотрите простой проект фильтра lowpass с частотой среза 0.4*pi радианы на выборку:
Fc = 0.4;
N = 100;
Hf = fdesign.lowpass('N,Fc',N,Fc);
Мы можем разработать этот фильтр lowpass с помощью метода окна. Например, мы можем использовать Окно Хэмминга или Dolph-окно-Чебышева:
Hd1 = design(Hf,'window','window',@hamming,'systemobject',true); Hd2 = design(Hf,'window','window',{@chebwin,50}, ... 'systemobject',true); hfvt = fvtool(Hd1,Hd2,'Color','White'); legend(hfvt,'Hamming window design', ... 'Dolph-Chebyshev window design')
Выбор фильтра был произволен. Поскольку идеально порядок должен быть бесконечным, в целом, больший порядок приводит к лучшему приближению к идеалу за счет более дорогостоящей реализации. Например, с Dolph-окном-Чебышева, мы можем уменьшить область перехода путем увеличения порядка фильтра:
Hf.FilterOrder = 200; Hd3 = design(Hf,'window','window',{@chebwin,50},... 'systemobject',true); hfvt2 = fvtool(Hd2,Hd3,'Color','White'); legend(hfvt2,'Dolph-Chebyshev window design. Order = 100',... 'Dolph-Chebyshev window design. Order = 200')
В порядке определить подходящий порядок фильтра, необходимо задать сумму пульсации полосы пропускания и затухания полосы задерживания, которое будет допускаться. Также необходимо задать ширину области перехода вокруг идеальной частоты среза. Последний сделан путем установки частоты ребра полосы пропускания и частоты ребра полосы задерживания. Различие между этими двумя определяет ширину перехода.
Fp = 0.38;
Fst = 0.42;
Ap = 0.06;
Ast = 60;
setspecs(Hf,'Fp,Fst,Ap,Ast',Fp,Fst,Ap,Ast);
Мы можем все еще использовать метод окна, наряду с окном Kaiser, чтобы разработать фильтр нижних частот.
Hd4 = design(Hf,'kaiserwin','systemobject',true); measure(Hd4)
ans = Sample Rate : N/A (normalized frequency) Passband Edge : 0.38 3-dB Point : 0.39539 6-dB Point : 0.4 Stopband Edge : 0.42 Passband Ripple : 0.016058 dB Stopband Atten. : 60.092 dB Transition Width : 0.04
ans =
Sampling Frequency : N/A (normalized frequency) Passband Edge : 0.38 3-dB Point : 0.39539 6-dB Point : 0.4 Stopband Edge : 0.42 Passband Ripple : 0.016058 dB Stopband Atten. : 60.092 dB Transition Width : 0.04
Одна вещь отметить состоит в том, что ширина перехода, как задано сосредоточена вокруг частоты среза 0,4 пи. Это станет точкой, в которой усиление фильтра lowpass является половиной усиления полосы пропускания (или точка, в которой фильтр достигает 6 дБ затухания).
Проект окна Kaiser не является оптимальным проектом, и в результате порядок фильтра, требуемый соответствовать спецификациям с помощью этого метода, больше, чем это должно быть. Экюриппл разрабатывает результат в фильтре lowpass с наименьшим порядком соответствовать набору спецификаций.
Hd5 = design(Hf,'equiripple','systemobject',true); hfvt3 = fvtool(Hd4,Hd5,'Color','White'); legend(hfvt3,'Kaiser window design','Equiripple design')
В этом случае 146 коэффициентов необходимы проекту equiripple, в то время как 183 необходимы проекту окна Kaiser.
design
| fdesign
| fdesign.lowpass
| fvtool