kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added documentation and example for filter_iir function
rodzic
3a5395f1ac
commit
47383385b6
|
@ -19,7 +19,7 @@ indent_mode=2
|
|||
|
||||
[project]
|
||||
name=libdspl
|
||||
base_path=F:\\dsplib.org\\libdspl-2.0
|
||||
base_path=./
|
||||
description=
|
||||
file_patterns=
|
||||
|
||||
|
@ -28,34 +28,12 @@ long_line_behaviour=1
|
|||
long_line_column=72
|
||||
|
||||
[files]
|
||||
current_page=0
|
||||
FILE_NAME_0=4479;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Carray.c;0;4
|
||||
FILE_NAME_1=4251;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Ccheby.c;0;4
|
||||
FILE_NAME_2=14822;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Ccomplex.c;0;4
|
||||
FILE_NAME_3=204;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cconv.c;0;4
|
||||
FILE_NAME_4=6950;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cdft.c;0;4
|
||||
FILE_NAME_5=0;C++;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cdspl_internal.h;0;4
|
||||
FILE_NAME_6=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cellipj.c;0;4
|
||||
FILE_NAME_7=2079;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfft.c;0;4
|
||||
FILE_NAME_8=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfft_subkernel.c;0;4
|
||||
FILE_NAME_9=766;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfillarray.c;0;4
|
||||
FILE_NAME_10=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfilter_an.c;0;4
|
||||
FILE_NAME_11=1286;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfilter_ap.c;0;4
|
||||
FILE_NAME_12=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfilter_fir.c;0;4
|
||||
FILE_NAME_13=5715;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfilter_ft.c;0;4
|
||||
FILE_NAME_14=2837;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfilter_iir.c;0;4
|
||||
FILE_NAME_15=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cfourier_series.c;0;4
|
||||
FILE_NAME_16=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cgoertzel.c;0;4
|
||||
FILE_NAME_17=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cinout.c;0;4
|
||||
FILE_NAME_18=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cmath.c;0;4
|
||||
FILE_NAME_19=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cmatrix.c;0;4
|
||||
FILE_NAME_20=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cpolyval.c;0;4
|
||||
FILE_NAME_21=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Crandgen.c;0;4
|
||||
FILE_NAME_22=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cresampling.c;0;4
|
||||
FILE_NAME_23=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Csignals.c;0;4
|
||||
FILE_NAME_24=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cstatistic.c;0;4
|
||||
FILE_NAME_25=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Ctrapint.c;0;4
|
||||
FILE_NAME_26=0;C;0;EUTF-8;1;1;0;F%3A%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cwin.c;0;4
|
||||
current_page=4
|
||||
FILE_NAME_0=15373;C;0;EUTF-8;0;1;0;%5Cdsplib.org%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Ccomplex.c;0;2
|
||||
FILE_NAME_1=218;C;0;EUTF-8;0;1;0;%5Cdsplib.org%5Cdsplib.org%5Clibdspl-2.0%5Cexamples%5Csrc%5Ciir_test.c;0;2
|
||||
FILE_NAME_2=0;C;0;EUTF-8;0;1;0;%5Cdsplib.org%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cconv.c;0;2
|
||||
FILE_NAME_3=0;C;0;EUTF-8;0;1;0;%5Cdsplib.org%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Csrc%5Cdft.c;0;2
|
||||
FILE_NAME_4=0;None;0;EUTF-8;0;1;0;%5Cdsplib.org%5Cdsplib.org%5Clibdspl-2.0%5Cdspl%5Cdox%5Cru%5Cdft.dox;0;2
|
||||
|
||||
[build-menu]
|
||||
NF_00_LB=_Собрать
|
||||
|
@ -67,3 +45,6 @@ NF_01_WD=%p
|
|||
NF_02_LB=Очистить
|
||||
NF_02_CM=mingw32-make clean
|
||||
NF_02_WD=%p
|
||||
EX_00_LB=_Execute
|
||||
EX_00_CM=%e.exe
|
||||
EX_00_WD=%p/examples/bin
|
||||
|
|
|
@ -325,7 +325,7 @@ c[ 18] = -37.00 +484.00j d[ 18] = -37.00 +484.00j
|
|||
Функция рассчитывает выход фильтра заданного выражением
|
||||
\f[
|
||||
H(z) = \frac{\sum_{n = 0}^{N} b_n z^{-n}}
|
||||
{1+{\frac{1}{a_0}}\sum_{m = 1}^{M} a_m z^{-n}},
|
||||
{1+{\frac{1}{a_0}}\sum_{m = 1}^{M} a_m z^{-m}},
|
||||
\f]
|
||||
где \f$a_0\f$ не может быть 0, \f$N=M=\f$`ord`.
|
||||
|
||||
|
@ -357,6 +357,28 @@ c[ 18] = -37.00 +484.00j d[ 18] = -37.00 +484.00j
|
|||
`RES_OK` Если фильтрация произведена успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
|
||||
Пример использования функции `filter_iir`
|
||||
|
||||
\include filter_iir_test.c
|
||||
|
||||
На входе цифрового фильтра задан сигнал
|
||||
\f$s(t) = \sin(2\pi \cdot 0.05 t) + n(t)\f$, где \f$n(t)\f$ белый гауссовский
|
||||
шум, с нулевым средним и единичной дисперсией. \n
|
||||
Фильтр представляет собой эллиптический ФНЧ 6 порядка.
|
||||
Входной сигнал фильтруется данным фильтром, и результат сохраняется в файлы:
|
||||
|
||||
\verbatim
|
||||
dat/s.txt - исходный зашумленный сигнал
|
||||
dat/sf.txt - сигнал на выходе фильтра.
|
||||
\endverbatim
|
||||
|
||||
По полученным данным производится построение графиков:
|
||||
|
||||
\image html filter_iir_test.png
|
||||
|
||||
Скрипт GNUPLOT для построения графиков из текстовых файлов:
|
||||
\include filter_iir.plt
|
||||
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@
|
|||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
@ -53,38 +52,37 @@
|
|||
\f$ u = \textrm{cd}^{-1}(w, k)\f$ комплексного аргумента
|
||||
|
||||
Функция рассчитывает занчения значения обратной эллиптической функции
|
||||
\f$ u = \textrm{cd}^{-1}(w, k)\f$ для комплексного вектора `w`.<BR>
|
||||
\f$ u = \textrm{cd}^{-1}(w, k)\f$ для комплексного вектора `w`. \n
|
||||
|
||||
Для расчета используется итерационный алгоритм на основе преобразования
|
||||
Ландена.<BR>
|
||||
Ландена. \n
|
||||
|
||||
|
||||
\param[in] w Указатель на массив вектора переменной \f$ w \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[in] w Указатель на массив вектора переменной \f$ w \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
\param[in] n Размер вектора `w`. <BR><BR>
|
||||
\param[in] n Размер вектора `w`. \n \n
|
||||
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$. \n
|
||||
Эллиптический модуль -- вещественный параметр,
|
||||
принимающий значения от 0 до 1. <BR><BR>
|
||||
принимающий значения от 0 до 1. \n \n
|
||||
|
||||
|
||||
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||
функции \f$ u = \textrm{cd}^{-1}(w, k)\f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||
функции \f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
@ -100,38 +98,37 @@
|
|||
\f$ u = \textrm{sn}^{-1}(w, k)\f$ вещественного аргумента
|
||||
|
||||
Функция рассчитывает занчения значения обратной эллиптической функции
|
||||
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для вещественного вектора `w`.<BR>
|
||||
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для вещественного вектора `w`. \n
|
||||
|
||||
Для расчета используется итерационный алгоритм на основе преобразования
|
||||
Ландена.<BR>
|
||||
Ландена. \n
|
||||
|
||||
|
||||
\param[in] w Указатель на массив вектора переменной \f$ w \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[in] w Указатель на массив вектора переменной \f$ w \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
\param[in] n Размер вектора `w`. <BR><BR>
|
||||
\param[in] n Размер вектора `w`. \n \n
|
||||
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$. \n
|
||||
Эллиптический модуль -- вещественный параметр,
|
||||
принимающий значения от 0 до 1. <BR><BR>
|
||||
принимающий значения от 0 до 1. \n \n
|
||||
|
||||
|
||||
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
@ -147,38 +144,37 @@
|
|||
\f$ u = \textrm{sn}^{-1}(w, k)\f$ комплексного аргумента
|
||||
|
||||
Функция рассчитывает занчения значения обратной эллиптической функции
|
||||
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для комплексного вектора `w`.<BR>
|
||||
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для комплексного вектора `w`. \n
|
||||
|
||||
Для расчета используется итерационный алгоритм на основе преобразования
|
||||
Ландена.<BR>
|
||||
Ландена. \n
|
||||
|
||||
|
||||
\param[in] w Указатель на массив вектора переменной \f$ w \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[in] w Указатель на массив вектора переменной \f$ w \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
\param[in] n Размер вектора `w`. <BR><BR>
|
||||
\param[in] n Размер вектора `w`. \n \n
|
||||
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$. \n
|
||||
Эллиптический модуль -- вещественный параметр,
|
||||
принимающий значения от 0 до 1. <BR><BR>
|
||||
принимающий значения от 0 до 1. \n \n
|
||||
|
||||
|
||||
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] u Указатель на вектор значений обратной эллиптической
|
||||
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
@ -195,38 +191,37 @@
|
|||
|
||||
Функция рассчитывает занчения значения эллиптической функции
|
||||
\f$ y = \textrm{cd}(u K(k), k)\f$ для вещественного вектора `u` и
|
||||
эллиптического модуля `k`.<BR>
|
||||
эллиптического модуля `k`. \n
|
||||
|
||||
Для расчета используется итерационный алгоритм на основе преобразования
|
||||
Ландена.<BR>
|
||||
Ландена. \n
|
||||
|
||||
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
\param[in] n Размер вектора `u`. <BR><BR>
|
||||
\param[in] n Размер вектора `u`. \n \n
|
||||
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$. \n
|
||||
Эллиптический модуль -- вещественный параметр,
|
||||
принимающий значения от 0 до 1. <BR><BR>
|
||||
принимающий значения от 0 до 1. \n \n
|
||||
|
||||
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{cd}(u K(k), k)\f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{cd}(u K(k), k)\f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
@ -243,38 +238,37 @@
|
|||
|
||||
Функция рассчитывает занчения значения эллиптической функции
|
||||
\f$ y = \textrm{cd}(u K(k), k)\f$ для комплексного вектора `u` и
|
||||
эллиптического модуля `k`.<BR>
|
||||
эллиптического модуля `k`. \n
|
||||
|
||||
Для расчета используется итерационный алгоритм на основе преобразования
|
||||
Ландена.<BR>
|
||||
Ландена. \n
|
||||
|
||||
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
\param[in] n Размер вектора `u`. <BR><BR>
|
||||
\param[in] n Размер вектора `u`. \n \n
|
||||
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$. \n
|
||||
Эллиптический модуль -- вещественный параметр,
|
||||
принимающий значения от 0 до 1. <BR><BR>
|
||||
принимающий значения от 0 до 1. \n \n
|
||||
|
||||
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{cd}(u K(k), k)\f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{cd}(u K(k), k)\f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
@ -310,24 +304,24 @@ k_i =
|
|||
эллиптических функций.
|
||||
|
||||
|
||||
\param[in] k Эллиптический модуль \f$ k \f$.<BR>
|
||||
\param[in] k Эллиптический модуль \f$ k \f$. \n
|
||||
|
||||
|
||||
\param[in] n Размер вектора `y` соответсвующих
|
||||
коэффициентам \f$ k_i \f$. <BR><BR>
|
||||
коэффициентам \f$ k_i \f$. \n \n
|
||||
|
||||
|
||||
|
||||
\param[out] y Указатель на вектор значений
|
||||
коэффициентов \f$ k_i \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] y Указатель на вектор значений
|
||||
коэффициентов \f$ k_i \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
Пример использования функции `ellip_landen`:
|
||||
|
||||
|
@ -352,7 +346,7 @@ k_i =
|
|||
12 0.000e+00
|
||||
13 0.000e+00
|
||||
\endverbatim
|
||||
|
||||
|
||||
\note Ряд полного эллиптического интеграла сходится при значениях
|
||||
эллиптического модуля \f$ k<1 \f$. При этом сходимость ряда достаточно
|
||||
быстрая и для практический приложений достаточно от 10 до 20 значений
|
||||
|
@ -362,8 +356,7 @@ k_i =
|
|||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
***************************************************************************** */
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
|
@ -378,33 +371,33 @@ k_i =
|
|||
|
||||
Функция рассчитывает занчения значения эллиптической функции
|
||||
\f$ y = \textrm{sn}(u K(k), k)\f$ для вещественного вектора `u` и
|
||||
эллиптического модуля `k`.<BR>
|
||||
эллиптического модуля `k`. \n
|
||||
|
||||
Для расчета используется итерационный алгоритм на основе преобразования
|
||||
Ландена.<BR>
|
||||
Ландена. \n
|
||||
|
||||
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
\param[in] n Размер вектора `u`. <BR><BR>
|
||||
\param[in] n Размер вектора `u`. \n \n
|
||||
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$. \n
|
||||
Эллиптический модуль -- вещественный параметр,
|
||||
принимающий значения от 0 до 1. <BR><BR>
|
||||
принимающий значения от 0 до 1. \n \n
|
||||
|
||||
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{sn}(u K(k), k)\f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{sn}(u K(k), k)\f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
|
@ -426,29 +419,29 @@ k_i =
|
|||
|
||||
Функция рассчитывает занчения значения эллиптической функции
|
||||
\f$ y = \textrm{sn}(u K(k), k)\f$ для комплексного вектора `u` и
|
||||
эллиптического модуля `k`.<BR>
|
||||
эллиптического модуля `k`. \n
|
||||
|
||||
Для расчета используется итерационный алгоритм на основе преобразования
|
||||
Ландена.<BR>
|
||||
Ландена. \n
|
||||
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
|
||||
\param[in] n Размер вектора `u`. <BR><BR>
|
||||
\param[in] n Размер вектора `u`. \n \n
|
||||
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$.<BR>
|
||||
\param[in] k Значение эллиптического модуля \f$ k \f$. \n
|
||||
Эллиптический модуль -- вещественный параметр,
|
||||
принимающий значения от 0 до 1. <BR><BR>
|
||||
принимающий значения от 0 до 1. \n \n
|
||||
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{sn}(u K(k), k)\f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
\param[out] y Указатель на вектор значений эллиптической
|
||||
функции \f$ y = \textrm{sn}(u K(k), k)\f$. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена. \n \n
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
`RES_OK` Расчет произведен успешно. \n
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
\ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
|
|
|
@ -598,13 +598,20 @@ int DSPL_API sqrt_cmplx(complex_t* x, int n, complex_t *y)
|
|||
for(k = 0; k < n; k++)
|
||||
{
|
||||
r = ABS(x[k]);
|
||||
RE(t) = RE(x[k]) + r;
|
||||
IM(t) = IM(x[k]);
|
||||
zr = 1.0 / ABS(t);
|
||||
r = sqrt(r);
|
||||
RE(y[k]) = RE(t) * zr * r;
|
||||
IM(y[k]) = IM(t) * zr * r;
|
||||
|
||||
if(r == 0.0)
|
||||
{
|
||||
RE(y[k]) = 0.0;
|
||||
IM(y[k]) = 0.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
RE(t) = RE(x[k]) + r;
|
||||
IM(t) = IM(x[k]);
|
||||
zr = 1.0 / ABS(t);
|
||||
r = sqrt(r);
|
||||
RE(y[k]) = RE(t) * zr * r;
|
||||
IM(y[k]) = IM(t) * zr * r;
|
||||
}
|
||||
}
|
||||
return RES_OK;
|
||||
}
|
||||
|
|
|
@ -546,9 +546,32 @@ here \f$a_0\f$ cannot be equals zeros, \f$N=M=\f$`ord`.
|
|||
Vector size is `[n x 1]`. /n
|
||||
Memory must be allocated. /n /n
|
||||
\return
|
||||
`RES_OK` if filter output is calculted successfully. /n
|
||||
`RES_OK` if filter output is calculated successfully. /n
|
||||
Else \ref ERROR_CODE_GROUP "code error": /n
|
||||
|
||||
Example:
|
||||
|
||||
\include filter_iir_test.c
|
||||
|
||||
Input signal is
|
||||
\f$s(t) = \sin(2\pi \cdot 0.05 t) + n(t)\f$, here \f$n(t)\f$ white Gaussian
|
||||
noise with zero mean value and unit standard deviation. \n
|
||||
|
||||
Input signal is filtered by elliptic LPF order 6 and output signal and data
|
||||
saves in the txt-files
|
||||
|
||||
\verbatim
|
||||
dat/s.txt - input signal + noise
|
||||
dat/sf.txt - filter output.
|
||||
\endverbatim
|
||||
|
||||
Plots:
|
||||
|
||||
\image html filter_iir_test.png
|
||||
|
||||
GNUPLOT script for make plots is:
|
||||
\include filter_iir.plt
|
||||
|
||||
\author Sergey Bakhurin www.dsplib.org
|
||||
*******************************************************************************/
|
||||
int DSPL_API filter_iir(double* b, double* a, int ord,
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
unset key
|
||||
set grid
|
||||
set xlabel "n"
|
||||
|
||||
set terminal pngcairo size 820, 340 enhanced font 'Verdana,8'
|
||||
set output 'img/filter_iir_test.png'
|
||||
set ylabel "s(n)"
|
||||
set yrange [-3:3]
|
||||
|
||||
set multiplot layout 2,1 rowsfirst
|
||||
|
||||
plot 'dat/s.txt' with lines
|
||||
|
||||
set ylabel "s_f(n)"
|
||||
plot 'dat/sf.txt' with lines
|
||||
|
||||
|
||||
unset multiplot
|
|
@ -14,19 +14,16 @@ plot 'dat/iir_butter_hpf.txt' with lines
|
|||
plot 'dat/iir_butter_bpf.txt' with lines
|
||||
plot 'dat/iir_butter_bsf.txt' with lines
|
||||
|
||||
|
||||
plot 'dat/iir_cheby1_lpf.txt' with lines
|
||||
plot 'dat/iir_cheby1_hpf.txt' with lines
|
||||
plot 'dat/iir_cheby1_bpf.txt' with lines
|
||||
plot 'dat/iir_cheby1_bsf.txt' with lines
|
||||
|
||||
|
||||
plot 'dat/iir_cheby2_lpf.txt' with lines
|
||||
plot 'dat/iir_cheby2_hpf.txt' with lines
|
||||
plot 'dat/iir_cheby2_bpf.txt' with lines
|
||||
plot 'dat/iir_cheby2_bsf.txt' with lines
|
||||
|
||||
|
||||
plot 'dat/iir_ellip_lpf.txt' with lines
|
||||
plot 'dat/iir_ellip_hpf.txt' with lines
|
||||
plot 'dat/iir_ellip_bpf.txt' with lines
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
#define ORD 6
|
||||
#define N 1000
|
||||
int main()
|
||||
{
|
||||
void* handle; // DSPL handle
|
||||
handle = dspl_load(); // Load DSPL function
|
||||
double b[ORD+1], a[ORD+1];
|
||||
double t[N], s[N], n[N], sf[N];
|
||||
random_t rnd;
|
||||
int k;
|
||||
|
||||
random_init(&rnd); // random generator init
|
||||
linspace(0, N, N, DSPL_PERIODIC, t); // fill t vector
|
||||
randn(n, N, 0, 1.0, &rnd); // generate noise
|
||||
|
||||
// input signal s = sin(2*pi*t) + n(t)
|
||||
for(k = 0; k < N; k++)
|
||||
s[k] = sin(M_2PI*0.02*t[k]) + n[k];
|
||||
|
||||
// iir filter calculation
|
||||
iir(1.0, 70.0, ORD, 0.06, 0.0, DSPL_FILTER_ELLIP | DSPL_FILTER_LPF, b, a);
|
||||
|
||||
// input signal filtration
|
||||
filter_iir(b, a, ORD, s, N, sf);
|
||||
|
||||
// save input signal and filter output to the txt-files
|
||||
writetxt(t,s, N, "dat/s.txt");
|
||||
writetxt(t,sf,N, "dat/sf.txt");
|
||||
|
||||
dspl_free(handle); // free dspl handle
|
||||
|
||||
// run GNUPLOT script
|
||||
return system("gnuplot -p gnuplot/filter_iir.plt");
|
||||
}
|
|
@ -13,7 +13,7 @@
|
|||
#define RP 1.0
|
||||
|
||||
// размер векторов частотной характеристики фильтра
|
||||
#define N 2048
|
||||
#define N 1024
|
||||
|
||||
void freq_resp_write2txt(double* b, double* a, int ord, int n, char* fn)
|
||||
{
|
||||
|
@ -116,13 +116,11 @@ int main()
|
|||
freq_resp_write2txt(b, a, BSF_ORD, N, "dat/iir_ellip_bsf.txt");
|
||||
|
||||
|
||||
|
||||
|
||||
dspl_free(handle); // free dspl handle
|
||||
|
||||
// выполнить скрипт GNUPLOT для построения графиков
|
||||
// по рассчитанным данным
|
||||
return system("gnuplot -p gnuplot/iir_test.plt");;
|
||||
return system("gnuplot -p gnuplot/iir_test.plt");
|
||||
}
|
||||
|
||||
|
Ładowanie…
Reference in New Issue