Наименьшее количество Pth-нормы оптимальный КИХ-проект фильтра

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

Синтаксис FIRLPNORM

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

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');

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

Как 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

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