2020-04-18 08:09:38 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*! ****************************************************************************
|
|
|
|
|
\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
|
|
|
|
|
|
|
|
|
|
|
2020-05-07 10:13:34 +00:00
|
|
|
|
Пример использования функции:
|
|
|
|
|
|
|
|
|
|
\include fir_linphase_test.c
|
|
|
|
|
|
|
|
|
|
Программа расчитывает коэффициенты и АЧХ линейно-фазовых КИХ-фильтрова нижних,
|
|
|
|
|
верхних частот, полосовых и режекторных с применением различных весовых окон:
|
|
|
|
|
прямоугольное, Хемминга, Илэкмана и Блэкмана-Харриса. \n
|
|
|
|
|
Полученные АЧХ выводятся на график
|
|
|
|
|
|
|
|
|
|
\image html fir_linphase_test.png
|
|
|
|
|
|
2020-04-18 08:09:38 +00:00
|
|
|
|
|
|
|
|
|
\author
|
|
|
|
|
Бахурин Сергей
|
|
|
|
|
www.dsplib.org
|
|
|
|
|
***************************************************************************** */
|