firpm

Функция расчета КИХ-фильтра по методу Паркса-МакКлеллана.

Синтаксис:

y = firpm(n, f, a);
y = firpm(n, f, a, w);

Аргументы:

Имя Тип данных Описание
n integer Порядок фильтра
f array Массив нормированных частот среза фильтра. Значение частоты должно лежать в пределах от 0 до 1, где 1 соответствует половине частоты дискретизации фильтра, частоты должны быть отсортированы по возрастанию
a array Массив значений амплитуд на частотах среза (элементы массива f), предназначен для настройки типа фильтра (НЧ, ВЧ, ПФ, РФ, а также АЧХ произвольной формы). Каждый элемент массива - вещественное число больше либо равно нулю
w array Массив весовых коэффициентов, размер массива должен быть в 2 раза меньше массива f или a. С помощью данного коэффициента можно управлять уровнем подавления в каждой из полос. Каждый элемент массива - вещественное число больше нуля. Значения элементов по умолчанию - 1

Описание:

firpm(n, f, a) – функция рассчитывает цифровой фильтр с конечной импульсной характеристикой по алгоритму Паркса-МакКлеллона;

firpm(n, f, a, w) – функция рассчитывает цифровой фильтр с конечной импульсной характеристикой по алгоритму Паркса-МакКлеллона. Для дополнительной настройки уровней подавления используется массив коэффициентов w, размерность которого равна числу полос (2 для ВЧ/НЧ, 3 для ПФ/РФ), где каждый коэффициент - безразмерная величина, значения коэффициента выбираются экспериментальным путём.

Для всех вариантов вызова функции расчета КИХ-фильтра методом Паркса-МакКлеллона частоты среза задаются в виде величины, нормированной к половине частоты дискретизации фильтра.

Подробное описание алгоритма расчета представлено в [1].

Для получения НЧ фильтров необходимо задачать массив частот следующего вида: f = [0, fc1, fc2, 1], массив амплитуд a = [1, 1, 0, 0];

Для получения ВЧ фильтров необходимо задачать массив частот следующего вида: f = [0, fc1, fc2, 1], массив амплитуд a = [0, 0, 1, 1];

Для получения ПФ: f = [0, fc1, fc2, fc3, fc4, 1], массив амплитуд a = [0, 0, 1, 1, 0, 0]

Для получения РФ: f = [0, fc1, fc2, fc3, fc4, 1], массив амплитуд a = [1, 1, 0, 0, 1, 1]

Кроме того, функция firpm позволяет строить фильтры с АЧХ произвольной формы, указывая границы полос в массиве f и амплитуды на каждой частоте

Результат:

Имя Тип данных Описание
y array Массив коэффициентов импульсной характеристики фильтра, размерность массива n+1. В случае, если порядок n - нечетное число и при этом на частоте Найквиста (половина частоты дискретизации) ненулевое значение амплитуды, то порядок фильтра неявно увеличивается на 1, число элементов в массиве y: n+2.

Пример 1. НЧ фильтр:

var   F: array = 4#0; // Массив частот фильтра 
var   A: array = 4#0; // Массив амплитуд фильтра
var   Order: integer = 20; // Порядок фильтра
output   Y: array;   
F = [0, 0.4, 0.6, 1];
A = [1, 1, 0, 0]; 
Y = firpm(Order, F, A);

В результате в массиве Y будут записаны коэффициенты импульсной характеристики цифрового НЧ-фильтра 20-го порядка.

Результат выполнения функции:

Y = [-2.7755576E-17 , 0.013637309 , -4.4408921E-17 , -0.023939692 , 3.3306691E-17 , 0.046588607 , 1.110223E-17 , -0.09511888 , 4.4408921E-17 , 0.31451806 , 0.5 , 0.31451806 , 4.4408921E-17 , -0.09511888 , 1.110223E-17 , 0.046588607 , 3.3306691E-17 , -0.023939692 , -4.4408921E-17 , 0.013637309 , -2.7755576E-17];

Пример 2. ВЧ фильтр:

var   F: array = 4#0; // Массив частот фильтра   
var   A: array = 4#0; // Массив амплитуд фильтра
var   Order: integer = 20; // Порядок фильтра
output   Y: array;   
F = [0, 0.4, 0.6, 1];
A = [0, 0, 1, 1]; 
Y = firpm(Order, F, A);

В результате в массиве Y будут записаны коэффициенты импульсной характеристики цифрового ВЧ-фильтра 20-го порядка.

Результат выполнения функции:

