#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dspl.h"
#define ORD 5
#define N 1000
#define K 1024
int main(int argc, char* argv[])
{
void* handle; /* DSPL handle */
void* hplot; /* GNUPLOT handle */
double a[ORD+1], b[ORD+1];
double Rp = 1;
double Rs = 45.0;
double w[N], mag[N], phi[N], tau[N];
complex_t H[N];
double t[K], h[K];
fft_t pfft = {0};
int k, res;
handle = dspl_load(); /* Load DSPL function */
if(!handle)
{
printf("cannot to load libdspl!\n");
return 0;
}
/* Расчет коэффициентов передаточной функции H(s) */
res = ellip_ap(Rp, Rs, ORD, b, a);
if(res != RES_OK)
printf("error code = 0x%8x\n", res);
/* печать коэффициентов передаточной функции */
for(k = 0; k < ORD+1; k++)
printf("b[%2d] = %9.3f a[%2d] = %9.3f\n", k, b[k], k, a[k]);
/* расчет АЧХ, ФЧХ, ГВЗ */
logspace(-2.0, 2.0, N , DSPL_SYMMETRIC, w);
filter_freq_resp(b, a, ORD, w, N,
DSPL_FLAG_ANALOG|DSPL_FLAG_LOGMAG|DSPL_FLAG_UNWRAP,
mag, phi, tau);
/* сохранение АЧХ, ФЧХ, ГВЗ в файлы*/
writetxt(w, mag, N, "dat/ellip_ap_test_mag.txt");
writetxt(w, phi, N, "dat/ellip_ap_test_phi.txt");
writetxt(w, tau, N, "dat/ellip_ap_test_tau.txt");
/* расчет импульсной характеристики и сохранение в файл */
memset(&pfft, 0, sizeof(fft_t));
freqs2time(b, a, ORD, 50.0, K, &pfft, t,h);
writetxt(t, h, K, "dat/ellip_ap_test_time.txt");
/* plotting by GNUPLOT */
gnuplot_create(argc, argv, 820, 680, "img/ellip_ap_example.png", &hplot);
gnuplot_cmd(hplot, "set logscale x");
gnuplot_cmd(hplot, "unset key");
gnuplot_cmd(hplot, "set grid");
gnuplot_cmd(hplot, "set xlabel 'w, рад/с'");
gnuplot_cmd(hplot, "set multiplot layout 2, 2 rowsfirst");
gnuplot_cmd(hplot, "set ylabel '|H(jw)|^2, дБ'");
gnuplot_cmd(hplot, "set yrange [-80:5]");
gnuplot_cmd(hplot, "plot 'dat/ellip_ap_test_mag.txt' with lines");
gnuplot_cmd(hplot, "set ylabel 'Ф(w), рад'");
gnuplot_cmd(hplot, "unset yrange");
gnuplot_cmd(hplot, "plot 'dat/ellip_ap_test_phi.txt' with lines");
gnuplot_cmd(hplot, "set ylabel 'tau(w), с'");
gnuplot_cmd(hplot, "unset yrange");
gnuplot_cmd(hplot, "plot 'dat/ellip_ap_test_tau.txt' with lines");
gnuplot_cmd(hplot, "unset logscale x");
gnuplot_cmd(hplot, "set ylabel 'h(t)'");
gnuplot_cmd(hplot, "set xlabel 't, s'");
gnuplot_cmd(hplot, "set xrange [0:5]");
gnuplot_cmd(hplot, "plot 'dat/ellip_ap_test_time.txt' with lines");
gnuplot_cmd(hplot, "unset multiplot");
gnuplot_close(hplot);
fft_free(&pfft);
dspl_free(handle); /* free dspl handle */
return 0;
}
Расчет аналогового нормированного эллиптического фильтра нижних частот
В данном разделе мы рассмотрим расчет аналогового нормированного эллиптического фильтра нижних частот Кауэра [1] по заданным параметрам АЧХ, показанным на рисунке 1.
нормированного эллиптического ФНЧ
В отличии от фильтров Чебышева первого и второго рода, АЧХ эллиптических фильтров имеет равноволновые колебания как в полосе пропускания, так и в полосе заграждения.
Впервые описание передаточной функции фильтра с использованием аппарата эллиптических функций Якоби было произведено В. Кауэром в 1931 году [2]. Введение в теорию эллиптических функций представлено в приложении.
Аппроксимация квадрата АЧХ нормированного эллиптического ФНЧ представляется в виде:

