kopia lustrzana https://github.com/Dsplib/libdspl-2.0
90 wiersze
4.3 KiB
Plaintext
90 wiersze
4.3 KiB
Plaintext
|
||
|
||
/*! ****************************************************************************
|
||
\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 \n
|
||
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
|
||
|
||
|
||
<h3>Пример использования функции `bilinear`</h3>
|
||
|
||
\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
|
||
***************************************************************************** */
|
||
|