Цитата(strap89 @ Sep 17 2018, 11:22)
Здравствуйте!
Помогите разобраться пожалуйста. Есть цифровой БИХ-фильтр 2-го порядка, режекторный.
Есть алгоритм расчета его коэффициентов. И есть пара коэффициентов, определяющих параметры фильтра (это мои предположения).
Не могли бы Вы подсказать мне, какой тип фильтра тут использован и что определяют его параметры. Сам алгоритм:
void makefiltr2coeff(filtr2& flt,double Tsam,double f0,double f1,double ksi0,double ksi1)
{
if(!f0||!f1||!Tsam||!ksi0||!ksi1)
return;
Tsam*=scaleTsam;
double om0=2.*M_PI*f0;
double om1=2.*M_PI*f1;
double tau0=.5/tan(Tsam*om0/2.);
double tau1=.5/tan(Tsam*om1/2.);
double d=1.+(4.*tau1*(tau1+ksi1));if(!d) return;
double b0=(1.+(4.*tau0*(tau0+ksi0)))/d;
double b1=2.*(1.-4.*tau0*tau0)/d;
double b2=(1.+(4.*tau0*(tau0-ksi0)))/d;
double a1=2.*(1.-4.*tau1*tau1)/d;
double a2=(1.+(4.*tau1*(tau1-ksi1)))/d;
a0=1;
Сама реализация фильтра есть, фильтр работает, но формулу расчета коэффициентов мне найти не удалось.
Как соответственно и информацию, что означают его параметры.
Ваш IIR 2-ого порядка получен через билинейное преобразование аналогового фильтра-прототипа общего вида:
т.е. через замену
и
Выводить не буду, там все тривиально, но больно много писанины...
Для режекторного фильтра необходимо выполнение условий: f0 = f1 = частоте подавления, ksi0 < ksi1, оба эти коэффициента влияют на уровень затухания и ширину полосы подавления, если ksi0=0, подавление максимальное.