exponenta event banner

Оптимальная конструкция фильтра FIR по крайней мере Pth-norm

В этом примере показано, как с помощью функции FIRLPNORM проектировать фильтры FIR по крайней мере Pth-norm. Эта функция использует алгоритм неограниченной оптимизации с наименьшим значением Pth для разработки КИХ-фильтров с произвольной амплитудной характеристикой.

Синтаксис FIRLPNORM

Синтаксис 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

Команда 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');

Изменение Pth-нормы

Подобно 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

Для сравнения, мы создаем линейный фильтр наименьших квадратов с использованием 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), необходимо увеличить порядок других конструкций.