Минимаксное КИХ-создание фильтра

В этом примере показано, как использовать некоторые ключевые возможности обобщенной КИХ-функции создания фильтра 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains an object of type line.

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

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

Это могло использоваться для отклонения на 60 Гц (с Фс = 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object 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 object and other objects of type uitoolbar, uimenu. The axes object with title Magnitude Response (dB) contains 2 objects of type line.

Заметьте, что equiripple затухание во второй полосе задерживания больше, чем минимальное затухание в полосе задерживания фильтра, спроектированного с 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 object and other objects of type uitoolbar, uimenu. The axes object with title Pole-Zero Plot contains 4 objects of type line, text.