#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;
}
Расчет аналогового нормированного эллиптического фильтра нижних частот
![]() DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов Распространяется под лицензией LGPL v3
Страница проекта на SourceForge
|
В данном разделе мы рассмотрим расчет аналогового нормированного эллиптического фильтра нижних частот Кауэра [1] по заданным параметрам АЧХ, показанным на рисунке 1.


В отличии от фильтров Чебышева первого и второго рода, АЧХ эллиптических фильтров имеет равноволновые колебания как в полосе пропускания, так и в полосе заграждения.
Впервые описание передаточной функции фильтра с использованием аппарата эллиптических функций Якоби было произведено В. Кауэром в 1931 году [2]. Введение в теорию эллиптических функций представлено в приложении.
Аппроксимация квадрата АЧХ нормированного эллиптического ФНЧ представляется в виде:







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





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




Однако, в отличие от всех выше рассмотренных аппроксимирующих полиномов, эллиптическая дробно-рациональная фунция имеет дополнительную степень свободы в виде параметра эллиптического модуля . Мы можем использовать данных параметр
для обеспечения требуемого уровня подавления
(дБ) в полосе заграждения фильтра. Для этого необходимо произвести обновление значения эллиптического модуля
согласно выражению [1]:




Квадрат АЧХ есть сечение квадрата модуля передаточной характеристики
при
.
Для расчета нулей и полюсов подставим в выражение квадрата АЧХ (1)
, тогда:














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




Расположение нулей и полюсов квадрата модуля передаточной характеристики нормированного эллиптического ФНЧ на комплексной плоскости для фильтра четного и нечетного порядков при подавлении в полосе заграждения равном 40 дБ показано на рисунке 3.


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






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






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



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

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









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




Шаг 4. Расчет нулей и полюсов фильтра.
Нули фильтра рассчитываются согласно (15):










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

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

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