Перейти к содержанию

    

Определение параметров фильтра

Здравствуйте!

Помогите разобраться пожалуйста. Есть цифровой БИХ-фильтр 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;

Сама реализация фильтра есть, фильтр работает, но формулу расчета коэффициентов мне найти не удалось.

Как соответственно и информацию, что означают его параметры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Здравствуйте!

Помогите разобраться пожалуйста. Есть цифровой БИХ-фильтр 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-ого порядка получен через билинейное преобразование аналогового фильтра-прототипа общего вида:

 

?H(s)=\frac{s^2+2\xi_0\omega_0 s+\omega_0^2}{s^2+2\xi_1\omega_1 s+\omega_1^2}

 

т.е. через замену ?s=\frac{2}{T_{sam}}(\frac{1-z^{-1}}{1+z^{-1}}) и ?\omega_{0,1}=\frac{2}{T_{sam}}tg(\frac{\omega_{0,1}T_{sam}}{2})

 

Выводить не буду, там все тривиально, но больно много писанины...

 

Для режекторного фильтра необходимо выполнение условий: f0 = f1 = частоте подавления, ksi0 < ksi1, оба эти коэффициента влияют на уровень затухания и ширину полосы подавления, если ksi0=0, подавление максимальное.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ваш IIR 2-ого порядка получен через билинейное преобразование аналогового фильтра-прототипа общего вида:

 

?H(s)=\frac{s^2+2\xi_0\omega_0 s+\omega_0^2}{s^2+2\xi_1\omega_1 s+\omega_1^2}

 

т.е. через замену ?s=\frac{2}{T_{sam}}(\frac{1-z^{-1}}{1+z^{-1}}) и ?\omega_{0,1}=\frac{2}{T_{sam}}tg(\frac{\omega_{0,1}T_{sam}}{2})

 

Выводить не буду, там все тривиально, но больно много писанины...

 

Для режекторного фильтра необходимо выполнение условий: f0 = f1 = частоте подавления, ksi0 < ksi1, оба эти коэффициента влияют на уровень затухания и ширину полосы подавления, если ksi0=0, подавление максимальное.

Спасибо за объяснение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация