kopia lustrzana https://github.com/Dsplib/libdspl-2.0
133 wiersze
6.7 KiB
Plaintext
133 wiersze
6.7 KiB
Plaintext
|
||
|
||
/*! ****************************************************************************
|
||
\ingroup FIR_FILTER_DESIGN_GROUP
|
||
\fn int DSPL_API fir_linphase(int ord, double w0, double w1, int filter_type,
|
||
int win_type, double win_param, double* h)
|
||
\brief
|
||
Расчет коэффициентов линейно-фазового КИХ-фильтра
|
||
методом оконного взвешивания.
|
||
|
||
Функция рассчитывает коэффициенты передаточной характеристики
|
||
\f[
|
||
H(z) = \sum_{n = 0}^{ord} h_n z^{-n}
|
||
\f]
|
||
цифрового линейно-фазового КИХ-фильтра фильтра.
|
||
|
||
\param[in] ord
|
||
Порядок фильтра (количество элементов задержки). \n
|
||
Количество коэффициентов фильтра равно `ord+1`. \n
|
||
\n
|
||
|
||
\param[in] w0
|
||
Нормированная частота среза ФНЧ или ФВЧ,
|
||
или левая частота среза для полосового и режекторного фильтра. \n
|
||
\n
|
||
|
||
\param[in] w1
|
||
Правая частота среза полосового и режекторного фильтра. \n
|
||
Данный параметр игнорируется для ФНЧ и ФВЧ. \n
|
||
Частота `w1` должна быть больше `w0`. \n
|
||
\n
|
||
|
||
\param[in] filter_type
|
||
Тип фильтра. \n
|
||
Данный параметр определяет тип фильтра
|
||
и может принимать одно из значений: \n
|
||
\verbatim
|
||
DSPL_FILTER_LPF - фильтр нижних частот;
|
||
DSPL_FILTER_HPF - фильтр верхних частот;
|
||
DSPL_FILTER_BPASS - полосовой фильтр;
|
||
DSPL_FILTER_BSTOP - режекторный фильтр.
|
||
\endverbatim
|
||
\n
|
||
\n
|
||
|
||
\param [in] win_type
|
||
Тип оконной функции. \n
|
||
Может принимать одно из следующих значений: \n
|
||
\verbatim
|
||
-------------------------------------------------------------------------
|
||
Значение win_type | Описание
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_BARTLETT | Непараметрическое окно Бартлетта
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_BARTLETT_HANN | Непараметрическое окно Бартлетта-Ханна
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_BLACKMAN | Непараметрическое окно Блэкмана
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_BLACKMAN_HARRIS | Непараметрическое окно Блэкмана-Харриса
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_BLACKMAN_NUTTALL | Непараметрическое окно Блэкмана-Натталла
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_CHEBY | Параметрическое окно Дольф-Чебышева.
|
||
| Параметр win_param задает уровень
|
||
| боковых лепестков в дБ.
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_COS | Непараметрическое косинус-окно
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_FLAT_TOP | Непараметрическое окно с максимально
|
||
| плоской вершиной
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_GAUSSIAN | Параметрическое окно Гаусса
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_HAMMING | Непараметрическое окно Хемминга
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_HANN | Непараметрическое окно Ханна
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_KAISER | Параметрическое окно Кайзера
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_LANCZOS | Непараметрическое окно Ланкзоса
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_NUTTALL | Непараметрическое окно Натталла
|
||
-----------------------------|-------------------------------------------
|
||
DSPL_WIN_RECT | Непараметрическое прямоугольное окно
|
||
-------------------------------------------------------------------------
|
||
\endverbatim
|
||
\n
|
||
\n
|
||
|
||
\param [in] win_param
|
||
Параметр окна. \n
|
||
Данный параметр применяется только для параметрических оконных функций. \n
|
||
Для непараметрических окон игнорируется. \n
|
||
\n
|
||
|
||
\param[out] h
|
||
Указатель на вектор коэффициентов линейно-фазового КИХ-фильтраю \f$H(z)\f$. \n
|
||
Размер вектора `[ord+1 x 1]`. \n
|
||
Память должна быть выделена. \n
|
||
\n
|
||
|
||
\note
|
||
Для соблюдения условия линейной ФЧХ используются
|
||
только симметричные окна. \n \n
|
||
Расчет режекторного линейно-фазового КИХ-фильтра
|
||
(если `filter_type = DSPL_FILTER_BSTOP`) производится только
|
||
для фильтров чётного порядка `ord`.
|
||
В случае нечетного порядка `ord` функция вернет код ошибки `ERROR_FILTER_ORD`.
|
||
\n
|
||
|
||
\return
|
||
`RES_OK`
|
||
Фильтр рассчитан успешно. \n
|
||
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
|
||
|
||
|
||
Пример использования функции:
|
||
|
||
\include fir_linphase_test.c
|
||
|
||
Программа расчитывает коэффициенты и АЧХ линейно-фазовых КИХ-фильтрова нижних,
|
||
верхних частот, полосовых и режекторных с применением различных весовых окон:
|
||
прямоугольное, Хемминга, Илэкмана и Блэкмана-Харриса. \n
|
||
Полученные АЧХ выводятся на график
|
||
|
||
\image html fir_linphase_test.png
|
||
|
||
|
||
\author
|
||
Бахурин Сергей
|
||
www.dsplib.org
|
||
***************************************************************************** */
|