– эллиптическая дробно-рациональная функция порядка
, зависящая от эллиптического модуля
:

– эллиптическая функция
.
Порядок эллиптического фильтра можно рассчитать из уравнения:

– полный эллиптический интеграл,
– полный комплиментарный эллиптический интеграл [1], а параметры
и
рассчитываются из уравнений параметров квадрата АЧХ нормированного ФНЧ (смотри рисунок 1).
Исходными данными для расчета нормированного эллиптического ФНЧ служат: частота среза
, переходная полоса, задаваемая
, допустимое искажение в полосе пропускания
(дБ) и требуемое подавление в полосе заграждения
(дБ).
На первом шаге рассчитываются параметры
,
,
и
,
после чего производится расчет требуемого порядка фильтра
согласно выражению (3). Полученное значение порядка фильтра
округляется до бо́льшего целого значения.
При округлении
до бо́льшего целого мы меняем параметры эллиптической дробно-рациональной функции. Так на рисунке 2а показаны АЧХ эллиптического фильтра при различном
и фиксированном значении эллиптического модуля
. Из рисунка 2а видно, что увеличение порядка
при фиксированном
приводит к увеличению уровня подавления фильтра в полосе заграждения.
нормированного эллиптического ФНЧ при различных порядках
и параметрах
Однако, в отличие от всех выше рассмотренных аппроксимирующих полиномов, эллиптическая дробно-рациональная фунция имеет дополнительную степень свободы в виде параметра эллиптического модуля
. Мы можем использовать данных параметр
для обеспечения требуемого уровня подавления
(дБ) в полосе заграждения фильтра. Для этого необходимо произвести обновление значения эллиптического модуля
согласно выражению [1]:

На рисунке 2б показан квадрат АЧХ
нормированных эллиптических ФНЧ различного порядка с пересчитанными согласно (4) модулями
. Из рисунка 2б можно видеть, что все фильтры имеют одинаковый уровень подавления в полосе заграждения
дБ, но при увеличении порядка фильтра сужается переходная полоса фильтра.
Квадрат АЧХ
есть сечение квадрата модуля передаточной характеристики
при
.
Для расчета нулей и полюсов
подставим в выражение квадрата АЧХ (1)
, тогда:

Эллиптическая дробно-рациональная функция
имеет как нули так и полюсы. Тогда согласно (5),
обращается в ноль, когда знаменатель выражения
равен бесконечности. Другими словами, нули квадрата модуля передаточной функции
нормированного эллиптического ФНЧ совпадают с полюсами квадрата эллиптической дробно-рациональной функции
и находятся из уравнения:


С учетом (5), нули
квадрата модуля
передаточной функции нормированного эллиптического ФНЧ можно записать:

Квадрат модуля
передаточной функции нормированного эллиптического ФНЧ имеет
чисто мнимых нуля кратности два ввиду периодичности функции
.
Полюсы квадрата модуля
передаточной функции нормированного эллиптического ФНЧ можно найти решив уравнение

Решение уравнения (9) может быть записано в виде [1]:

