Функция расчета КИХ-фильтра по методу Паркса-МакКлеллана.
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. |
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];
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];
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];
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];
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];