Этот пример показов, как спроектировать фильтры конечной импульсной характеристики с наименьшей 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, которая также проектирует линейно-фазовые фильтры равновесия, но спецификации которых приведены по-другому к 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, задавая опцию 'minphase'. Это позволяет нам получить конечная импульсная характеристика более низкого порядка, чем в случае с линейной фазой, и все еще соответствовать требуемым спецификациям. Однако даже в этом случае результатом является неоптимальный нелинейный-фазовый фильтр, поскольку порядок фильтра больше минимального, необходимого для того, чтобы нелинейный-фазовый фильтр равновесия удовлетворял спецификациям, как видно из следующего примера.
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-го порядка (nonminimum-phase) проекта так и проекта минимальной фазы 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 и 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 применяются, когда требуется наименьший возможный порядок для соответствия набору проектных спецификаций. Чтобы соответствовать тем же спецификациям с проектом методом наименьших квадратов, требуется фильтр более высокого порядка. Однако более высокий порядок обеспечивает дополнительное ослабление (меньше пульсации) для большого фрагмента полосы упора (полосы пропускания). На самом деле проект методом наименьших квадратов минимизирует энергию полосы стопора. Компромиссы между проектом 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');
Для достижения минимального затухания в полосе задерживания в случае равновесия (256-норма) необходимо увеличить порядок других проектов.