– обратная эллиптическая функция
.
Расположение нулей и полюсов квадрата модуля передаточной характеристики
нормированного эллиптического ФНЧ на комплексной плоскости для фильтра четного и нечетного порядков при подавлении в полосе заграждения равном 40 дБ показано на рисунке 3.
нормированного эллиптического ФНЧ 4-го и 5 -го порядков
Крестиками обозначены полюсы квадрата модуля передаточной характеристики, а кружочками – нули. Видно, что у фильтра нечетного порядка имеются чисто вещественные полюсы. Обратите внимание, что нули и полюсы отображены в одинаковом масштабе.
Также на рисунке 3 показаны параметрические кривые
на которых расположены полюсы квадрата модуля передаточной функции
для различного значения неравномерности в полосе пропускания
и уровня подавления в полосе заграждения
.
Для получения передаточной характеристики
физически реализуемого фильтра необходимо, чтобы все ее нули и полюсы располагались в левой полуплоскости
, или на мнимой оси
. При этом нули и полюсы на мнимой оси должны быть простыми.
Тогда из всех
нулей (8)
,
, квадрата модуля передаточной функции
нормированного эллиптического ФНЧ необходимо выбрать
различных нулей кратности один, а из полюсов
(10) необходимо выбрать только полюса с отрицательной реальной частью.
Передаточную характеристику
нормированного эллиптического ФНЧ можно записать в виде:

Для представления передаточной характеристики эллиптического фильтра при помощи биквадратной формы заметим, что в случае нечетного порядка
имеется некратный вещественный полюс при
и
:

При остальных
полюсы будут комплексно-сопряженные.
Тогда для любого
, где
может принимать значения 0 или 1, передаточную функцию
нормированного эллиптического ФНЧ можно записать через биквадратную форму:

и
– реальная и мнимая части полюса
соответственно, а
– некратный вещественный полюс (12) в левой полуплоскости
.
Коэффициент передачи на нулевой частоте
нормированного эллиптического ФНЧ при
равен:

Также необходимо учесть, что в случае четного порядка
, нормированный эллиптический ФНЧ на нулевой частоте имеет коэффициент передачи равный
.
Тогда окончательно передаточную характеристику
нормированного эллиптического ФНЧ для произвольного порядка
можно представить в виде:

Рассчитаем нормированный эллиптический ФНЧ исходя из следующих параметров квадрата АЧХ:

Шаг 1. Рассчитаем параметры
,
,
и
:

Шаг 2. Рассчитаем порядок фильтра удовлетворяющий заданным параметрам квадрата АЧХ согласно выражению (3). Для этого предварительно при помощи преобразования Ландена рассчитаем полный и комплиментарный эллиптические интегралы [1]:

Тогда порядок фильтра равен:

Округляем в бо́льшую сторону и получим порядок фильтра
.
Шаг 3. Пересчет эллиптического модуля согласно выражению (4). Предварительно представим
, откуда
,
. Тогда

Пересчитываем модуль
:

Вычисление эллиптических функций
производилось при помощи преобразования Ландена [1].
Шаг 4. Расчет нулей и полюсов фильтра.
Нули
фильтра рассчитываются согласно (15):

Рассчитаем полюсы фильтра. Для этого предварительно вычислим параметр
:

Тогда полюсы согласно выражению (15):

Поскольку
, то рассчитываем некратный полюс
:

Шаг 5. Рассчитываем передаточную характеристику на основе биквадратной формы согласно выражению (15). Для этого произведем предварительно расчет коэффициента передачи
на нулевой частоте для нормировки фильтра.

Поскольку фильтр нечетного порядка, то учитывать
не требуется.
Передаточная характеристика фильтра равна:

На этом расчет нормированного эллиптического ФНЧ можно считать оконченным.
Подставив в выражение для передаточной характеристики
получим комплексный коэффициент передачи
из которого можно рассчитать квадрат АЧХ
, ФЧХ
, групповую задержку
и временну́ю импульсную характеристику
нормированного эллиптического ФНЧ, которые показаны на рисунке 4.
В данном разделе мы рассмотрели порядок расчета передаточной функции аналогового нормированного эллиптического ФНЧ и привели пример расчета фильтра по заданным параметрам АЧХ.
В библиотеке
DSPL-2.0
реализована функция
ellip_ap
,
которая рассчитывает коэффициенты передаточной функции
аналогового
нормированного эллиптического ФНЧ.
Исходный код программы ellip_ap_example.c
расчета и построения характеристик эллиптического фильтра (рисунок 4):