Минимаксные конечные импульсные характеристики Создания фильтра

В этом примере показано, как использовать некоторые ключевые возможности обобщенной функции Remez конечной импульсной характеристики. Эта функция обеспечивает все функциональные возможности, включенные в 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.

Полосовой фильтр Extra-Ripple

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

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.

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

Теперь мы сделаем новый пример полосы нулем, используя три независимые ошибки.

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

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' опция, обеспечивается осведомленностью о возможных аномалиях переходных областей в проектируемом фильтре. Вот пример фильтра с аномалией. The '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.

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

The 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) из Signal Processing 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, все еще очень маленькая.

Проект минимально-фазового Lowpass

Вот рисунок минимально-фазового lowpass фильтра.

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.