cheby1

Функция расчета БИХ-фильтра Чебышёва 1 типа.

Синтаксис:

cheby1(num, den, n, r, fc, type);  fc - число.
cheby1(num, den, n, r, fc, type);  fc - двухэлементный вектор.
cheby1(num, den, n, r, fc, type, "s");  fc - число.
cheby1(num, den, n, r, fc, type, "s");  fc - двухэлементный вектор.
cheby1(z, p, k, n, r, fc, type);  fc - число.
cheby1(z, p, k, n, r, fc, type);  fc - двухэлементный вектор.
cheby1(z, p, k, n, r, fc, type, "s");  fc - число.
cheby1(z, p, k, n, r, fc, type, "s");  fc - двухэлементный вектор.

Аргументы:

Имя Тип данных Описание
num array Выходной массив коэффициентов числителя передаточной функции фильтра
den array Выходной массив коэффициентов знаменателя передаточной функции фильтра
z carray Выходной массив нулей передаточной функции фильтра
p carray Выходной массив полюсов передаточной функции фильтра
k double Коэффициент усиления фильтра
n integer Порядок фильтра
r double Коэффициент нестабильности (дБ) в полосе пропускания, должен быть положительным
fc double/array Частота среза фильтра (для НЧ и ВЧ фильтров) либо массив частот среза фильтра - для полосовых и режекторных фильтров. Для цифровых фильтров должна быть в пределах от 0 до 1, где 1 соответствует половине частоты дискретизации фильтра, для аналоговых фильтров задается в рад/с и может быть любым действительным положительным числом (максимальное значение ограничивается типом double)
type string Тип фильтра, задается строкой в 4-х вариантах: "low", "high", "pass", "stop"
"s" string Флаг расчета аналогового фильтра (опциональный аргумент - задается пользователем при необходимости расчета аналогового фильтра)

Описание:

