В этом примере показано, как спроектировать наименьшее количество КИХ-фильтров Pth-нормы с функцией FIRLPNORM. Эта функция использует наименьшее-количество-Pth алгоритма оптимизации без ограничений, чтобы спроектировать КИХ-фильтры с произвольным ответом величины.
Синтаксис для FIRLPNORM похож на тот из IIRLPNORM (см. наименьшее количество Pth-нормы оптимальный БИХ-пример создания фильтра для деталей) за исключением того, что порядок знаменателя не задан.
Оптимальный КИХ проектов функции просачивается наименьшее-количество-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 обеспечит КИХ-фильтр линейной фазы самый низкоуровневый, который выполняет техническим требованиям.
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, которая также проектирует линейную фазу equiripple фильтры, но чьи технические требования даны по-другому FIRGR (см. ограниченный equiripple КИХ-пример создания фильтра для деталей). Если мы хотим фильтр линейной фазы 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 путем определения 'minphase' опции. Выполнение так, позволяет нам получать КИХ-фильтр низшего порядка, чем в случае линейной фазы и все еще соответствовать необходимым спецификациям. Однако даже в этом случае, результатом является неоптимальный фильтр нелинейной фазы, потому что порядок фильтра больше, чем минимум, требуемый для нелинейной фазы equiripple фильтр, чтобы соответствовать спецификациям, как очевидно из следующего примера.
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, мы видим, что соответствуем спецификациям, которым соответствуют и согласно 30-му порядку FIRLPNORM (неминимальная фаза) проект и согласно 32-му порядку проект минимальной фазы FIRGR.
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 и IIRLPNORMC, 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 нормами), необходимо увеличить порядок других проектов.