

/*! ****************************************************************************
\ingroup IIR_FILTER_DESIGN_GROUP
\fn int bilinear(double* bs, double* as, int ord, double* bz, double* az)

\brief
Билинейное преобразование передаточной характеристики аналогового 
фильтра \f$H(s)\f$, в передаточную характеристику цифрового фильтра \f$H(z)\f$.

Функция рассчитывает коэффициенты передаточной характеристики \f$H(z)\f$
цифрового фильтра путем дробно-рациональной подстановки вида 

\f[
s \leftarrow \frac{1 - z^{-1}}{1 - z^{-1}}.
\f]

Порядок цифрового фильтра при этом остается равным порядку аналогового фильтра,
а ось частот \f$\Omega\f$ аналогового фильтра связана c осью частот 
\f$\omega\f$ цифрового фильтра соотношением:

\f[
\Omega = \tan(\omega / 2).
\f]



\param[in]  bs
Указатель на вектор коэффициентов числителя передаточной функции \f$H(s)\f$ 
исходного аналогового фильтра. \n
Размер вектора `[ord+1 x 1]`. \n
Память должна быть выделена. \n 
\n

\param[in]  as
Указатель на вектор коэффициентов знаменателя передаточной функции \f$H(s)\f$ 
исходного аналогового фильтра. \n
Размер вектора `[ord+1 x 1]`. \n
Память должна быть выделена. \n 
\n

\param[in]  ord
Порядок фильтра. \n
Количество коэффициентов числителя и знаменателя передаточных функций 
\f$H(s)\f$ и \f$H(z)\f$ аналогового и цифрового фильтров равно `ord+1`. \n 
\n

\param[out]  bz
Указатель на вектор коэффициентов числителя передаточной функции \f$H(z)\f$ 
полученного цифрового фильтра. \n
Размер вектора `[ord+1 x 1]`. \n
Память должна быть выделена. \n 
\n

\param[out]  az
Указатель на вектор коэффициентов знаменателя передаточной функции \f$H(z)\f$ 
полученного цифрового фильтра. \n
Размер вектора `[ord+1 x 1]`. \n
Память должна быть выделена. \n 
\n

\return
`RES_OK` --- фильтр рассчитан успешно. \n 
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n


Пример использования функции `bilinear`:

\include bilinear_test.c

Данная программа производит расчет передаточной характеристики аналогового 
фильтра Чебышева первого рода, с частотой среза равной 1 рад/с, и производит 
билинейное преобразование в цифровой, с частотой среза равной 0.5.

Результат работы программы:

\verbatim
bz[0] =   0.246    az[0] =   4.425
bz[1] =   0.983    az[1] =  -3.318
bz[2] =   1.474    az[2] =   4.746
bz[3] =   0.983    az[3] =  -2.477
bz[4] =   0.246    az[4] =   1.034
err = 0
\endverbatim

Кроме этого производится расчет АЧХ полученного цифрового фильтра и строится
график АЧХ пакетом GNUPLOT

\image html bilinear.png

\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */







/*! ****************************************************************************
\ingroup IIR_FILTER_DESIGN_GROUP
\fn int iir(double rp, double rs, int ord,  double  w0, double  w1, 
            int type, double* b,  double* a)
\brief
Функция расчета коэффициентов передаточной характеристики \f$H(z)\f$
цифрового фильтра БИХ.

Функция рассчитывает коэффициенты передаточной характеристики \f$H(z)\f$
цифрового фильтра, которые могут быть использованы в функции \ref filter_iir 

\param[in]  rp
Уровень неравномерности квадрата АЧХ в полосе пропускания фильтра (дБ). \n
Размер вектора `[ord+1 x 1]`. \n 
\n


\param[in]  rs
Уровень подавления в полосе заграждения фильтра (дБ).\n 
\n

\param[in]  ord
Порядок фильтра. \n
Количество коэффициентов числителя и знаменателя передаточной 
функции \f$H(z)\f$ цифрового фильтров равно `ord+1`. \n
Для полосовых и режекторных фильтров параметр `ord` должен быть чётным. \n 
\n

\param[in]  w0
Нормированная частота среза ФНЧ или ФВЧ, или левая частота среза для 
полосового и режекторного фильтра.\n 
\n


\param[in]  w1
Правая частота среза полосового и режекторного фильтра. \n
Данный параметр игнорируется для ФНЧ и ФВЧ. \n 
\n

\param[in]  type
Тип фильтра. \n
Данный параметр определяет тип фильтра и образуется 
набором флагов типа фильтра: \n
\verbatim
DSPL_FILTER_LPF   - фильтр нижних частот;
DSPL_FILTER_HPF   - фильтр верхних частот;
DSPL_FILTER_BPASS - полосовой фильтр;
DSPL_FILTER_BSTOP - режекторный фильтр,
\endverbatim
а также флагов типа аппроксимации АЧХ фильтра:
\verbatim
DSPL_FILTER_BUTTER - фильтр Баттерворта;
DSPL_FILTER_CHEBY1 - фильтр Чебышева первого рода;
DSPL_FILTER_CHEBY2 - фильтр Чебышева второго рода;
DSPL_FILTER_ELLIP  - эллиптический фильтр.
\endverbatim
\n 
\n

\param[out]  b
Указатель на вектор коэффициентов 
числителя передаточной функции \f$H(z)\f$. \n 
Размер вектора  `ord+1`. \n
Память должна быть выделена. \n 
\n

\param[out]  a
Указатель на вектор коэффициентов знаменателя передаточной 
функции \f$H(z)\f$. \n 
Размер вектора  `ord+1`. \n
Память должна быть выделена. \n 
\n

\return
`RES_OK` --- Фильтр рассчитан успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n

Пример использования функции:

\include iir_test.c

Данная программа производит расчет коэффициентов фильтров 
при различном сочетании флагов параметра `type`.

Кроме этого производится расчет АЧХ полученных цифровых фильтров и выводится на 
график АЧХ пакетом GNUPLOT

\image html iir_test.png

\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */