#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]:

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

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


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

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


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

имеется некратный вещественный полюс при
и
:

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

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

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

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

,
,
и
:



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

:

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

:


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

на нулевой частоте для нормировки фильтра.

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

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