#include <stdio.h>
#include <string.h>
#include <math.h>
#include "dspl.h"
#define N 8000
void r2hdb(double* r, double* h, double* hdb, double ep2, int n)
{
int k;
for(k = 0; k < n; k++)
{
r[k] *= r[k];
h[k] = 1.0/(1.0 + ep2 * r[k]);
hdb[k] = 10.0*log10(h[k]);
}
}
int main(int argc, char* argv[])
{
double w[N];
double r[N];
double h[N], hdb[N];
double ep2, Rp, Rs, es2, m;
int ord, k;
void* handle; /* DSPL handle */
handle = dspl_load(); /* Load DSPL function */
/* заполняю массив частот в логарифмическом формате от 0.01 до 100 */
logspace(-2, 2, N, DSPL_PERIODIC, w);
ord = 4; /* порядок фильтра */
Rp = 0.3; /* Неравномерность в полосе пропускания (дБ) */
Rs = 10.0; /* Уровень подавления в полосе заграждения (дБ) */
/* Параметры ep^2 и es^2 */
ep2 = pow(10.0, Rp*0.1) - 1.0;
es2 = pow(10.0, Rs*0.1) - 1.0;
/* вывод на печать параметров ep^2 и es^2 */
printf("ep^2 = %.4f\n", ep2);
printf("es^2 = %.4f\n", es2);
/**********************************************************************
Расчет F_N^2(w) и |H(jw)|^2 фильтра Баттерворта
**********************************************************************/
for(k = 0; k < N; k++)
{
r[k] = pow(w[k], (double)(ord));
}
r2hdb(r, h, hdb, ep2, N);
/* сохранение в файлы результатов расчета фильтра Баттерворта */
writetxt(w, r, N, "dat/butter_r.txt");
writetxt(w, h, N, "dat/butter_h.txt");
writetxt(w, hdb, N, "dat/butter_hdb.txt");
/**********************************************************************
Расчет F_N^2(w) и |H(jw)|^2 фильтра Чебышева 1-го рода
**********************************************************************/
cheby_poly1(w, N, ord, r);
r2hdb(r, h, hdb, ep2, N);
/* сохранение в файлы результатов расчета фильтра Чебышева 1-го рода */
writetxt(w, r, N, "dat/cheby1_r.txt");
writetxt(w, h, N, "dat/cheby1_h.txt");
writetxt(w, hdb, N, "dat/cheby1_hdb.txt");
/***********************************************************************
Расчет F_N^2(w) и |H(jw)|^2 фильтра Чебышева 2-го рода
**********************************************************************/
for(k = 0; k < N; k++)
{
w[k] = 1.0 / w[k];
}
cheby_poly1(w, N, ord, r);
for(k = 0; k < N; k++)
{
r[k] =1.0 / (r[k] *r[k]);
h[k] = 1.0/(1.0 + es2*r[k]);
hdb[k] = 10.0*log10(h[k]);
}
logspace(-2, 2, N, DSPL_PERIODIC, w);
/* сохранение в файлы результатов расчета фильтра Чебышева 1-го рода */
writetxt(w, r, N, "dat/cheby2_r.txt");
writetxt(w, h, N, "dat/cheby2_h.txt");
writetxt(w, hdb, N, "dat/cheby2_hdb.txt");
/**********************************************************************
Расчет F_N^2(w) и |H(jw)|^2 эллиптического фильтра
*********************************************************************/
ellip_modulareq(Rp, Rs, ord, &m); /* пересчет эллиптического модуля*/
printf("modular m = %.3f\n", m); /* вывод на печать */
/* расчет эллиптической рациональной функции */
ellip_rat(w, N, ord, m, r);
r2hdb(r, h, hdb, ep2, N);
/* сохранение в файлы результатов расчета эллиптического фильтра */
writetxt(w, r, N, "dat/ellip_r.txt");
writetxt(w, h, N, "dat/ellip_h.txt");
writetxt(w, hdb, N, "dat/ellip_hdb.txt");
dspl_free(handle); /* free dspl handle */
return 0;
}
Постановка задачи и способы аппроксимации квадрата АЧХ
DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов Распространяется под лицензией LGPL v3 Страница проекта на SourceForge |
По форме амплитудно-частотной характеристики (АЧХ) различают следующие типы фильтров:
- фильтры нижних частот (ФНЧ);
- фильтры верхних частот (ФВЧ);
- полосовые фильтры (ПФ) или полосопропускающие фильтры;
- режекторные фильтры (РФ) или полосозаграждающие фильры.
Примеры квадрата АЧХ для приведенных типов фильтров показаны на рисунке 1.
Рассмотрим постановку задачи расчета фильтра на примере ФНЧ. Мы бы хотели получить фильтр, который пропускает без искажений все частоты ниже и полностью подавляет все частоты выше . Такой ФНЧ называют идеальным, и он не реализуем на практике. Реализуемые ФНЧ всегда вносят искажения в полосе пропускания и не до конца подавляет в полосе заграждения. На рисунке 2 показан квадрат АЧХ идеального (толстая пунктирная линия) и реального (сплошная линия) ФНЧ.
Полоса частот от 0 до называется полосой пропускания ФНЧ, полоса частот выше называется полосой подавления или полосой заграждения. Полоса частот между и называется переходной полосой фильтра. Мы должны научится регулировать искажения сигнала и подавление при использовании ФНЧ.
Параметры
Таким образом, получили такой «изогнутый коридор» в который должна поместиться АЧХ нашего фильтра. При этом, чем «коридор уже», тем параметр меньше, а параметр больше.
Принято искажение в полосе пропускания и требуемое подавление фильтра в полосе заграждения выражать в децибелах, как и соответственно. Тогда:
Из (2) можно выразить:
Порядок фильтра можно определить как максимальное количество нулей и полюсов передаточной функции фильтра. Также можно сказать, что порядок фильтра задается максимальной степенью полинома числителя и знаменателя передаточной функции фильтра. Однако для расчета фильтра мы задаем параметры частотной характеристики, в которые должен укладываться наш фильтр, и мы не знаем какой порядок фильтра для этого потребуется.
Мы неслучайно уделяем особое внимание параметрам фильтров нижних частот. Дело в том, что ФНЧ служат прототипом для фильтров других типов (ФВЧ, ПФ и РФ), передаточные характеристики которых можно получить из передаточной характеристики ФНЧ путем алгебраических частотных преобразований. При этом ФНЧ с различными значениями частоты среза также могут быть получены из других ФНЧ путем преобразования частоты.
Поэтому фильтры нижних частот подходят на роль прототипов из которых можно получить все типы фильтров с любыми параметрами квадрата АЧХ. При этом особую роль играют нормированные ФНЧ, у которых частота среза рад/с.
Аппроксимация квадрата АЧХ нормированного фильтра нижних частот представляется в виде:
Для того чтобы квадрат АЧХ фильтра разместился в заданном коридоре необходимо, чтобы выполнялись следующие условия:
Необходимо отметить, что для сужения переходной полосы необходимо увеличивать порядок фильтра, однако при практической реализации от порядка фильтра зависит количество реактивных элементов (емкостей и индуктивностей) в его схеме. В результате, увеличение порядка фильтра приводит к усложнению самого фильтра, удорожанию и что самое важное, фильтр с увеличением порядка становится очень чувствительным к разбросу номиналов его компонент и требует точной прецизионной настройки.
Аппроксимирующая функция нормированного ФНЧ Баттерворта порядка равна . Квадрат АЧХ фильтра задается выражением:
Ось абсцисс на рисунке 3 показана в логарифмическом масштабе.
Фильтры Баттерворта являются фильтрами с максимально-гладкой АЧХ. Скорость спада квадрата АЧХ составляет дБ/декада. При аппроксимации по Баттервотру, очень часто задают параметр , и на частоте , квадрат АЧХ (–3 дБ). Тогда для расчета ФНЧ Баттерворта при задается только порядок фильтра. Остальные параметры, такие как неравномерность в полосе пропускания и уровень подавлениия в полосе заграждения не задаются.
Аппроксимирующая функция нормированного ФНЧ Чебышева первого рода, , где – многочлен Чебышева первого рода порядка . Тогда квадрат АЧХ нормированного ФНЧ Чебышева первого рода можно записать:
На рисунке 4 показаны аппроксимирующая функция и квадрат АЧХ нормированного ФНЧ Чебышева первого рода порядка при (неравномерность АЧХ фильтра в полосе пропускания дБ).
Хорошо видно, что в полосе пропускания квадрат АЧХ фильтра Чебышева первого рода совершает равноволновые колебания, в отличии от фильтра Баттерворта. При этом скорость спада АЧХ фильтра Чебышева первого рода за пределами полосы пропускания, выше чем у фильтра Баттерворта.
Ранее при аппроксимации АЧХ многочленами Чебышева задавалась допустимая неравномерность АЧХ фильтров в полосе пропускания при помощи параметра . Однако можно также задать требуемый уровень подавления в полосе заграждения при помощи параметра . Тогда получим фильтры Чебышева второго рода или как их еще называют инверсные фильтры Чебышева. Аппроксимирующая функция в этом случае задается выражением , а квадрат АЧХ нормированного ФНЧ Чебышева второго рода представляется в виде:
Нормированный ФНЧ Чебышева первого рода на частоте рад/c «пропускает» сигнал, т.к. близко к единице (0 дБ). Однако, нормированный ФНЧ Чебышева второго рода на частоте рад/c «подавляет» сигнал, т.к. . Фильтры Чебышева второго рода целесообразно использовать для расчета режекторных (полосозаграждающих) фильтров с заданным коэффициентом подавления.
Можно заметить, что АЧХ фильтра Чебышева первого рода носит колебательный характер в полосе пропускания и максимально-гладкая в полосе заграждения, в то время как АЧХ фильтра Чебышева второго рода наоборот колеблется в полосе заграждения и максимально-гладкая в полосе пропускания. Однако есть еще один класс фильтров АЧХ которых носит колебательный характер как в полосе пропускания, так и в полосе подавления. Это эллиптические фильтры Кауэра.
Аппроксимирующая функция нормированного эллиптического ФНЧ представляет собой эллиптическую дробно-рациональную функцию , зависящую от параметра , рассмотренного выше. Квадрат модуля АЧХ фильтра Кауэра представляет собой:
Параметр (неравномерность АЧХ фильтра в полосе пропускания дБ), а параметр задает уровень подавления в полосе заграждения равный дБ. Обратите внимание, что квадрат аппроксимирующей функция эллиптического фильтра показан показан на двух графиках. На верхнем графике показан в масштабе от 0 до 400. Из верхнего графика видно, что имеет полюсы при рад/c, что приводит к пульсация квадрата АЧХ фильтра в полосе заграждения. На нижнем графике показаны колебания аппроксимирующей функции в полосе пропускания.
Фильтр Баттерворта обладает самой широкой переходной полосой среди всех фильтров, но у него максимально-гладкая АЧХ. Внесение в АЧХ фильтра Баттерворта колебаний приводит к фильтрам Чебышева, переходная полоса которых у́же чем у фильтра Баттерворта. Равноволновые колебания в полосе пропускания приводят к фильтрам Чебышева первого рода, а равноволновые колебания в полосе заграждения к фильтрам Чебышева второго рода. Внесение равноволновых колебаний как в полосу пропускания, так и в полосу заграждения АЧХ приводит к эллиптическому фильтру с минимальной переходной полосой.
Полученное ранее выражение (9) связывает параметры квадрата АЧХ с порядком фильтра . В данном параграфе мы решим уравнение (9) относительно для рассмотренных выше аппроксимаций квадрата АЧХ нормированных ФНЧ.
Порядок нормированного ФНЧ Баттерворта рассчитывается из уравнения:
Порядок эллиптического фильтра можно рассчитать из уравнения:
В таблице 1 приведены порядки нормированных ФНЧ Баттерворта, Чебышева и эллиптического для некоторых значения параметров квадрата АЧХ.
Из таблицы 1 видно, что сужение переходной полосы, когда приближается к и уменьшение неравномерности в полосе пропускания с одновременным ростом подавления в полосе заграждения, приводит к очень резкому росту требуемого порядка фильтра Баттерворта. При этом порядок фильтра Чебышева растет медленнее, однако и ему далеко до эллиптического фильтра, который обеспечивает минимальный порядок при заданном коридоре АЧХ.
Переход от фильтра Баттерворта к фильтру Чебышева позволяет сократить порядок фильтра более чем в 5 раз, а использование эллиптического фильтра более чем в 10 раз. В результате, вместо фильтра Баттерворта 118 порядка можно поставить эллиптический фильтр всего 8-го порядка без ухудшения характеристик фильтра. Но это потребует более точной настройки параметров емкостей и индуктивностей при реализации фильтра.
В данном разделе мы рассмотрели постановку задачи расчета аналогового нормированного ФНЧ и произвели анализ различных способов аппроксимации АЧХ фильтра: аппроксимация по Баттерворту, по Чебышеву и по Кауэру. Получили решения уравнения порядка фильтра при заданном коридоре АЧХ для всех перечисленных способов аппроксимации фильтра. Произведен сравнительный анализ порядоков фильтров Баттерворта, по Чебышева и по Кауэра (эллиптического) для некоторых коридоров АЧХ.
Показано, что при сужении коридора АЧХ (сужение переходной полосы, уменьшении неравномерностей в полосе пропускания и увеличении подавления в полосе заграждения) использование эллиптического фильтра приводит к наименьшему требуемому порядку фильтра.
Данные для построения рисунков данного раздела были просчитаны при использовании библиотеки DSPL-2.0
Ниже приведён исходный код программы расчета данных для построения рисунков данного раздела: