В этом примере показано, как с помощью функции FIRLPNORM проектировать фильтры FIR по крайней мере Pth-norm. Эта функция использует алгоритм неограниченной оптимизации с наименьшим значением Pth для разработки КИХ-фильтров с произвольной амплитудной характеристикой.
Синтаксис FIRLPNORM аналогичен синтаксису IIRLPNORM (см. пример конструкции оптимального фильтра IIR по наименьшей Pth-норме) за исключением того, что порядок знаменателей не указан.
Функция проектирует оптимальные фильтры FIR в наименьшем значении Pth. Однако фильтр не ограничен, чтобы иметь линейную фазу (хотя линейная фаза обычно считается хорошей вещью), то есть импульсная характеристика не имеет особых свойств симметрии.
Однако линейно-фазовое ограничение также приводит к фильтрам большего порядка, чем более общие нелинейно-фазовые конструкции (следует отметить, что в некоторых аппаратных реализациях можно уменьшить число умножителей пополам при реализации линейно-фазовых фильтров из-за симметрии в коэффициентах). Например, рассмотрим следующую конструкцию FIRLPNORM
N = 30; F = [0 0.3 0.45 1]; E = F; A = [1 1 0 0]; W = [1 1 10 10]; b = firlpnorm(N,F,E,A,W); h = fvtool(b); h.MagnitudeDisplay = 'Magnitude'; h.Color = 'White';

Если мы увеличим изображение, то увидим, что фильтр имеет пиковую пульсацию полосы пропускания около 0,008 и пиковую пульсацию полосы останова около 0,000832. Конструкция FIRPM или FIRGR с сопоставимыми спецификациями потребует фильтра 37-го порядка. Это особенно важно с учетом того, что FIRGR обеспечит линейный фильтр FIR самого низкого порядка, который соответствует спецификациям.
dev = [0.008 0.000832]; bgr = firgr('minorder',F,A,dev); orderfirgr = length(b)-1; fprintf('Order: %d\n',orderfirgr); h = fvtool(b,1,bgr,1); h.MagnitudeDisplay = 'Magnitude'; h.Color = 'White'; legend(h,'FIRLPNORM design','FIRGR design');
Order: 30

Еще один способ взглянуть на это - использование функции FIRCEQRIP, которая также проектирует линейно-фазовые эквириппельные фильтры, но чьи спецификации даны другим способом, чем FIRGR (подробнее см. пример конструкции эквириптного КИХ-фильтра с ограничениями). Если мы хотим линейно-фазовый фильтр 30-го порядка, который соответствует полосе пропускания и пульсации полосы останова, что конструкция от FIRLPNORM достигает, нам нужно жить с большей шириной перехода.
bceq = firceqrip(30,(F(2)+F(3))/2,dev); h = fvtool(b,1,bceq,1,'Color','White'); legend(h,'FIRLPNORM design','FIRCEQRIP design');

Конечно, можно также проектировать нелинейные фазовые фильтры с FIRGR, задавая опцию «minfase». Это позволяет получить фильтр FIR более низкого порядка, чем в случае линейной фазы, и по-прежнему соответствовать требуемым спецификациям. Однако даже в этом случае результатом является неоптимальный нелинейно-фазовый фильтр, потому что порядок фильтра больше, чем минимум, необходимый для нелинейно-фазового эквиропльного фильтра, чтобы соответствовать спецификациям, как очевидно из следующего примера.
bm = firgr('minorder',F,A,dev,'minphase'); orderfirgrmin = length(bm)-1; fprintf('Order: %d\n',orderfirgrmin); h = fvtool(b,1,bm,1,'Color','White'); legend(h,'FIRLPNORM design','FIRGR minimum-phase design');
Order: 32

Команда FIRLPNORM позволяет ограничить нули, лежащие на единичной окружности или внутри нее, что приводит к минимальной фазовой конструкции. Однако ограничение приводит к большей пульсации полосы пропускания и меньшему ослаблению полосы останова, чем неограниченная конструкция.
bmlp = firlpnorm(30,F,E,A,W,'minphase'); h = fvtool(b,1,bmlp,1,'Color','White'); legend(h,'FIRLPNORM design','FIRLPNORM minimum-phase design');

Если мы увеличим заказ до минимального фазового фильтра, разработанного с помощью FIRGR, мы увидим, что мы удовлетворяем спецификациям, удовлетворяющим как конструкции FIRLPNORM 30-го порядка (не минимальной фазы), так и конструкции FIRGR 32-го порядка минимальной фазы.
bmlp = firlpnorm(orderfirgrmin,F,E,A,W,'minphase'); h = fvtool(b,1,bm,1,bmlp,1,'Color','White'); legend(h,'FIRLPNORM design',... 'FIRGR minimum-phase design',... 'FIRLPNORM minimum-phase design');

Подобно IIRLPNORM и IIRLPNOMC, FIRLPNORM позволяет специфицировать Pth-норму, используемую для оптимизации фильтра. Pth-норма задана точно так же, как в IIRLPNORM, т.е. двухэлементный вектор с Pinit и Pfinal в качестве его элементов. Pinit задает начальную Pth-норму, используемую алгоритмом (это помогает в сходимости), а Pfinal задает конечную Pth-норму, с помощью которой оптимизируется фильтр.
Например, конструкция наименьших квадратов для вышеуказанных спецификаций может быть получена следующим образом:
N = 40; F = [0 0.4 0.45 1]; E = F; A = [0 0 1 1]; W = [1 1 10 10]; P = [2 2]; bl2 = firlpnorm(N,F,E,A,W,P); h = fvtool(bl2,1,'Color','White'); legend(h,'FIRLPNORM design')

Для сравнения, мы создаем линейный фильтр наименьших квадратов с использованием FIRLS. Опять же, для того же порядка фильтрации линейно-фазовое ограничение приводит к меньшему ослаблению полосы останова и большей пульсации полосы пропускания.
W = [1 20]; bls = firls(N,F,A,W); h = fvtool(bl2,1,bls,1,'Color','White'); legend(h,'FIRLPNORM design','FIRLS design');

Конструкции Equiripple полезны, когда требуется наименьший возможный заказ для соответствия набору проектных спецификаций. Для соответствия тем же спецификациям в конструкции с наименьшими квадратами требуется фильтр более высокого порядка. Однако более высокий порядок обеспечивает дополнительное ослабление (меньшую пульсацию) для большой части полосы останова (полосы пропускания). Фактически, конструкция с наименьшими квадратами минимизирует энергию ограничительной полосы. Компромиссы между равнодействующей конструкцией и конструкцией наименьших квадратов могут быть достигнуты с помощью промежуточных норм. Например, мы показываем конструкцию фильтра с теми же спецификациями, но оптимизированную для следующих норм: 2, 4, 12, 256 (примерно норма бесконечности).
W = [1 1 10 10]; P4 = [2 4]; bl4 = firlpnorm(N,F,E,A,W,P4); P12 = [2 12]; bl12 = firlpnorm(N,F,E,A,W,P12); Pinf = [2 256]; blinf = firlpnorm(N,F,E,A,W,Pinf); h = fvtool(bl2,1,bl4,1,bl12,1,blinf,1,'Color','White'); legend(h,'P = 2','P = 4','P = 12','P = 256');

Для того чтобы обеспечить минимальное затухание полосы останова в случае equiripple (256-norm), необходимо увеличить порядок других конструкций.