ellip

Функция расчета эллиптического БИХ-фильтра.

Синтаксис:

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

Аргументы:

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

Описание:

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

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

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

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

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

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

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

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

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

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

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

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

Результат:

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

Пример 1:

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

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

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

num = [0.0104 -0.0265 0.0514 -0.0467 0.0248 0.0248 -0.0467 0.0514 -0.0265 0.0104 ];

den = [1 -5.9045 17.5374 -33.2533 43.9319 -41.6951 28.3995 -13.4114 4.0104 -0.5883];

Пример 2:

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

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

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

num = [0 0.0029 0 0.0042 0 0.0025 0 0.0008 0 0.0002 0 0 0 0 0 0 0 0 0];

den = [1 0.1125 1.4804 0.1477 0.9531 0.0828 0.3499 0.0259 0.0806 0.0049 0.0121 0.0006 0.00120 0.0001 0 0 0 0];

Пример 3:

var   Order: Integer, // Порядок фильтра
   Type: String, // Тип фильтра   
   Cutoff: Double, // Частота среза фильтра   
   Apass: Double,// Уровень нестабильности в полосе пропускания
   Astop: Double,// Уровень подавления в зоне непрозрачности
   Z: Carray = 9#0, // Числитель
   P: Carray = 9#0, // Знаменатель
   K: Double; // Коэффициент усиления
Order = 9;
Cutoff = 0.3;
Apass = 3;
Astop = 50;
Type = "high";
ellip(Z, P, K, Order, Cutoff, Apass, Astop, Type);

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

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

Z = [0.59941771-0.80043639i , 0.59941771+0.80043639i , 0.61348619-0.78970545i , 0.61348619+0.78970545i , 0.6689353-0.74332064i , 0.6689353+0.74332064i , 0.83236677-0.5542252i , 0.83236677+0.5542252i , 1+0i];

P = [0.58590121-0.8081264i , 0.58590121+0.8081264i , 0.56780986-0.81142304i , 0.56780986+0.81142304i , 0.49162046-0.82418769i , 0.49162046+0.82418769i , 0.17575927-0.80211095i , 0.17575927+0.80211095i , -0.43993335+0i];

K = 0.1288;

Пример 4:

var   Order: integer, // Порядок фильтра
   Type: string, // Тип фильтра   
   Cutoff: array = 2#0, // Частота среза фильтра   
   Apass: double,// Уровень нестабильности в полосе пропускания
   Astop: double,// Уровень подавления в зоне непрозрачности
   Z: carray = 18#0, // Числитель
   P: carray = 18#0, // Знаменатель
   K: double; // Коэффициент усиления
Order = 9;
Cutoff[1] = 0.3;
Cutoff[2] = 0.5;
Apass = 3;
Astop = 50;
Type = "stop";
ellip(Z, P, K, Order, Cutoff, Apass, Astop, Type, "s");

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

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

Z = [0+0.30133887i , 0-0.30133887i , 0-0.49509088i , 0+0.49509088i , 0-0.48445206i , 0+0.48445206i , 0+0.33245926i , 0-0.33245926i , -2.465128E-17-0.49777847i , -2.465128E-17+0.49777847i , -2.4433711E-17+0.30297468i , -2.4433711E-17-0.30297468i , -2.4311695E-17+0.30962816i , -2.4311695E-17-0.30962816i , -3.1434585E-17-0.45118311i , -3.1434585E-17+0.45118311i , 0+0.38729833i , 0-0.38729833i];

P = [-0.00016958644+0.29990707i , -0.00016958644-0.29990707i , -0.00089991044+0.29835353i , -0.00089991044-0.29835353i , -0.0038640427+0.29157297i , -0.0038640427-0.29157297i , -0.019775304+0.26087189i , -0.019775304-0.26087189i , -0.18115486+0i , -0.00028281916-0.50015477i , -0.00028281916+0.50015477i , -0.0015164365-0.50275469i , -0.0015164365+0.50275469i , -0.006816515-0.51436065i , -0.006816515+0.51436065i , -0.043338253-0.57170963i , -0.043338253+0.57170963i , -0.82802085+0i];

K = 1;

Сопутствующие материалы

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