butter
Функция расчета БИХ-фильтра Баттерворта.
Синтаксис
butter(num, den, n, fc, type); fc - число.
butter(num, den, n, fc, type); fc - двухэлементный вектор.
butter(num, den, n, fc, type, "s"); fc - число.
butter(num, den, n, fc, type, "s"); fc - двухэлементный вектор.
butter(z, p, k, n, fc, type); fc - число.
butter(z, p, k, n, fc, type); fc - двухэлементный вектор.
butter(z, p, k, n, fc, type, "s"); fc - число.
butter(z, p, k, n, fc, type, "s"); fc - двухэлементный вектор.
Аргументы
| Имя | Тип данных | Описание |
|---|---|---|
| num | array |
Выходной массив коэффициентов числителя передаточной функции фильтра |
| den | array |
Выходной массив коэффициентов знаменателя передаточной функции фильтра |
| z | carray |
Выходной массив нулей передаточной функции фильтра |
| p | carray |
Выходной массив полюсов передаточной функции фильтра |
| k | double |
Коэффициент усиления фильтра |
| n | integer |
Порядок фильтра |
| fc | double/array |
Частота среза фильтра (для НЧ и ВЧ фильтров) либо массив частот среза фильтра - для полосовых и режекторных фильтров. Для цифровых фильтров должна быть в пределах от 0 до 1, где 1 соответствует половине частоты дискретизации фильтра, для аналоговых фильтров задается в рад/с и может быть любым действительным положительным числом (максимальное значение ограничивается типом double) |
| type | string |
Тип фильтра, задается строкой в 4-х вариантах: "low", "high", "pass", "stop" |
| "s" | string |
Флаг расчета аналогового фильтра (опциональный аргумент - задается пользователем при необходимости расчета аналогового фильтра) |
Описание
butter(num, den, n, fc, type) – функция рассчитывает цифровой фильтр
Баттерворта в виде числителя и знаменателя передаточной функции. Если частота среза fc
задается одним числом, тип фильтра может быть выбран либо как "low" (НЧ-фильтр),
либо как "high" (ВЧ-фильтр). Результат расчета записывается в массивы num и den,
размерность которых должна быть не менее n + 1;
butter(num, den, n, fc, type) – функция рассчитывает цифровой фильтр
Баттерворта в виде числителя и знаменателя передаточной функции. Если частота среза fc
задается вектором из двух элементов, тип фильтра может быть выбран либо как "pass"
(полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета
записывается в массивы num и den, размерность которых должна быть не менее 2 * n + 1;
butter(num, den, n, fc, type, "s") – функция рассчитывает
аналоговый фильтр Баттерворта в виде числителя и знаменателя передаточной функции. Если
частота среза fc задается одним числом, тип фильтра может быть выбран либо как
"low" (НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета
записывается в массивы num и den, размерность которых должна быть не менее n + 1;
butter(num, den, n, fc, type, "s") – функция рассчитывает
аналоговый фильтр Баттерворта в виде числителя и знаменателя передаточной функции. Если
частота среза fc задается вектором из двух элементов, тип фильтра может быть выбран либо как
"pass" (полосовой фильтр), либо как "stop" (режекторный фильтр).
Результат расчета записывается в массивы num и den, размерность которых должна быть не менее
2 * n + 1;
butter(z, p, k, n, fc, type) – функция рассчитывает цифровой фильтр
Баттерворта в виде нулей и полюсов передаточной функции. Если частота среза fc задается
одним числом, тип фильтра может быть выбран либо как "low" (НЧ-фильтр), либо как
"high" (ВЧ-фильтр). Результат расчета записывается в массивы z и p, размерность
которых должна быть не менее n. Коэффициент усиления записывается в переменную k;
butter(z, p, k, n, fc, type) – функция рассчитывает цифровой фильтр
Баттерворта в виде нулей и полюсов передаточной функции. Если частота среза fc задается
вектором из двух элементов, тип фильтра может быть выбран либо как "pass"
(полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета
записывается в массивы z и p, размерность которых должна быть не менее 2 * n. Коэффициент
усиления записывается в переменную k;
butter(z, p, k, n, fc, type, "s") – функция рассчитывает
аналоговый фильтр Баттерворта в виде нулей и полюсов передаточной функции. Если частота
среза fc задается одним числом, тип фильтра может быть выбран либо как "low"
(НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета записывается в массивы
z и p, размерность которых должна быть не менее n. Коэффициент усиления записывается в
переменную k;
butter(z, p, k, n, fc, type, "s") – функция рассчитывает аналоговый фильтр
Баттерворта в виде нулей и полюсов передаточной функции. Если частота среза fc задается
вектором из двух элементов, тип фильтра может быть выбран либо как "pass" (полосовой
фильтр), либо как "stop" (режекторный фильтр). Результат расчета записывается в массивы z и
p, размерность которых должна быть не менее 2 * n. Коэффициент усиления записывается в
переменную k.
Для всех вариантов вызова функции расчета фильтра Баттерворта частоты среза задаются в виде величины, нормированной к половине частоты дискретизации фильтра. Например, для НЧ-фильтра с частотой дискретизации 100 Гц и частотой среза 25 Гц необходимо задать параметр fc равным 0.5.
Алгоритм расчета состоит из следующих ключевых операций:
- Расчет аналогового низкочастотного прототипа фильтра Баттерворта;
- Преобразование прототипа к заданному типу фильтра (НЧ, ВЧ, ПФ, РФ) с учетом заданных частот среза;
- Билинейное преобразование - для цифровых фильтров;
- Преобразование нулей и полюсов передаточной функции фильтра к коэффициентам числителя и знаменателя - если пользователем выбрана соответствующая форма расчета фильтра.
Подробное описание алгоритма расчета представлено в [1].
Результат
| Имя | Тип данных | Описание |
|---|---|---|
| num | array |
Выходной массив коэффициентов числителя передаточной функции фильтра |
| den | array |
Выходной массив коэффициентов знаменателя передаточной функции фильтра |
| z | carray |
Выходной массив нулей передаточной функции фильтра |
| p | carray |
Выходной массив полюсов передаточной функции фильтра |
| k | double |
Коэффициент усиления фильтра |
Пример 1
var Order: integer, // Порядок фильтра
Type: string, // Тип фильтра
Cutoff: double, // Частота среза фильтра
Num: array = 10#0, // Числитель
Den: array = 10#0; // Знаменатель
Order = 9;
Cutoff = 0.3;
Type = "low";
butter(Num, Den, Order, Cutoff, Type);
В результате в массивах Num и Den будут записаны коэффициенты числителя и знаменателя цифрового НЧ-фильтра Баттерворта 9-го порядка с нормированной частотой среза 0.3.
Результат выполнения функции:
num = [1.3337e-04 0.0012 0.0048 0.0112 0.0168 0.0168 0.0112 0.0048 0.0012 1.3337e-04];
den = [1 -3.5863 6.5587 -7.5520 5.9363 -3.2606 1.2421 -0.3146 0.0479 -0.0033];
Пример 2
var Order: integer, // Порядок фильтра
Type: string, // Тип фильтра
Cutoff: array = 2#0, // Частота среза фильтра
Num: array = 19#0, // Числитель
Den: array = 19#0; // Знаменатель
Order = 9;
Cutoff[1] = 0.3;
Cutoff[2] = 0.5;
Type = "pass";
butter(Num, Den, Order, Cutoff, Type, "s");
В результате в массивах Num и Den будут записаны коэффициенты числителя и знаменателя аналогового полосового фильтра Баттерворта 9-го порядка с нормированными частотами среза 0.3 и 0.5.
Результат выполнения функции:
num = [0 0 0 0 0 0 0 0 0 5.12e-07 0 0 0 0 0 0 0 0 0];
den = [1 1.1518 2.0133 1.6314 1.5736 0.9634 0.6493 0.3101 0.1582 0.0595 0.0237 0.0070 0.0022 4.8773e-04 1.1950e-04 1.8583e-05 3.4399e-06 2.9518e-07 3.8443e-08];
Пример 3
var Order: integer, // Порядок фильтра
Type: string, // Тип фильтра
Cutoff: double, // Частота среза фильтра
Z: carray = 9#0, // Числитель
P: carray = 9#0, // Знаменатель
K: double; // Знаменатель
Order = 9;
Cutoff = 0.3;
Type = "high";
butter(Z, P, K, Order, Cutoff, Type);
В результате в массивах Z и P будут записаны коэффициенты нулей и полюсов цифрового ВЧ-фильтра Баттерворта 9-го порядка с нормированной частотой среза 0.3.
Коэффициенты нулей и полюсов являются комплексными, поэтому в массивах записываются в виде чередующихся действительных и мнимых частей: [ReZ0 ImZ0 ReZ1 ImZ1 ReZ2 ImZ2 ...].
Коэффициент усиления будет записан в переменную К.
Результат выполнения функции:
Z = [1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0];
P = [0.5154 -0.6986 0.4185 -0.4988 0.3629 -0.3211 0.3339 -0.1572 0.3249 0 0.3339 0.1572 0.3629 0.3211 0.4185 0.4988 0.5154 0.6986];
K = 0.0576;
Пример 4
var Order: integer, // Порядок фильтра
Type: string, // Тип фильтра
Cutoff: array = 2#0, // Частота среза фильтра
Z: carray = 18#0, // Числитель
P: carray = 18#0, // Знаменатель
K: double; // Знаменатель
Order = 9;
Cutoff = [0.3, 0.5];
Type = "stop";
butter(Z, P, K, Order, Cutoff, Type, "s");
В результате в массивах Z и P будут записаны коэффициенты нулей и полюсов аналогового режекторного фильтра Баттерворта 9-го порядка с нормированными частотами среза 0.3 и 0.5.
Коэффициенты нулей и полюсов являются комплексными, поэтому в массивах записываются в виде чередующихся действительных и мнимых частей: [ReZ0 ImZ0 ReZ1 ImZ1 ReZ2 ImZ2 ...].
Коэффициент усиления будет записан в переменную К.
Результат выполнения функции:
Z = [0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873 0 -0.3873];
P = [-0.0131 0.3008 -0.0390 0.3073 -0.0638 0.3209 -0.0855 0.3432 -0.1000 0.3742 -0.0855 -0.3432 -0.0638 -0.3209 -0.0390 -0.3703 -0.0131 -0.3008 -0.0216 -0.4977 -0.0609 -0.4805 -0.0894 -0.4495 -0.1025 -0.4116 -0.1 -0.3742 -0.1025 0.4116 -0.0894 0.4495 -0.0609 0.4805 -0.0216 0.4977];
K = 1;
Дополнительные материалы
- Айфичер Э., Джервис Б. Цифровая обработка сигналов. Практический подход. - Москва: Вильямс, 2004, 992 с.