diff --git a/dspl.project.win.geany b/dspl.project.win.geany
index 90b05e2..f6e5565 100644
--- a/dspl.project.win.geany
+++ b/dspl.project.win.geany
@@ -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
diff --git a/dspl/dox/ru/conv.dox b/dspl/dox/ru/conv.dox
index f99c926..5f90052 100644
--- a/dspl/dox/ru/conv.dox
+++ b/dspl/dox/ru/conv.dox
@@ -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
***************************************************************************** */
diff --git a/dspl/dox/ru/ellipj.dox b/dspl/dox/ru/ellipj.dox
index bdc352f..2ed2de7 100644
--- a/dspl/dox/ru/ellipj.dox
+++ b/dspl/dox/ru/ellipj.dox
@@ -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`.
+\f$ u = \textrm{cd}^{-1}(w, k)\f$ для комплексного вектора `w`. \n
Для расчета используется итерационный алгоритм на основе преобразования
-Ландена.
+Ландена. \n
-\param[in] w Указатель на массив вектора переменной \f$ w \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[in] w Указатель на массив вектора переменной \f$ w \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
-\param[in] n Размер вектора `w`.
+\param[in] n Размер вектора `w`. \n \n
-\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] k Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
- принимающий значения от 0 до 1.
+ принимающий значения от 0 до 1. \n \n
-\param[out] u Указатель на вектор значений обратной эллиптической
- функции \f$ u = \textrm{cd}^{-1}(w, k)\f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] u Указатель на вектор значений обратной эллиптической
+ функции \f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \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`.
+\f$ u = \textrm{sn}^{-1}(w, k)\f$ для вещественного вектора `w`. \n
Для расчета используется итерационный алгоритм на основе преобразования
-Ландена.
+Ландена. \n
-\param[in] w Указатель на массив вектора переменной \f$ w \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[in] w Указатель на массив вектора переменной \f$ w \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
-\param[in] n Размер вектора `w`.
+\param[in] n Размер вектора `w`. \n \n
-\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] k Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
- принимающий значения от 0 до 1.
+ принимающий значения от 0 до 1. \n \n
-\param[out] u Указатель на вектор значений обратной эллиптической
- функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] u Указатель на вектор значений обратной эллиптической
+ функции \f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \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`.
+\f$ u = \textrm{sn}^{-1}(w, k)\f$ для комплексного вектора `w`. \n
Для расчета используется итерационный алгоритм на основе преобразования
-Ландена.
+Ландена. \n
-\param[in] w Указатель на массив вектора переменной \f$ w \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[in] w Указатель на массив вектора переменной \f$ w \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
-\param[in] n Размер вектора `w`.
+\param[in] n Размер вектора `w`. \n \n
-\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] k Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
- принимающий значения от 0 до 1.
+ принимающий значения от 0 до 1. \n \n
-\param[out] u Указатель на вектор значений обратной эллиптической
- функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] u Указатель на вектор значений обратной эллиптической
+ функции \f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \ref ERROR_CODE_GROUP "код ошибки". \n
\author
Бахурин Сергей
www.dsplib.org
-
***************************************************************************** */
@@ -195,38 +191,37 @@
Функция рассчитывает занчения значения эллиптической функции
\f$ y = \textrm{cd}(u K(k), k)\f$ для вещественного вектора `u` и
-эллиптического модуля `k`.
+эллиптического модуля `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
-Ландена.
+Ландена. \n
-\param[in] u Указатель на массив вектора переменной \f$ u \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
-\param[in] n Размер вектора `u`.
+\param[in] n Размер вектора `u`. \n \n
-\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] k Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
- принимающий значения от 0 до 1.
+ принимающий значения от 0 до 1. \n \n
-\param[out] y Указатель на вектор значений эллиптической
- функции \f$ y = \textrm{cd}(u K(k), k)\f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] y Указатель на вектор значений эллиптической
+ функции \f$ y = \textrm{cd}(u K(k), k)\f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \ref ERROR_CODE_GROUP "код ошибки". \n
\author
Бахурин Сергей
www.dsplib.org
-
***************************************************************************** */
@@ -243,38 +238,37 @@
Функция рассчитывает занчения значения эллиптической функции
\f$ y = \textrm{cd}(u K(k), k)\f$ для комплексного вектора `u` и
-эллиптического модуля `k`.
+эллиптического модуля `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
-Ландена.
+Ландена. \n
-\param[in] u Указатель на массив вектора переменной \f$ u \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
-\param[in] n Размер вектора `u`.
+\param[in] n Размер вектора `u`. \n \n
-\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] k Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
- принимающий значения от 0 до 1.
+ принимающий значения от 0 до 1. \n \n
-\param[out] y Указатель на вектор значений эллиптической
- функции \f$ y = \textrm{cd}(u K(k), k)\f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] y Указатель на вектор значений эллиптической
+ функции \f$ y = \textrm{cd}(u K(k), k)\f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \ref ERROR_CODE_GROUP "код ошибки". \n
\author
Бахурин Сергей
www.dsplib.org
-
***************************************************************************** */
@@ -310,24 +304,24 @@ k_i =
эллиптических функций.
-\param[in] k Эллиптический модуль \f$ k \f$.
+\param[in] k Эллиптический модуль \f$ k \f$. \n
\param[in] n Размер вектора `y` соответсвующих
- коэффициентам \f$ k_i \f$.
+ коэффициентам \f$ k_i \f$. \n \n
-\param[out] y Указатель на вектор значений
- коэффициентов \f$ k_i \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] y Указатель на вектор значений
+ коэффициентов \f$ k_i \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \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`.
+эллиптического модуля `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
-Ландена.
+Ландена. \n
-\param[in] u Указатель на массив вектора переменной \f$ u \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
-\param[in] n Размер вектора `u`.
+\param[in] n Размер вектора `u`. \n \n
-\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] k Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
- принимающий значения от 0 до 1.
+ принимающий значения от 0 до 1. \n \n
-\param[out] y Указатель на вектор значений эллиптической
- функции \f$ y = \textrm{sn}(u K(k), k)\f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] y Указатель на вектор значений эллиптической
+ функции \f$ y = \textrm{sn}(u K(k), k)\f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \ref ERROR_CODE_GROUP "код ошибки". \n
\author
Бахурин Сергей
@@ -426,29 +419,29 @@ k_i =
Функция рассчитывает занчения значения эллиптической функции
\f$ y = \textrm{sn}(u K(k), k)\f$ для комплексного вектора `u` и
-эллиптического модуля `k`.
+эллиптического модуля `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
-Ландена.
+Ландена. \n
-\param[in] u Указатель на массив вектора переменной \f$ u \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[in] u Указатель на массив вектора переменной \f$ u \f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
-\param[in] n Размер вектора `u`.
+\param[in] n Размер вектора `u`. \n \n
-\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] k Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
- принимающий значения от 0 до 1.
+ принимающий значения от 0 до 1. \n \n
-\param[out] y Указатель на вектор значений эллиптической
- функции \f$ y = \textrm{sn}(u K(k), k)\f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.
+\param[out] y Указатель на вектор значений эллиптической
+ функции \f$ y = \textrm{sn}(u K(k), k)\f$. \n
+ Размер вектора `[n x 1]`. \n
+ Память должна быть выделена. \n \n
\return
- `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно. \n
В противном случае
- \ref ERROR_CODE_GROUP "код ошибки".
+ \ref ERROR_CODE_GROUP "код ошибки". \n
\author
Бахурин Сергей
diff --git a/dspl/src/complex.c b/dspl/src/complex.c
index 221e31d..5bb8133 100644
--- a/dspl/src/complex.c
+++ b/dspl/src/complex.c
@@ -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;
}
diff --git a/dspl/src/conv.c b/dspl/src/conv.c
index d224574..dd567b6 100644
--- a/dspl/src/conv.c
+++ b/dspl/src/conv.c
@@ -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,
diff --git a/examples/bin/gnuplot/filter_iir.plt b/examples/bin/gnuplot/filter_iir.plt
new file mode 100644
index 0000000..06f6810
--- /dev/null
+++ b/examples/bin/gnuplot/filter_iir.plt
@@ -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
\ No newline at end of file
diff --git a/examples/bin/gnuplot/iir_test.plt b/examples/bin/gnuplot/iir_test.plt
index 45da514..d76bd56 100644
--- a/examples/bin/gnuplot/iir_test.plt
+++ b/examples/bin/gnuplot/iir_test.plt
@@ -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
diff --git a/examples/src/filter_iir_test.c b/examples/src/filter_iir_test.c
new file mode 100644
index 0000000..9cb493d
--- /dev/null
+++ b/examples/src/filter_iir_test.c
@@ -0,0 +1,39 @@
+#include
+#include
+#include
+#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");
+}
\ No newline at end of file
diff --git a/examples/src/iit_test.c b/examples/src/iir_test.c
similarity index 98%
rename from examples/src/iit_test.c
rename to examples/src/iir_test.c
index ec047f4..2c43936 100644
--- a/examples/src/iit_test.c
+++ b/examples/src/iir_test.c
@@ -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");
}