cheby1(num, den, n, r, fc, type) – функция рассчитывает цифровой фильтр Чебышёва 1 типа в виде числителя и знаменателя передаточной функции. Если частота среза fc задается одним числом, тип фильтра должен быть выбран либо как "low" (НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета записывается в массивы num и den, размерность которых должна быть не менее n + 1;

cheby1(num, den, n, r, fc, type) – функция рассчитывает цифровой фильтр Чебышёва 1 типа в виде числителя и знаменателя передаточной функции. Если частота среза fc задается вектором из двух элементов, тип фильтра должен быть выбран либо как "pass" (полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета записывается в массивы num и den, размерность которых должна быть не менее 2 * n + 1;

cheby1(num, den, n, r, fc, type, "s") – функция рассчитывает аналоговый фильтр Чебышёва 1 типа в виде числителя и знаменателя передаточной функции. Если частота среза fc задается одним числом, тип фильтра должен быть выбран либо как "low" (НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета записывается в массивы num и den, размерность которых должна быть не менее n + 1;

cheby1(num, den, n, r, fc, type, "s") – функция рассчитывает аналоговый фильтр Чебышёва 1 типа в виде числителя и знаменателя передаточной функции. Если частота среза fc задается вектором из двух элементов, тип фильтра должен быть выбран либо как "pass" (полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета записывается в массивы num и den, размерность которых должна быть не менее 2 * n + 1;

cheby1(z, p, k, n, r, fc, type) – функция рассчитывает цифровой фильтр Чебышёва 1 типа в виде нулей и полюсов передаточной функции. Если частота среза fc задается одним числом, тип фильтра должен быть выбран либо как "low" (НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета записывается в массивы z и p, размерность которых должна быть не менее n. Коэффициент усиления записывается в переменную k;

cheby1(z, p, k, n, r, fc, type) – функция рассчитывает цифровой фильтр Чебышёва 1 типа в виде нулей и полюсов передаточной функции. Если частота среза fc задается вектором из двух элементов, тип фильтра должен быть выбран либо как "pass" (полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета записывается в массивы z и p, размерность которых должна быть не менее 2 * n. Коэффициент усиления записывается в переменную k;

cheby1(z, p, k, n, r, fc, type, "s") – функция рассчитывает аналоговый фильтр Чебышёва 1 типа в виде нулей и полюсов передаточной функции. Если частота среза fc задается одним числом, тип фильтра должен быть выбран либо как "low" (НЧ-фильтр), либо как "high" (ВЧ-фильтр). Результат расчета записывается в массивы z и p, размерность которых должна быть не менее n. Коэффициент усиления записывается в переменную k;

cheby1(z, p, k, n, r, fc, type, "s") – функция рассчитывает аналоговый фильтр Чебышёва 1 типа в виде нулей и полюсов передаточной функции. Если частота среза fc задается вектором из двух элементов, тип фильтра должен быть выбран либо как "pass" (полосовой фильтр), либо как "stop" (режекторный фильтр). Результат расчета записывается в массивы z и p, размерность которых должна быть не менее 2 * n. Коэффициент усиления записывается в переменную k.

Для всех вариантов вызова функции расчета фильтра Чебышёва 1 типа частоты среза задаются в виде величины, нормированной к половине частоты дискретизации фильтра. Например, для НЧ-фильтра с частотой дискретизации 100 Гц и частотой среза 25 Гц необходимо задать параметр fc равным 0.5.

Алгоритм расчета состоит из следующих ключевых операций:

  1. Расчет аналогового низкочастотного прототипа фильтра Чебышёва 1 типа;
  2. Преобразование прототипа к заданному типу фильтра (НЧ, ВЧ, ПФ, РФ) с учетом заданных частот среза;
  3. Билинейное преобразование - для цифровых фильтров;
  4. Преобразование нулей и полюсов передаточной функции фильтра к коэффициентам числителя и знаменателя - если пользователем выбрана соответствующая форма расчета фильтра.

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

Результат:

Имя Тип данных Описание
num array Выходной массив коэффициентов числителя передаточной функции фильтра
den array Выходной массив коэффициентов знаменателя передаточной функции фильтра
z carray Выходной массив нулей передаточной функции фильтра
p carray Выходной массив полюсов передаточной функции фильтра
k double Коэффициент усиления фильтра

Пример 1:

var   Order: integer, // Порядок фильтра   
   Ripple: double,// Коэффициент нестабильности в зоне непрозрачности фильтра
   Type: string, // Тип фильтра   
   Cutoff: double, // Частота среза фильтра   
   Num: array = 10#0, // Числитель
   Den: array = 10#0; // Знаменатель
Order = 9;
Ripple = 3;
Cutoff = 0.3;
Type = "low";
cheby1(Num, Den, Order, Ripple, Cutoff, Type);

В результате в массивах Num и Den будут записаны коэффициенты числителя и знаменателя цифрового НЧ-фильтра Чебышёва 1 типа 9-го порядка с нормированной частотой среза 0.3.

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

num = [4.0694348E-6 , 3.6624913E-5 , 0.00014649965 , 0.00034183252 , 0.00051274878 , 0.00051274878 , 0.00034183252 , 0.00014649965 , 3.6624913E-5 , 4.0694348E-6];

den = [1 , -6.5815528 , 20.730326 , -40.653271 , 54.44024 , -51.495799 , 34.376646 , -15.62636 , 4.3987744 , -0.58691942];

Пример 2:

var   Order: integer, // Порядок фильтра   
   Ripple: double,// Коэффициент нестабильности в зоне непрозрачности фильтра
   Type: string, // Тип фильтра   
   Cutoff: array = 2#0, // Частота среза фильтра   
   Num: array = 19#0, // Числитель
   Den: array = 19#0; // Знаменатель
Order = 9;
Ripple = 3;
Cutoff[1] = 0.3;
Cutoff[2] = 0.5;
Type = "pass";
cheby1(Num, Den, Order, Ripple, Cutoff, Type, "s");

В результате в массивах Num и Den будут записаны коэффициенты числителя и знаменателя аналогового полосового фильтра Чебышёва 1 типа 9-го порядка с нормированными частотами среза 0.3 и 0.5.

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

num = [0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 2.0047546E-9 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0];

den = [1 , 0.11318814 , 1.4464058 , 0.14472434 , 0.91433624 , 0.079534504 , 0.33142171 , 0.024527864 , 0.075892149 , 0.0046415949 , 0.011383822 , 0.00055187694 , 0.0011185483 , 4.0264342E-5 , 6.9432408E-5 , 1.6485007E-6 , 2.4713199E-6 , 2.9008882E-8 , 3.8443359E-8];

Пример 3:

var   Order: integer, // Порядок фильтра   
   Ripple: double,// Коэффициент нестабильности в зоне непрозрачности фильтра
   Type: string, // Тип фильтра   
   Cutoff: double, // Частота среза фильтра   
   Z: carray = 9#0, // Числитель
   P: carray = 9#0, // Знаменатель
   K: double; // Коэффициент усиления
Order = 9;
Ripple = 3;
Cutoff = 0.3;
Type = "high";
cheby1(Z, P, K, Order, Ripple, Cutoff, Type);

В результате в массивах Z и P будут записаны коэффициенты нулей и полюсов цифрового ВЧ-фильтра Чебышёва 1 типа 9-го порядка с нормированной частотой среза 0.3. Коэффициенты нулей и полюсов являются комплексными, поэтому в массивах записываются в виде чередующихся действительных и мнимых частей: [ReZ0 ImZ0 ReZ1 ImZ1 ReZ2 ImZ2 ...]. Коэффициент усиления будет записан в переменную К.

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

Z = [1+0i , 1+0i , 1+0i , 1+0i , 1+0i , 1+0i , 1+0i , 1+0i , 1+0i];

P = [0.5729263+0.80254292i , 0.46761387+0.82926777i , 0.21499571+0.86698831i , -0.27683566+0.72906912i , -0.67662203+0i , -0.27683566-0.72906912i , 0.21499571-0.86698831i , 0.46761387-0.82926777i , 0.5729263-0.80254292i];

K = 0.013147473;

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

  1. Айфичер Э., Джервис Б. Цифровая обработка сигналов. Практический подход. - Москва: Вильямс, 2004, 992 с.