exponenta event banner

Конструкция фильтра Минимакс FIR

В этом примере показано, как использовать некоторые из ключевых функций обобщенной функции проектирования FIR-фильтра Ремеза. Эта функция предоставляет все функциональные возможности, включенные в firpm плюс множество дополнительных функций, представленных здесь.

Взвешенно-чебышевская конструкция

Ниже приведена иллюстрация взвешенно-чебышевской конструкции. В этом примере показана совместимость firgr с firpm.

N = 22;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
W = [1 5];          % Weight vector
b = firgr(N,F,A,W);
fvtool(b,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Ниже приведена взвешенная конструкция Чебышева, в которой явно указан фильтр типа 4 (нечетный, асимметричный).

N = 21;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [0 0 1 1];      % Magnitude vector
W = [2 1];          % Weight vector
b = firgr(N,F,A,W,'4');
fvtool(b,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Конструкция типа «наименьших квадратов»

Ниже показана конструкция типа «наименьших квадратов». Пользовательская функция частотного отклика (taperedresp.m) используется для взвешивания ошибок.

N = 53;                                  % Filter order
F = [0 0.3 0.33 0.77 0.8 1];             % Frequency vector
fresp = {@taperedresp, [0 0 1 1 0 0]};  % Frequency response function
W = [2 2 1];                             % Weight vector
b = firgr(N,F,fresp,W);
fvtool(b,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Фильтр, предназначенный для определенных одноточечных диапазонов

Это иллюстрация фильтра, разработанного для указанных одноточечных диапазонов. Точки частоты f = 0,25 и f = 0,55 являются однополосными точками. Эти очки имеют выигрыш, который приближается к нулю.

Другие кромки полосы нормальны.

N = 42;                               % Filter order
F = [0 0.2 0.25 0.3 0.5 0.55 0.6 1];  % Frequency vector
A = [1 1 0 1 1 0 1 1];                % Magnitude vector
S = {'n' 'n' 's' 'n' 'n' 's' 'n' 'n'};
b = firgr(N,F,A,S);
fvtool(b,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Фильтр, предназначенный для конкретного внутриполосного значения

Вот иллюстрация фильтра, предназначенного для точно заданного внутриполосного значения. Значение должно быть точно указанным значением 0,0 при f = 0,06.

Это можно использовать для отбраковки 60 Гц (при Fs = 2 кГц). Край полосы 0,055 является неопределенным, поскольку он должен примыкать к следующей полосе.

N = 82;                         % Filter order
F = [0 0.055 0.06 0.1 0.15 1];  % Frequency vector
A = [0 0 0 0 1 1];              % Magnitude vector
S = {'n' 'i' 'f' 'n' 'n' 'n'};
b = firgr(N,F,A,S);
fvtool(b,'Color','White', 'MagnitudeDisplay', 'Zero-phase');

Figure Filter Visualization Tool - Zero-phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Zero-phase Response contains an object of type line.

Конструкция фильтра с определенными множественными независимыми ошибками аппроксимации

Ниже приведен пример создания фильтра с использованием нескольких независимых аппроксимационных ошибок. Этот метод используется для непосредственного проектирования фильтров с избыточной и максимальной пульсацией. Одним из интересных свойств этих фильтров является локальная минимальная ширина переходной области. Кроме того, эти конструкции в целом очень быстро сходятся.

N = 12;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
W = [1 1];          % Weight vector
E = {'e1' 'e2'};    % Approximation errors
b = firgr(N,F,A,W,E);
fvtool(b,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Полосовой фильтр экстра-пульсации

Вот иллюстрация внеполосного полосового фильтра, имеющего две независимые ошибки аппроксимации: одна общая для двух полос пропускания, а другая для полосы останова (синего цвета). Для сравнения также нанесена стандартная взвешенно-чебышевская конструкция (зелёным цветом).

N = 28;                     % Filter order
F = [0 0.4 0.5 0.7 0.8 1];  % Frequency vector
A = [1 1 0 0 1 1];          % Magnitude vector
W = [1 1 2];                % Weight vector
E = {'e1','e2','e1'};       % Approximation errors
b1 = firgr(N,F,A,W,E);
b2 = firgr(N,F,A,W);
fvtool(b1,1,b2,1,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

Проектирование внутриполосного нулевого фильтра с использованием трех независимых ошибок

Теперь мы повторим наш пример in-band-zero, используя три независимые ошибки.

Примечание.Иногда необходимо использовать независимые аппроксимационные ошибки, чтобы получить конструкции с принудительными внутриполосными значениями для схождения. Это потому, что аппроксимирующий многочлен в противном случае может быть очень недооценен. Прежний дизайн отображается зеленым цветом.

N = 82;                         % Filter order
F = [0 0.055 0.06 0.1 0.15 1];  % Frequency vector
A = [0 0 0 0 1 1];              % Magnitude vector
S = {'n' 'i' 'f' 'n' 'n' 'n'};
W = [10 1 1];                   % Weight vector
E = {'e1' 'e2' 'e3'};           % Approximation errors
b1 = firgr(N,F,A,S,W,E);
b2 = firgr(N,F,A,S);
fvtool(b1,1,b2,1,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

Проверка аномалий в области перехода

С помощью 'check' один из вариантов позволяет узнать о возможных аномалиях переходной области в проектируемом фильтре. Вот пример фильтра с аномалией. 'check' опция предупреждает одну из этих аномалий: Также можно получить вектор результатов res.edgeCheck. Любые нулевые элементы в этом векторе указывают места вероятных аномалий. Записи «-1» предназначены для не проверенных ребер (не может быть аномалии при f = 0 или f = 1).

N = 44;                     % Filter order
F = [0 0.3 0.4 0.6 0.8 1];  % Frequency vector
A = [1 1 0 0 1 1];          % Magnitude vector
b = firgr(N,F,A,'check');
Warning: Probable transition-region anomalies.  Verify with freqz.
fvtool(b,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Определение минимального порядка фильтров

firpm алгоритм многократно проектирует фильтры до первой итерации, в которой выполняются спецификации. Спецификации удовлетворяются при выполнении всех требуемых ограничений. Путем указания 'minorder', firpmord используется для получения начальной оценки. Есть также 'mineven' и 'minodd' для получения конструкций фильтров с минимальным или нечетным порядком.

F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
R = [0.1 0.02];     % Deviation (ripple) vector
b = firgr('minorder',F,A,R);
fvtool(b,'Color','White', 'MagnitudeDisplay', 'Zero-phase');

Figure Filter Visualization Tool - Zero-phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Zero-phase Response contains an object of type line.

Дифференциаторы и трансформаторы Гильберта

При использовании функции минимального порядка можно выполнить начальную оценку порядка фильтрации. Если это так, то firpmord не будет использоваться. Это необходимо для фильтров, которые firpmord не поддерживает, например, дифференциаторы и трансформаторы Гильберта, а также пользовательские функции частотной характеристики.

N = {'mineven',18}; % Minimum even-order, start order estimate at 18
F = [0.1 0.9];      % Frequency vector
A = [1 1];          % Magnitude vector
R = 0.1;            % Deviation (ripple)
b = firgr(N,F,A,R,'hilbert');
fvtool(b,'Color','White', 'FrequencyRange', '[0, 2pi)');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Конструкция интерполяционного фильтра

Этот раздел иллюстрирует использование интерполяционного фильтра для повышающей дискретизации сигналов с ограниченной полосой на целочисленный коэффициент. Обычно используется intfilt(r,l,alpha) из Toolbox™ обработки сигналов для этого. Однако intfilt не дает такой гибкости в дизайне, как firgr.

N = 30;                     % Filter order
F = [0 0.1 0.4 0.6 0.9 1];  % Frequency vector
A = [4 4 0 0 0 0];          % Magnitude vector
W = [1 100 100];            % Weight vector
b = firgr(N,F,A,W);
fvtool(b,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains an object of type line.

Сравнение между firpm и intfilt

Ниже приведено сравнение между фильтром, разработанным с использованием firpm (синий) и фильтр 30-го порядка, разработанный с использованием intfilt (зеленый).

Обратите внимание, что с помощью функции взвешивания в firpm, можно улучшить минимальное затухание полосы останова почти на 20 дБ.

b2 = intfilt(4, 4, 0.4);
fvtool(b,1,b2,1,'Color','White');

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

Обратите внимание, что равномерное затухание во второй полосе останова больше, чем минимальное затухание полосы останова фильтра, сконструированного с помощью intfilt примерно на 6 дБ. Обратите внимание также, что полоса пропускания пульсирует, хотя и больше, чем у фильтра, разработанного с помощью intfilt, все еще очень маленький.

Проектирование фильтра нижних частот с минимальной фазой

Вот иллюстрация фильтра нижних частот минимальной фазы.

N = 42;             % Filter order
F = [0 0.4 0.5 1];  % Frequency vector
A = [1 1 0 0];      % Magnitude vector
W = [1 10];        % Weight-constraint vector
b = firgr(N,F,A,W, {64},'minphase');
hfvt = fvtool(b,'Color','White');

График полюса/нуля показывает, что за пределами единичной окружности нет корней.

hfvt.Analysis = 'polezero';

Figure Filter Visualization Tool - Pole-Zero Plot contains an axes and other objects of type uitoolbar, uimenu. The axes with title Pole-Zero Plot contains 4 objects of type line, text.