Функция расчета эллиптического БИХ-фильтра.
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].
Имя | Тип данных | Описание |
---|---|---|
num | array | Выходной массив коэффициентов числителя передаточной функции фильтра |
den | array | Выходной массив коэффициентов знаменателя передаточной функции фильтра |
z | array/carray | Выходной массив нулей передаточной функции фильтра |
p | array/carray | Выходной массив полюсов передаточной функции фильтра |
k | double | Коэффициент усиления фильтра |
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];
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];
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;
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;