В этом примере показано, как сконструировать оптимальные фильтры БИХ с произвольной амплитудной характеристикой с использованием алгоритма безограниченной оптимизации с наименьшим значением Pth.
Алгоритм IIRLPNORM отличается от традиционных алгоритмов проектирования IIR несколькими аспектами:
. The designs are done directly in the Z-domain. No need for bilinear
transformation.. The numerator and denominator order can be different.
. One can design IIR filters with arbitrary magnitude response in
addition to the basic lowpass, highpass, bandpass, and bandstop.Однако для простых конструкций (нижних, верхних и т.д.) необходимо указать частоту полосы пропускания и стоп-полосы. Переходная полоса рассматривается алгоритмом как полоса без ухода.
d = fdesign.lowpass('N,Fp,Fst',8,.4,.5) %#ok
d =
lowpass with properties:
Response: 'Lowpass'
Specification: 'N,Fp,Fst'
Description: {3x1 cell}
NormalizedFrequency: 1
FilterOrder: 8
Fpass: 0.4000
Fstop: 0.5000
hiirlpnorm = design(d,'iirlpnorm','SystemObject',true);
Для сравнения рассмотрим эту конструкцию эллиптического фильтра.
d = fdesign.lowpass('N,Fp,Ap,Ast',8,.4,0.0084,66.25); hellip = design(d, 'ellip','SystemObject',true); hfvt = fvtool(hiirlpnorm,hellip,'Color','White'); legend(hfvt,'IIRLPNORM design','ELLIP design');

Отклик двух фильтров очень похож. Увеличение полосы пропускания подчеркивает точку. Однако величина фильтра, сконструированного с помощью IIRLPNORM, не ограничена величиной менее 0 дБ.
axis([0 .44 -.0092 .0052])

Хотя мы можем получить очень похожие конструкции эллиптических фильтров, IIRLPNORM обеспечивает большую гибкость. Например, скажем, что мы меняем порядок знаменателя
d = fdesign.lowpass('Nb,Na,Fp,Fst',8,6,.4,.5) %#ok
d =
lowpass with properties:
Response: 'Lowpass'
Specification: 'Nb,Na,Fp,Fst'
Description: {4x1 cell}
NormalizedFrequency: 1
NumOrder: 8
DenOrder: 6
Fpass: 0.4000
Fstop: 0.5000
hiirlpnorm = design(d,'iirlpnorm','SystemObject',true);
С помощью эллиптических фильтров (и других классических конструкций БИХ) мы должны изменить как числитель, так и порядок знаменателей.
d = fdesign.lowpass('N,Fp,Ap,Ast',6,.4,0.0084,58.36); hellip = design(d, 'ellip','SystemObject',true); hfvt = fvtool(hiirlpnorm,hellip,'Color','White'); legend(hfvt,'IIRLPNORM design','ELLIP design');

Ясно, что эллиптическая конструкция (зеленым цветом) теперь приводит к гораздо более широкой ширине перехода.
Подобно равновеликим или наименее квадратным конструкциям, мы можем взвесить критерии оптимизации, чтобы изменить конструкцию так, как мы считаем нужным. Однако, в отличие от equiripple, мы обладаем дополнительной гибкостью обеспечения различных весов для каждой точки частоты, а не для каждой полосы частот.
Рассмотрим следующие два фильтра верхних частот:
d = fdesign.highpass('Nb,Na,Fst,Fp',6,4,.6,.7) %#ok
d =
highpass with properties:
Specification: 'Nb,Na,Fst,Fp'
Response: 'Highpass'
Description: {4x1 cell}
NormalizedFrequency: 1
NumOrder: 6
DenOrder: 4
Fstop: 0.6000
Fpass: 0.7000
h1 = design(d,'iirlpnorm','Wpass',1,'Wstop',10,'SystemObject',true); h2 = design(d,'iirlpnorm','Wpass',1,'Wstop',[100 10],'SystemObject',true); hfvt = fvtool(h1,h2,'Color','White'); legend(hfvt,'Same weight for entire band',... 'Different weights in stopband');

Первая конструкция использует одинаковый вес на полосу (10 в стоп-полосе, 1 в полосе пропускания). Во второй конструкции используется другой вес на частотную точку. Это обеспечивает простой способ получения наклонной стопорной полосы, который может быть желательным в некоторых применениях. Дополнительное затухание на участках полосы останова происходит за счет большей пульсации полосы пропускания и ширины перехода.
Грубо говоря, оптимальная конструкция достигается минимизацией ошибки между фактическим проектируемым фильтром и идеальным фильтром в значении Pth-norm. Различные значения нормы приводят к различным конструкциям. При определении P-й нормы мы фактически задаем два значения, 'InitNorm' и 'Norm', где 'InitNorm' - начальное значение нормы, используемой алгоритмом, а 'Norm' - конечное (фактическое) значение, для которого оптимизирована конструкция. Запуск оптимизации с меньшим начальным значением способствует сходимости алгоритма.
По умолчанию алгоритм начинает оптимизацию в значении 2 нормы, но, наконец, оптимизирует конструкцию в значении 128 нормы. 128-норма на практике дает хорошее приближение к бесконечной норме. Так что конструкции имеют тенденцию быть равноудаленными. Для конструкции с наименьшими квадратами мы должны установить норму 2. Например, рассмотрим следующий фильтр нижних частот
d = fdesign.lowpass('Nb,Na,Fp,Fst',10,7,.25,.35); design(d,'iirlpnorm','Norm',2,'SystemObject',true); fig = gcf; fig.Color = [1 1 1];

Еще одной из важных особенностей IIRLPNORM является его способность конструировать фильтры, отличные от базовых низкочастотных, высокоскоростных, полосовых и полосовых. Дополнительные сведения см. в примере проектирования фильтра произвольной величины. Теперь мы покажем несколько примеров:
Вот фильтр для формирования шума при моделировании Rayleigh замирания канала беспроводной связи
F1 = 0:0.01:0.4; A1 = 1.0 ./ (1 - (F1./0.42).^2).^0.25; F2 = [0.45 1]; A2 = [0 0]; d = fdesign.arbmag('Nb,Na,B,F,A',4,6,2,F1,A1,F2,A2); design(d,'iirlpnorm','SystemObject',true); fig = gcf; fig.Color = [1 1 1];

Следующая конструкция моделирует поглощение света в определенном газе. Полученный фильтр имеет приблизительно линейную фазу:
Nb = 12; Na = 10; F = linspace(0,1,100); As = ones(1,100)-F*0.2; Absorb = [ones(1,30),(1-0.6*bohmanwin(10))',... ones(1,5), (1-0.5*bohmanwin(8))',ones(1,47)]; A = As.*Absorb; d = fdesign.arbmag('Nb,Na,F,A',Nb,Na,F,A); W = [ones(1,30) ones(1,10)*.2 ones(1,60)]; design(d, 'iirlpnorm', 'Weights', W, 'Norm', 2, 'DensityFactor', 30,... 'SystemObject',true); fig = gcf; fig.Color = 'white';