Y = [-2.8666305E-17 , -0.013637309 , 5.9934696E-17 , 0.023939692 , -7.6761514E-17 , -0.046588607 , -4.3368087E-19 , 0.09511888 , -4.6230381E-17 , -0.31451806 , 0.5 , -0.31451806 , -4.6230381E-17 , 0.09511888 , -4.3368087E-19 , -0.046588607 , -7.6761514E-17 , 0.023939692 , 5.9934696E-17 , -0.013637309 , -2.8666305E-17];

Пример 3. ПФ:

var   F: array = 6#0; // Массив частот фильтра
var   A: array = 6#0; // Массив амплитуд фильтра
var   Order: integer = 20;// Порядок фильтра 
output   Y: array;   
F = [0, 0.3, 0.4, 0.6, 0.7, 1];
A = [0, 0, 1, 1, 0, 0]; 
Y = firpm(Order, F, A);

В результате в массиве Y будут записаны коэффициенты импульсной характеристики цифрового ПФ-фильтра 20-го порядка с частотами среза 0.4 и 0.6, частотами подавления 0.3, 0.7.

Результат выполнения функции:

Y = [0.050473873 , 1.8809969E-5 , -0.030612231 , 1.3519022E-5 , -0.03279462 , 9.4067958E-6 , 0.14642446 , 1.0793473E-5 , -0.2585782 , 1.4399938E-5 , 0.3054724 , 1.4399938E-5 , -0.2585782 , 1.0793473E-5 , 0.14642446 , 9.4067958E-6 , -0.03279462 , 1.3519022E-5 , -0.030612231 , 1.8809969E-5 , 0.050473873];

Пример 4. РФ:

var   F: array = 6#0; // Массив частот фильтра
var   A: array = 6#0; // Массив амплитуд фильтра
var   W: array = 3#0; // Массив весовых коэффициентов фильтра
var   Order: integer = 20; // Порядок фильтра
output   Y: array;   
F = [0, 0.3, 0.4, 0.6, 0.7, 1];
A = [1, 1, 0, 0, 1, 1];   
Y = firpm(Order, F, A);

В результате в массиве Y будут записаны коэффициенты импульсной характеристики цифрового РФ-фильтра 20-го порядка с частотами среза 0.4 и 0.6, частотами подавления 0.3, 0.7.

Результат выполнения функции:

Y = [-0.050484496 , 4.9988127E-8 , 0.030594984 , 1.0390115E-7 , 0.032781363 , 1.6866256E-7 , -0.14643077 , 2.0564744E-7 , 0.25856364 , 2.1461708E-7 , 0.69451436 , 2.1461708E-7 , 0.25856364 , 2.0564744E-7 , -0.14643077 , 1.6866256E-7 , 0.032781363 , 1.0390115E-7 , 0.030594984 , 4.9988127E-8 , -0.050484496];

Пример 5. Вызов функции с весовыми коэффициентами:

var   F: array = 6#0; // Массив частот фильтра
var   A: array = 6#0; // Массив амплитуд фильтра
var   W: array = 3#0; // Массив весовых коэффициентов фильтра
var   Order: integer = 50; // Порядок фильтра
output   Y: array;   
F = [0, 0.3, 0.4, 0.6, 0.7, 1];
A = [0, 0, 1, 1, 0, 0]; 
W = [3, 1, 100];   
Y = firpm(Order, F, A, W);

В результате в массиве Y будут записаны коэффициенты импульсной характеристики цифрового ПФ-фильтра 50-го порядка с частотами порпускания 0.4 и 0.6, частотами подавления 0.3, 0.7.

Результат выполнения функции:

Y = [0.0006918071 , 0.004496323 , 0.0037633359 , -0.0050800733 , -0.0023161216 , 0.0098553797 , -0.0005199639 , -0.013440699 , 0.0035918635 , 0.009533311 , -0.0038274051 , 0.0067831956 , 7.60999E-5 , -0.030775632 , 0.0047762126 , 0.043859167 , -0.0059949056 , -0.021537829 , 0.0016930138 , -0.048255321 , 0.0047263615 , 0.14962351 , -0.0073657257 , -0.24098806 , 0.0035110013 , 0.27781168 , 0.0035110013 , -0.24098806 , -0.0073657257 , 0.14962351 , 0.0047263615 , -0.048255321 , 0.0016930138 , -0.021537829 , -0.0059949056 , 0.043859167 , 0.0047762126 , -0.030775632 , 7.60999E-5 , 0.0067831956 , -0.0038274051 , 0.009533311 , 0.0035918635 , -0.013440699 , -0.0005199639 , 0.0098553797 , -0.0023161216 , -0.0050800733 , 0.0037633359 , 0.004496323 , 0.0006918071];

Дополнительные материалы

  1. Parks, Thomas W., and C. Sidney Burrus. Digital Filter Design. New York: John Wiley & Sons, 1987, p. 83..