new file: .travis.yml

modified:   README.md
	new file:   dspl/doc/en/latex/Makefile
	modified:   dspl/dox/en/dft.dox
	modified:   dspl/dox/en/dspl_load.dox
	modified:   dspl/dox/en/ellipj.dox
	modified:   dspl/dox/en/error_list.dox
	modified:   dspl/dox/en/fft.dox
	modified:   dspl/dox/en/groups_define.dox
	modified:   dspl/dox/en/mainpage.dox
	modified:   dspl/dox/ru/error_list.dox
	modified:   dspl/src/conv.c
	modified:   dspl/src/dft.c
	modified:   dspl/src/ellipj.c
pull/6/merge
Dsplib 2020-07-03 21:08:51 +03:00
rodzic 9ebb3396a5
commit 0b34dc650d
14 zmienionych plików z 608 dodań i 1259 usunięć

6
.travis.yml 100644
Wyświetl plik

@ -0,0 +1,6 @@
language: c
install:
- make install
script: make

Wyświetl plik

@ -12,7 +12,7 @@ libdspl-2.0 includes follow algorithms sets:
* Mathematical sections includes trigonometric, hyperbolic, elliptic functions of real and complex variables.
* Pseudorandom numbers generation algorithms.
* Statistic functions.
* Linear algebra BLAS and LAPACK packages are used under the hood.
* Linear algebra [BLAS](http://www.netlib.org/blas/) and [LAPACK](http://www.netlib.org/lapack/) packages are used under the hood.
* Digital resampling algorithms.

Wyświetl plik

@ -0,0 +1,23 @@
LATEX_CMD=pdflatex
all: refman.pdf
pdf: refman.pdf
refman.pdf: clean refman.tex
$(LATEX_CMD) refman
makeindex refman.idx
$(LATEX_CMD) refman
latex_count=8 ; \
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
do \
echo "Rerunning latex...." ;\
$(LATEX_CMD) refman ;\
latex_count=`expr $$latex_count - 1` ;\
done
makeindex refman.idx
$(LATEX_CMD) refman
clean:
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf

Wyświetl plik

@ -2,139 +2,141 @@
/*! ****************************************************************************
\ingroup DFT_GROUP
\fn int dft(double* x, int n, complex_t* y)
\brief Дискретное преобразование Фурье вещественного сигнала.
\brief Discrete Fourier transform of a real signal.
Функция рассчитывает \f$ n \f$-точечное дискретное преобразование Фурье
вещественного сигнала \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
The function calculates the \f$ n \f$ -point discrete Fourier transform
real signal \f$ x (m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
\f[
Y(k) = \sum_{m = 0}^{n-1} x(m)
\exp \left( -j \frac{2\pi}{n} m k \right),
Y (k) = \sum_ {m = 0} ^ {n-1} x (m)
\exp \left (-j \frac {2 \pi} {n} m k \right),
\f]
где \f$ k = 0 \ldots n-1 \f$.
where \f$ k = 0 \ldots n-1 \f$.
\param[in] x
Указатель на вектор вещественного входного сигнала \f$x(m)\f$,
\f$ m = 0 \ldots n-1 \f$. \n
Размер вектора `[n x 1]`. \n \n
\param [in] x
Pointer to the vector of the real input signal \f$ x (m) \f$,
\f$ m = 0 \ldots n-1 \f$. \n
The size of the vector is `[n x 1]`. \n \n
\param[in] n
Размер ДПФ \f$n\f$ (размер векторов входного сигнала и результата ДПФ). \n \n
\param [in] n
The size of the DFT \f$ n \f$
(the size of the vectors of the input signal and the result of the DFT). \n \n
\param[out] y
Указатель на комплексный вектор результата ДПФ \f$Y(k)\f$,
\f$ k = 0 \ldots n-1 \f$.
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
\param [out] y
Pointer to the complex vector of the DFT result \f$ Y (k) \f$,
\f$ k = 0 \ldots n-1 \f$.
The size of the vector is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` если ДПФ рассчитана успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
`RES_OK` if the DFT is calculated successfully. \n
Otherwise, \ref ERROR_CODE_GROUP "error code".
Пример использования функции `dft`:
An example of using the `dft` function:
\include dft_test.c
Результат работы программы:
The result of the program:
\verbatim
y[ 0] = 120.000 0.000
y[ 1] = -8.000 40.219
y[ 2] = -8.000 19.314
y[ 3] = -8.000 11.973
y[ 4] = -8.000 8.000
y[ 5] = -8.000 5.345
y[ 6] = -8.000 3.314
y[ 7] = -8.000 1.591
y[ 8] = -8.000 0.000
y[ 9] = -8.000 -1.591
y[10] = -8.000 -3.314
y[11] = -8.000 -5.345
y[12] = -8.000 -8.000
y[13] = -8.000 -11.973
y[14] = -8.000 -19.314
y[15] = -8.000 -40.219
y [0] = 120.000 0.000
y [1] = -8.000 40.219
y [2] = -8.000 19.314
y [3] = -8.000 11.973
y [4] = -8.000 8.000
y [5] = -8.000 5.345
y [6] = -8.000 3.314
y [7] = -8.000 1.591
y [8] = -8.000 0.000
y [9] = -8.000 -1.591
y [10] = -8.000 -3.314
y [11] = -8.000 -5.345
y [12] = -8.000 -8.000
y [13] = -8.000 -11.973
y [14] = -8.000 -19.314
y [15] = -8.000 -40.219
\endverbatim
\note
Данная функция выполняет расчет ДПФ наивным методом и требует \f$ n^2 \f$
комплексных умножений. \n
Для увеличения скорости расчета рекомендуется использовать
алгоритмы быстрого преобразования Фурье.
This function performs the DFT calculation using the naive method and requires \f$ n ^ 2 \f$
complex multiplications. \n
To increase the calculation speed, it is recommended to use
fast Fourier transform algorithms.
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */
Bakhurin Sergey
www.dsplib.org
**************************************************************************** */
/*! ****************************************************************************
\ingroup DFT_GROUP
\fn int dft_cmplx(complex_t* x, int n, complex_t* y)
\brief Дискретное преобразование Фурье комплексного сигнала.
\brief Discrete Fourier transform of a complex signal.
Функция рассчитывает \f$ n \f$-точечное дискретное преобразование Фурье
комплексного сигнала \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
The function calculates the \f$ n \f$ -point discrete Fourier transform
complex signal \f$ x (m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
\f[
Y(k) = \sum_{m = 0}^{n-1} x(m)
\exp \left( -j \frac{2\pi}{n} m k \right),
Y (k) = \sum_ {m = 0} ^ {n-1} x (m)
\exp \left (-j \frac {2 \pi} {n} m k \right),
\f]
где \f$ k = 0 \ldots n-1 \f$.
where \f$ k = 0 \ldots n-1 \f$.
\param[in] x
Указатель на вектор комплексного
входного сигнала \f$x(m)\f$, \f$ m = 0 \ldots n-1 \f$. \n
Размер вектора `[n x 1]`. \n \n
\param [in] x
Pointer to a vector of complex
input signal \f$ x (m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
The size of the vector is `[n x 1]`. \n \n
\param[in] n
Размер ДПФ \f$n\f$ (размер векторов входного сигнала и результата ДПФ). \n \n
\param [in] n
The size of the DFT \f$ n \f$
(the size of the vectors of the input signal and the result of the DFT). \n \n
\param[out] y
Указатель на комплексный вектор
результата ДПФ \f$Y(k)\f$, \f$ k = 0 \ldots n-1 \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
\param [out] y
Integrated Vector Pointer
DFT result \f$ Y (k) \f$, \f$ k = 0 \ldots n-1 \f$. \n
The size of the vector is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` если ДПФ рассчитана успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
`RES_OK` if the DFT is calculated successfully. \n
Otherwise, \ref ERROR_CODE_GROUP "error code".
Пример использования функции `dft_cmplx`:
An example of using the `dft_cmplx` function:
\include dft_cmplx_test.c
Результат работы программы:
The result of the program:
\verbatim
y[ 0] = 120.000 0.000
y[ 1] = -8.000 40.219
y[ 2] = -8.000 19.314
y[ 3] = -8.000 11.973
y[ 4] = -8.000 8.000
y[ 5] = -8.000 5.345
y[ 6] = -8.000 3.314
y[ 7] = -8.000 1.591
y[ 8] = -8.000 0.000
y[ 9] = -8.000 -1.591
y[10] = -8.000 -3.314
y[11] = -8.000 -5.345
y[12] = -8.000 -8.000
y[13] = -8.000 -11.973
y[14] = -8.000 -19.314
y[15] = -8.000 -40.219
y [0] = 120.000 0.000
y [1] = -8.000 40.219
y [2] = -8.000 19.314
y [3] = -8.000 11.973
y [4] = -8.000 8.000
y [5] = -8.000 5.345
y [6] = -8.000 3.314
y [7] = -8.000 1.591
y [8] = -8.000 0.000
y [9] = -8.000 -1.591
y [10] = -8.000 -3.314
y [11] = -8.000 -5.345
y [12] = -8.000 -8.000
y [13] = -8.000 -11.973
y [14] = -8.000 -19.314
y [15] = -8.000 -40.219
\endverbatim
\note
Данная функция выполняет расчет ДПФ наивным методом
и требует \f$ n^2 \f$ комплексных умножений. \n
Для увеличения скорости расчета рекомендуется
использовать алгоритмы быстрого преобразования Фурье.
This function performs the calculation of the DFT by the naive method
and requires \f$ n ^ 2 \f$ complex multiplications. \n
To increase the calculation speed, it is recommended
use fast Fourier transform algorithms.
\author
Бахурин Сергей
www.dsplib.org
Bakhurin Sergey
www.dsplib.org
***************************************************************************** */
@ -143,69 +145,70 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup DFT_GROUP
\fn int idft_cmplx(complex_t* x, int n, complex_t* y)
\brief Обратное дискретное преобразование Фурье комплексного спектра.
\brief Inverse discrete Fourier transform of the complex spectrum.
Функция рассчитывает \f$ n \f$-точечное обратное дискретное преобразование
Фурье комплексного спектра \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
The function calculates the \f$ n \f$ -point inverse discrete transform
Fourier complex spectrum \f$ x (m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
\f[
y(k) = \sum_{m = 0}^{n-1} x(m)
\exp \left( j \frac{2\pi}{n} m k \right),
y (k) = \sum_ {m = 0} ^ {n-1} x (m)
\exp \left (j \frac {2 \pi} {n} m k \right),
\f]
где \f$ k = 0 \ldots n-1 \f$.
where \f$ k = 0 \ldots n-1 \f$.
\param[in] x
Указатель на вектор входного комплексного спектра сигнала \f$x(m)\f$,
\f$ m = 0 \ldots n-1 \f$. \n
Размер вектора `[n x 1]`. \n \n
\param [in] x
Pointer to the vector of the input complex signal spectrum \f$ x (m) \f$,
\f$ m = 0 \ldots n-1 \f$. \n
The size of the vector is `[n x 1]`. \n \n
\param[in] n
Размер ОДПФ \f$n\f$ (размер векторов входного спектра и результата ОДПФ). \n \n
\param [in] n
The size of the ODPF \f$ n \f$
(the size of the vectors of the input spectrum and the result of the ODPF). \n \n
\param[out] y
Указатель на комплексный вектор результата ОДПФ \f$y(k)\f$,
\f$ k = 0 \ldots n-1 \f$.
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
\param [out] y
Pointer to the complex vector of the ODPF result \f$ y (k) \f$,
\f$ k = 0 \ldots n-1 \f$.
The size of the vector is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` если ОДПФ рассчитана успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
`RES_OK` if the ODPF is calculated successfully. \n
Otherwise, \ref ERROR_CODE_GROUP "error code".
Пример использования функции `dft_cmplx`:
An example of using the `dft_cmplx` function:
\include idft_cmplx_test.c
Результат работы программы:
The result of the program:
\verbatim
x[ 0] = 0.000 +0.000j, z[ 0] = 0.000 -0.000
x[ 1] = 1.000 +0.000j, z[ 1] = 1.000 -0.000
x[ 2] = 2.000 +0.000j, z[ 2] = 2.000 -0.000
x[ 3] = 3.000 +0.000j, z[ 3] = 3.000 -0.000
x[ 4] = 4.000 +0.000j, z[ 4] = 4.000 -0.000
x[ 5] = 5.000 +0.000j, z[ 5] = 5.000 -0.000
x[ 6] = 6.000 +0.000j, z[ 6] = 6.000 -0.000
x[ 7] = 7.000 +0.000j, z[ 7] = 7.000 -0.000
x[ 8] = 8.000 +0.000j, z[ 8] = 8.000 -0.000
x[ 9] = 9.000 +0.000j, z[ 9] = 9.000 -0.000
x[10] = 10.000 +0.000j, z[10] = 10.000 -0.000
x[11] = 11.000 +0.000j, z[11] = 11.000 +0.000
x[12] = 12.000 +0.000j, z[12] = 12.000 +0.000
x[13] = 13.000 +0.000j, z[13] = 13.000 +0.000
x[14] = 14.000 +0.000j, z[14] = 14.000 +0.000
x[15] = 15.000 +0.000j, z[15] = 15.000 -0.000
x [0] = 0.000 + 0.000j, z [0] = 0.000 -0.000
x [1] = 1.000 + 0.000j, z [1] = 1.000 -0.000
x [2] = 2.000 + 0.000j, z [2] = 2.000 -0.000
x [3] = 3.000 + 0.000j, z [3] = 3.000 -0.000
x [4] = 4.000 + 0.000j, z [4] = 4.000 -0.000
x [5] = 5.000 + 0.000j, z [5] = 5.000 -0.000
x [6] = 6.000 + 0.000j, z [6] = 6.000 -0.000
x [7] = 7.000 + 0.000j, z [7] = 7.000 -0.000
x [8] = 8.000 + 0.000j, z [8] = 8.000 -0.000
x [9] = 9.000 + 0.000j, z [9] = 9.000 -0.000
x [10] = 10.000 + 0.000j, z [10] = 10.000 -0.000
x [11] = 11.000 + 0.000j, z [11] = 11.000 +0.000
x [12] = 12.000 + 0.000j, z [12] = 12.000 +0.000
x [13] = 13.000 + 0.000j, z [13] = 13.000 +0.000
x [14] = 14.000 + 0.000j, z [14] = 14.000 +0.000
x [15] = 15.000 + 0.000j, z [15] = 15.000 -0.000
\endverbatim
\note
Данная функция выполняет расчет ОДПФ наивным методом
и требует \f$ n^2 \f$ комплексных умножений. \n
Для увеличения скорости расчета рекомендуется
использовать алгоритмы быстрого преобразования Фурье.
This function performs the calculation of the DFT using the naive method.
and requires \f$ n ^ 2 \f$ complex multiplications. \n
To increase the calculation speed, it is recommended
use fast Fourier transform algorithms.
\author
Бахурин Сергей
www.dsplib.org
Bakhurin Sergey
www.dsplib.org
***************************************************************************** */

Wyświetl plik

@ -1,54 +1,53 @@
/*! ****************************************************************************
\ingroup SYS_LOADING_GROUP
\fn void* dspl_load()
\brief
Произвести динамическую линковку и загрузить функции DSPL-2.0.
\brief
Perform dynamic linking and load DSPL-2.0 functions.
Данная функция производит попытку связывания с библиотекой `libdspl.dll` в
системе Windows и с библиотекой `libdspl.so` в системе Linux.
Предполагается, что библиотека находится в одной директории с приложением
пользователя, или путь к библиотеке прописан в переменных пути операционной
системы.
This function attempts to link to the library `libdspl.dll` in
Windows system and the `libdspl.so` library on the Linux system.
The library is assumed to be in the same directory as the application.
user, or the path to the library is registered in the operating path variables
system.
При удачном связывании и загрузке функций библиотеки возвращается хэндл
библиотеки, а также в адресном пространстве приложения появляются
указатели на функции DSPL-2.0.
Upon successful binding and loading of library functions, the handle is returned
libraries, as well as in the address space of the application appear
pointers to DSPL-2.0 functions.
\note
Возвращаемый хэндл имеет тип `void*`, который в ОС Windows может быть приведен
к типу `HINSTANCE`. На практике необходимости в этом, нет, потому что данный
тип приводится к `HINSTANCE` автоматически, если выставлен флаг компилятора,
указывающий, что сборка приложения производится в ОС Windows.
The returned handle is of type `void *`, which can be cast on Windows
to type `HINSTANCE`. In practice, this is not necessary, because this
the type is cast to `HINSTANCE` automatically if the compiler flag is set,
indicating that the application is being built on Windows.
Пример простейшей программы реализующей динамическое связывание с DSPL-2.0.
An example of a simple program that implements dynamic binding with DSPL-2.0.
\code
#include <stdio.h>
#include <stdlib.h>
#include "dspl.h"
int main(int argc, char* argv[])
int main (int argc, char* argv[])
{
void* hdspl; /* DSPL хэндл */
hdspl = dspl_load(); /* Динамическая линковка */
void * hdspl; /* DSPL handle */
hdspl = dspl_load (); /* Dynamic linking */
/* Проверяем указатель. Если `NULLL`, то линковка прошла неудачно */
if(!hdspl)
/* Check the pointer. If `NULL`, then the link failed */
if (! hdspl)
{
printf("libdspl loading error!\n");
printf ("libdspl loading error! \n");
return -1;
}
/*
Линковка прошла успешно можно вызывать функции DSPL-2.0
The link was successful, you can call the functions of DSPL-2.0
*/
/*
Перед корректным завершением приложения необходимо разлинковать
библиотеку и очистить память.
/*
Before correctly terminating the application, you must unlink
library and clear memory.
*/
dspl_free(hdspl);
dspl_free (hdspl);
return 0;
}
@ -58,7 +57,7 @@ int main(int argc, char* argv[])
\author
Бахурин Сергей
Bakhurin Sergey
www.dsplib.org
**************************************************************************** */
@ -68,19 +67,19 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup SYS_LOADING_GROUP
\fn void dspl_free(void* handle)
\brief
Очищает связанную ранее динамическую библиотеку DSPL-2.0.
\brief
Cleans up the previously linked DSPL-2.0 dynamic library.
Данная кроссплатформенная функция производит очистку библиотеки `libdspl.dll` в
системе Windows и с библиотеки `libdspl.so` в системе Linux.
После очистки библиотеки все функции станут недоступны.
This cross-platform function clears the library `libdspl.dll` in
Windows system and from the library `libdspl.so` on the Linux system.
After cleaning the library, all functions will become unavailable.
\param[in] handle
Хэндл прилинкованной ранее библиотеки DSPL-2.0. \n
Данный указатель может быть `NULL`, в этом случае никакие действия не
производятся.
\param [in] handle
Handle of the previously linked DSPL-2.0 library. \n
This pointer can be `NULL`, in this case no action
are being produced.
\author
Бахурин Сергей
Bakhurin Sergey
www.dsplib.org
**************************************************************************** */

Wyświetl plik

@ -1,45 +1,41 @@
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_acd(double* w, int n, double k, double* u)
\brief Обратная эллиптическая функция Якоби
\f$ u = \textrm{cd}^{-1}(w, k)\f$ вещественного аргумента
\brief Inverse Jacobi elliptic function \f$ u = \textrm{cd}^{-1}(w, k)\f$
of the real vector argument
Функция рассчитывает значения обратной эллиптической функции
\f$ u = \textrm{cd}^{-1}(w, k)\f$ для вещественного вектора `w`. \n
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$ of the real vector `w`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
\param[in] w
Указатель на массив вектора переменной \f$ w \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Размер вектора `w`. \n
Size of vector `w`. \n
\param[in] k Значение эллиптического модуля \f$ k \f$.
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
\param[in] k
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u
Указатель на вектор значений обратной эллиптической
функции \f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
@ -49,42 +45,38 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_acd_cmplx(complex_t* w, int n, double k, complex_t* u)
\brief Обратная эллиптическая функция Якоби
\f$ u = \textrm{cd}^{-1}(w, k)\f$ комплексного аргумента
\fn int ellip_acd_cmplx(complex_t* w, int n, double k, complex_t* u)
\brief Inverse Jacobi elliptic function \f$ u = \textrm{cd}^{-1}(w, k)\f$
of complex vector argument
Функция рассчитывает занчения значения обратной эллиптической функции
\f$ u = \textrm{cd}^{-1}(w, k)\f$ для комплексного вектора `w`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$ of complex vector `w`. \n
\param[in] w
Указатель на массив вектора переменной \f$ w \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Размер вектора `w`. \n \n
Size of vector `w`. \n
\param[in] k
Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u
Указатель на вектор значений обратной эллиптической
функции \f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author
Бахурин Сергей
www.dsplib.org
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
@ -96,41 +88,37 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_asn(double* w, int n, double k, double* u)
\brief Обратная эллиптическая функция Якоби
\f$ u = \textrm{sn}^{-1}(w, k)\f$ вещественного аргумента
\brief Inverse Jacobi elliptic function \f$ u = \textrm{sn}^{-1}(w, k)\f$
of real vector argument
Функция рассчитывает занчения значения обратной эллиптической функции
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для вещественного вектора `w`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$ of real vector `w`. \n
\param[in] w
Указатель на массив вектора переменной \f$ w \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Размер вектора `w`. \n \n
Size of vector `w`. \n
\param[in] k
Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u
Указатель на вектор значений обратной эллиптической
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author
Бахурин Сергей
www.dsplib.org
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
@ -141,44 +129,38 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_asn_cmplx(complex_t* w, int n, double k, complex_t* u)
\brief Обратная эллиптическая функция Якоби
\f$ u = \textrm{sn}^{-1}(w, k)\f$ комплексного аргумента
\fn int ellip_asn_cmplx(complex_t* w, int n, double k, complex_t* u)
\brief Inverse Jacobi elliptic function \f$ u = \textrm{sn}^{-1}(w, k)\f$
of complex vector argument
Функция рассчитывает занчения значения обратной эллиптической функции
\f$ u = \textrm{sn}^{-1}(w, k)\f$ для комплексного вектора `w`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$ of complex vector `w`. \n
\param[in] w
Указатель на массив вектора переменной \f$ w \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Размер вектора `w`. \n \n
Size of vector `w`. \n
\param[in] k
Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u
Указатель на вектор значений обратной эллиптической
функции \f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK`Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author
Бахурин Сергей
www.dsplib.org
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
@ -189,46 +171,41 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_cd(double* u, int n, double k, double* y)
\brief Эллиптическая функция Якоби
\f$ y = \textrm{cd}(u K(k), k)\f$ вещественного аргумента
\fn int ellip_cd(double* u, int n, double k, double* y)
\brief Jacobi elliptic function \f$ y = \textrm{cd}(u K(k), k)\f$
of real vector argument
Функция рассчитывает занчения значения эллиптической функции
\f$ y = \textrm{cd}(u K(k), k)\f$ для вещественного вектора `u` и
эллиптического модуля `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
Function calculates Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$ of real vector `u` and
elliptical modulus `k`. \n
\param[in] u
Указатель на массив вектора переменной \f$ u \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Размер вектора `u`. \n \n
Size of vector `u`. \n
\param[in] k
Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y
Указатель на вектор значений эллиптической
функции \f$ y = \textrm{cd}(u K(k), k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */
@ -238,46 +215,39 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_cd_cmplx(complex_t* u, int n, double k, complex_t* y)
\brief Эллиптическая функция Якоби
\f$ y = \textrm{cd}(u K(k), k)\f$ комплексного аргумента
\fn int ellip_cd_cmplx(complex_t* u, int n, double k, complex_t* y)
\brief Jacobi elliptic function \f$ y = \textrm{cd}(u K(k), k)\f$
of complex vector argument
Функция рассчитывает занчения значения эллиптической функции
\f$ y = \textrm{cd}(u K(k), k)\f$ для комплексного вектора `u` и
эллиптического модуля `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
Function calculates Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$ of complex vector `u` and
elliptical modulus `k`. \n
\param[in] u
Указатель на массив вектора переменной \f$ u \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Размер вектора `u`. \n \n
Size of vector `u`. \n
\param[in] k
Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y
Указатель на вектор значений эллиптической
функции \f$ y = \textrm{cd}(u K(k), k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author
Бахурин Сергей
www.dsplib.org
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
@ -288,15 +258,17 @@ www.dsplib.org
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_landen(double k, int n, double* y)
\brief Расчет коэффициентов \f$ k_i \f$ ряда полного эллиптического интеграла.
\brief Function calculates complete elliptical integral
coefficients \f$ k_i \f$
Полный эллиптический интеграл \f$ K(k) \f$ может быть представлен рядом:
Complete elliptical integral \f$ K(k) \f$ can be described as:
\f[
K(k) = \frac{\pi}{2} \prod_{i = 1}^{\infty}(1+k_i),
\f]
где \f$ k_i \f$ вычисляется итерационно при начальных условиях \f$ k_0 = k\f$:
here \f$ k_i \f$ -- coefficients which calculated
iterative from \f$ k_0 = k\f$:
\f[
k_i =
@ -308,31 +280,34 @@ k_i =
\right)^2
\f]
Данная функция рассчитывает ряд первых `n` значений \f$ k_i \f$, которые в
дальнейшем могут быть использованы для расчета эллиптического интеграла и
эллиптических функций.
This function calculates `n` fist coefficients \f$ k_i \f$, which can
be used for Complete elliptical integral.
\param[in] k
Эллиптический модуль \f$ k \f$. \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter, which values can be from 0 to 1. \n \n
\param[in] n
Размер вектора `y` соответсвующих коэффициентам \f$ k_i \f$. \n \n
Number of \f$ k_i \f$ which need to calculate. \n
Parameter `n` is size of output vector `y`. \n
\param[out] y
Указатель на вектор значений коэффициентов \f$ k_i \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
pointer to the real vector which keep \f$ k_i \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` -- successful exit, else \ref ERROR_CODE_GROUP "error code". \n
Пример использования функции `ellip_landen`:
Example:
\include ellip_landen_test.c
Результат работы программы:
Result:
\verbatim
i k[i]
@ -352,111 +327,90 @@ k_i =
13 0.000e+00
\endverbatim
\note
Ряд полного эллиптического интеграла сходится при значениях
эллиптического модуля \f$ k<1 \f$. При этом сходимость ряда достаточно
быстрая и для практический приложений достаточно от 10 до 20 значений
\f$ k_i \f$ для обеспечения погрешности при расчете полного
эллиптического интеграла в пределах машинной точности.
\note Complete elliptical integral converges enough fast
if modulus \f$ k<1 \f$. There are 10 to 20 coefficients \f$ k_i \f$
are sufficient for practical applications
to ensure complete elliptic integral precision within EPS.
\author
Бахурин Сергей
www.dsplib.org
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_sn(double* u, int n, double k, double* y)
\brief Эллиптическая функция Якоби
\f$ y = \textrm{sn}(u K(k), k)\f$ вещественного аргумента
\fn int ellip_sn(double* u, int n, double k, double* y)
\brief Jacobi elliptic function \f$ y = \textrm{sn}(u K(k), k)\f$
of real vector argument
Функция рассчитывает занчения значения эллиптической функции
\f$ y = \textrm{sn}(u K(k), k)\f$ для вещественного вектора `u` и
эллиптического модуля `k`. \n
Function calculates Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$ of real vector `u` and
elliptical modulus `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
\param[in] u
Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Size of vector `u`. \n
\param[in] u
Указатель на массив вектора переменной \f$ u \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
\param[in] n
Размер вектора `u`. \n \n
\param[in] k
Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y
Указатель на вектор значений эллиптической
функции \f$ y = \textrm{sn}(u K(k), k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
\author
Бахурин Сергей
www.dsplib.org
***************************************************************************** */
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */
/*! ****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_sn_cmplx(complex_t* u, int n, double k, complex_t* y)
\brief Эллиптическая функция Якоби
\f$ y = \textrm{sn}(u K(k), k)\f$ комплексного аргумента
\fn int ellip_sn_cmplx(complex_t* u, int n, double k, complex_t* y)
\brief Jacobi elliptic function \f$ y = \textrm{sn}(u K(k), k)\f$ of complex vector argument
Функция рассчитывает занчения значения эллиптической функции
\f$ y = \textrm{sn}(u K(k), k)\f$ для комплексного вектора `u` и
эллиптического модуля `k`. \n
Для расчета используется итерационный алгоритм на основе преобразования
Ландена. \n
Function calculates Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$ of complex vector `u` and
elliptical modulus `k`. \n
\param[in] u
Указатель на массив вектора переменной \f$ u \f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n
Размер вектора `u`. \n \n
Size of vector `u`. \n
\param[in] k
Значение эллиптического модуля \f$ k \f$. \n
Эллиптический модуль -- вещественный параметр,
принимающий значения от 0 до 1. \n \n
Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y
Указатель на вектор значений эллиптической
функции \f$ y = \textrm{sn}(u K(k), k)\f$. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author
Бахурин Сергей
www.dsplib.org
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */

Wyświetl plik

@ -2,45 +2,45 @@
/*!
\ingroup ERROR_CODE_GROUP
\def RES_OK
\brief Функция завершилась корректно. Ошибки отсутствуют.
\brief The function completed correctly. No errors.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_ARG_PARAM
\brief Неверный параметр вызова программы.
Данная ошибка возникает, когда производится вызов программы с неверным
количеством параметров `argc` и указателем `argv`
на массив параметров вызова программы.
\brief Invalid program call parameter.
This error occurs when a program is called with an invalid
the number of arguments `argc` and the pointer` argv`
to an array of program call parameters.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_DAT_TYPE
\brief Неверный тип данных.
Данная ошибка возникает при сохранении данных в бинарный файл, когда параметр,
задающий тип данных в памяти (вещественные или комплексные) задан неверно.
\brief Invalid data type.
This error occurs when saving data to a binary file, when the parameter
the defining data type in memory (real or complex) is set incorrectly.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_DIV_ZERO
\brief Ошибка деления на ноль.
Функция возвращает данную ошибку, если в вычислительном алгоритме возникло
деление на ноль.
\brief Division by zero error.
The function returns this error if a computational algorithm occurs
division by zero.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_ELLIP_MODULE
\brief Модуль эллиптического интеграла Якоби должен быть от 0 до 1.
Данная ошибка возникает при расчете эллиптических функций Якоби
при неверном задании параметра эллиптического модуля.
Функция завершает работу и возвращает данный код ошибки.
\brief The modulus of the Jacobi elliptic integral must be from 0 to 1.
This error occurs when calculating Jacobi elliptic functions
if the parameter of the elliptic module is incorrectly set.
The function exits and returns the given error code.
*/
@ -48,30 +48,30 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FFT_SIZE
\brief Неверно задан размер БПФ.
Размер БПФ может быть составным вида
\f$n = n_0 \times n_1 \times n_2 \ldots \times n_p \times m\f$,
где \f$n_i = 2,3,5,7\f$, а \f$m \f$ --
произвольный простой множитель не превосходящий 46340.
Ошибка возникает, когда множитель \f$m \f$ превосходит 46340.
\brief The FFT size is not set correctly.
FFT size can be composite
\f$ n = n_0 \times n_1 \times n_2 \ldots \times n_p \times m \f$,
where \f$ n_i = 2,3,5,7 \f$, and \f$ m \f$ --
an arbitrary prime factor not exceeding 46340.
An error occurs when the factor \f$ m \f$ exceeds 46340 .
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_A0
\brief Параметр \f$a_0\f$ передаточной характеристики \f$H(z)\f$ цифрового
БИХ-фильтра не может быть равен нулю.
\brief Parameter \f$ a_0 \f$ cannot be zero digital for
IIR filter transfer characteristic \f$ H (z)\f$.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_APPROX
\brief Неизвестный тип аппроксимации цифрового или аналогового фильтра.
Данная ошибка возникает при неверном задании масок типа цифрового БИХ-фильтра.
Библиотека поддерживает следущие аппроксимации: Баттерворта, Чебышева первого
рода, Чебышева второго рода и эллиптические.
\brief Unknown approximation type of digital or analog filter.
This error occurs when masks such as a digital IIR filter are incorrectly set.
The library supports the following approximations: Butterworth,
Chebyshev of the first kind, Chebyshev of the second kind and elliptic.
*/
@ -79,26 +79,24 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_FT
\brief Неверно заданы частоты преобразования ФНЧ-ПФ и ФНЧ-РФ.
Частотные маски полосовых и режекторных фильтров имеют две частоты среза
или частоты заграждения. При реализации частотных преобразований фильтров
необходимо задавать правую частоту среза меньше левой.
\brief The conversion frequencies of the low-pass filter and low-pass filter are incorrect.
Frequency masks for bandpass and bandstop filters have two cutoff frequencies or barrage frequencies.
When implementing frequency filter conversions, it is necessary to set the left cutoff frequency less than the right.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_ORD
\brief Порядок фильтра задан неверно.
Порядок фильтра должен быть задан положительным целым значением.
\brief The filter order is incorrect.
The order of the filter must be specified by a positive integer value.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_ORD_BP
\brief Порядок полосового или режекторного фильтра задан неверно.
Порядок полосового и режекторного фильтра должен быть задан
чётным положительным значением.
\brief The order of the bandpass or notch filter is not set correctly.
The order of the bandpass and notch filter must be given an even positive value.
*/
@ -106,8 +104,8 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_RP
\brief Параметр неравномерности фильтра в полосе пропускания задан неверно.
Данный параметр задается в дБ и должен быть положительным числом.
\brief The filter non-uniformity parameter in the passband is set incorrectly.
This parameter is specified in dB and must be a positive number.
*/
@ -115,17 +113,16 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_RS
\brief Параметр подавления фильтра в полосе заграждения задан неверно.
Данный параметр задается в дБ и должен быть положительным числом.
\brief The filter suppression parameter in the boom bar is not set correctly.
This parameter is specified in dB and must be a positive number.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_TYPE
\brief Неизвестный тип фильтра.
Библиотека поддерживает следущие типы фильтров: ФНЧ, ФВЧ, полосовой и
режекторный.
\brief Unknown filter type.
The library supports the following filter types: lowpass, highpass, bandpass and bandstop.
*/
@ -133,16 +130,15 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_WP
\brief Параметр частоты среза фильтра задан неверно.
Частота среза фильтра должна быть положительной от 0 до 1 для
цифрового КИХ-фильтра.
\brief The filter cutoff frequency parameter is set incorrectly.
The cutoff frequency of the filter must be positive from 0 to 1 for the digital FIR filter.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FILTER_WS
\brief Параметр частоты заграждения фильтра задан неверно.
Частота заграждения должна быть положительным числом от 0 до 1.
\brief The filter frequency parameter is set incorrectly.
The frequency must be a positive from 0 to 1.
*/
@ -151,7 +147,7 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FNAME
\brief Ошибка в имени файла. Необходимо задать корректное имя файла.
\brief Error in file name. You must specify the correct file name.
*/
@ -160,26 +156,24 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FOPEN
\brief Ошибка открытия файла.
Файл с заданным именем не может быть открыт для записи и (или) чтения.
\brief Error opening file.
A file with the specified name cannot be opened for writing or reading.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FREAD_SIZE
\brief Ошибка чтения блока данных из бинарного файла.
Ошибка возникает, если при чтении блока данных из файла размер считанного блока
не соответствует требуемому значению.
\brief Error reading data block from binary file.
An error occurs if size of the read block does not match the required value.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_FWRITE_SIZE
\brief Ошибка записи блока данных в бинарный файла.
Ошибка возникает, если при записи блока данных в файл, размер записанного блока
не соответствует требуемому значению.
\brief Error writing data to binary file.
An error occurs if, the size of the recorded block does not match the required value.
*/
@ -192,19 +186,19 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_GNUPLOT_CREATE
\brief Невозможно подключиться к пакету GNUPLOT.
Пожалуйста проверьте, что пакет доступен.
\brief Unable to connect to the GNUPLOT package.
Please check that the package is available.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_GNUPLOT_TERM
\brief Неизвестный параметра вызова программы, задающий терминал GNUPLOT.\n
Данный параметр может принимать одно из следюущих значений:\n
`--noplot` построение графика не производиться;\n
`--plotwin` построение графиков производиться в отельном окне (окнах);\n
`--plotpng` построение графиков производиться в png - файл.\n
\brief Unknown program call parameter specifying the GNUPLOT terminal. \n
This parameter can be one of the following values: \n
`--noplot` no plotting; \ n
`--plotwin` plot in the new window; \n
`--plotpng` plot in png file. \n
*/
@ -212,42 +206,41 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_LAPACK
\brief Встроенная функция пакета LAPACK вернула код ошибки.
Данная ошибка возвращается функцией, если она использует одну из встроенных
функций LAPACK, которая завершилась с ошибкой.
\brief The built-in LAPACK function returned an error code.
This error is returned by the function if it uses one of the built-in LAPACK functions that failed.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_MALLOC
\brief Ошибка динамического выделения памяти.
Данная ошибка означает, что при динамическом выделении памяти произошла ошбика.
В результате функция `malloc` в теле вызваемой функции вернула `NULL` указатель.
Дальнейшая обработка функцией невозможна.
\brief Dynamic memory allocation error.
This error means that an error occurred while dynamically allocating memory.
As a result, the `malloc` function in the body of the called function returned a` NULL` pointer.
Further processing by the function is not possible.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_MATRIX_SIZE
\brief Неверный размер матрицы.
\brief Matrix size error.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_MIN_MAX
\brief Минимальное значение (нижняя граница) больше максимального.
\brief The minimum value (lower bound) is greater than the maximum.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_NEGATIVE
\brief Отрицательный параметр.
Функция возвращает данный код ошибки, когда принимает отрицательный параметр
в переменную, которая не может быть отрицательной.
\brief Negative parameter.
The function returns the given error code when it takes a negative parameter.
into a variable that cannot be negative.
*/
@ -255,10 +248,10 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_POLY_AN
\brief Неверно задан старший коэффициент полинома.
Например при вычислении кореней полинома степени \f$N\f$
\f[ P_N(x) = a_0 + a_1 x + a_2 x^2 + \ldots a_N x^N \f]
старший коэффициентом \f$a_N\f$ не может быть равным нулю.
\brief The senior coefficient of the polynomial is incorrectly set.
For example, when calculating the roots of a polynomial of degree \f$ N \f$
\f[P_N (x) = a_0 + a_1 x + a_2 x ^ 2 + \ ldots a_N x ^ N \f]
the leading coefficient \f$ a_N \f$ cannot be equal to zero.
*/
@ -266,8 +259,8 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_POLY_ORD
\brief Неверно задан порядок полинома.
Порядок полинома должен быть положительным целым числом.
\brief The polynomial order is incorrect.
The order of the polynomial must be a positive integer.
*/
@ -275,11 +268,11 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_PTR
\brief Ошибка указателя.
Данная ошибка означает, что один из обязательных указателей
(память под который должна быть выделена) передан как `NULL`.
При возникновении данной ошибки, функция завершает работу
и возвращает данный код ошибки.
\brief Pointer error.
This error means that one of the required pointers
(memory to be allocated for) is transferred as `NULL`.
When this error occurs, the function exits
and returns the given error code.
*/
@ -287,10 +280,10 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_RAND_SIGMA
\brief Неверно задано среднеквадратическое отклонение
нормального распределения случайной величины.
Среднеквадратическое отклонение должно быть
неотрицательным вещественным числом.
\brief The standard deviation is incorrect
normal distribution of a random variable.
The standard deviation should be
non-negative real number.
*/
@ -298,19 +291,19 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_RAND_TYPE
\brief Неизвестный датчик псевдослучайных чисел.
В библиотеке используются следующие датчики:
\li MRG32K3A -- 32 битный датчик MRG32K3A разработан Пьером Лекуэром.
\li MT19937-64 -- 64-битный датчик Вихрь Мерсенна.
\brief Unknown pseudorandom number genration algorithm.
The following algorithms are used in the library:
\li MRG32K3A -- 32 bit algortithm MRG32K3A was developed by Pierre Lecuer.
\li MT19937-64 -- 64-bit Mersenne Twister algorithm.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_RESAMPLE_RATIO
\brief Коэффициент передискретизации задан неверно.
Коэффициент передискретизации задается отношением \f$\frac{P}{Q}\f$, где
\f$P\f$ и \f$Q\f$ вещественные положительные числа.
\brief The resampling factor is set incorrectly.
The resampling factor is given by the relation \f$ \frac{P}{Q} \f$, where
\f$ P \f$ and \f$Q\f$ are real positive numbers.
*/
@ -318,9 +311,9 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_RESAMPLE_FRAC_DELAY
\brief Неверное значение дробной задержки.
Дробная задержка может принимать значения от -1 до 1, где 1 соответствует
одному интервалу дискретизации \f$1/F_{\textrm{s}}\f$.
\brief Invalid fractional delay value.
The fractional delay can take values from -1 to 1, where 1 corresponds to
one sampling interval \f$ 1 / F_{\textrm{s}} \f$.
*/
@ -329,12 +322,12 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_SIZE
\brief Ошибка при передаче размера массива.
Данная ошибка возникает когда помимо указателя
на массив входных или выходных данных передается неверный
размер массива (меньше или равный нулю).
При возникновении данной ошибки,
функция завершает работу и возвращает данный код ошибки.
\brief Error array size.
This error occurs when in addition to the pointer
the wrong input is passed to the input or output array
size (less than or equal to zero).
If this error occurs,
the function exits and returns the given error code.
*/
@ -342,8 +335,8 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_SYM_TYPE
\brief Ошибка параметра типа заполнения массивов в линейном или логарифмическом
масштабе. Допустимые типы заполнения: симметричный и периодический.
\brief Parameter error of type of filling arrays in linear or logarithmic scale.
Valid fill types are symmetric and periodic.
*/
@ -351,29 +344,28 @@
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_UNWRAP
\brief Ошибка параметров функции раскрытия периодичности.
Параметр периода и отступа должны быть положительными числами.
\brief Error in unwrap function.
The phase period and indent parameter must be positive numbers
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_WIN_PARAM
\brief Ошибка значения параметра оконной функции.
Для каждой параметрической оконной функции существуют допустимые значения
параметра.
\brief window function parameter error.
Valid parameter values exist for each parametric window function.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_WIN_SYM
\brief Симметричность или периодичность заданного окна не поддерживается.
\brief Symmetry or periodicity of a given window is not supported.
*/
/*!
\ingroup ERROR_CODE_GROUP
\def ERROR_WIN_TYPE
\brief Неизвестный тип оконной функции.
\brief Unknown window function type.
*/

Wyświetl plik

@ -6,80 +6,67 @@
/*! ****************************************************************************
\ingroup DFT_GROUP
\struct fft_t
\brief Структура данных объекта быстрого преобразования Фурье
\brief Fast Fourier Transform Object Data Structure
Структура хранит указатели на массивы поворотных коэффициентов
и массивы промежуточных данных алгоритма быстрого преобразования Фурье.
The structure stores pointers to twiddle factors and arrays of intermediate data of the fast Fourier transform algorithm.
Библиотека DSPL использует для БПФ алгоритм для составной длины
The DSPL library uses an FFT algorithm for composite size.
\param n
Размер вектора БПФ, для которого выделена память в массивах структуры. \n
Парметр `n` должен быть равен целой степени двойки. \n \n
The size of the FFT vector for which memory is allocated in the structure arrays. \n
The parameter `n` must be equal to an integer power of two (radix 2). \n \n
\param w
Указатель на вектор поворотных коэффициентов алгоритма БПФ. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена и массив поворотных коэффициентов
должен быть заполнен функцией \ref fft_create. \n \n
Pointer to the vector of twiddle factors. \n
The size of the vector is `[n x 1]`. \n
The memory must be allocated and an array of twiddle factors
must be filled with the \ref fft_create function. \n\n
\param t0
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена функцией \ref fft_create. \n \n
Pointer to the vector of intermediate results of the FFT algorithm. \n
The size of the vector is `[n x 1]`. \n
Memory must be allocated by \ref fft_create function. \n\n
\param t1
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена функцией \ref fft_create. \n \n
Структура заполняется функцией \ref fft_create один раз
до использования алгоритма БПФ. \n
Указатель на объект данной структуры может быть
многократно использован при вызове функций БПФ. \n
Перед выходом из программы выделенную память под поворотные
коэффициенты и массивы промежуточных данных
необходимо очистить функцией \ref fft_free. Например:
Pointer to the vector of intermediate results. \n
The size of the vector is `[n x 1]`. \n
The memory must be allocated with the \ref fft_create function. \n\n
The structure is populated with the \ref fft_create function once
before using the FFT algorithm. \n
A pointer to an object of this structure may be
reused when calling FFT functions. \n
Before exiting the program, dedicated memory for twiddle factors and arrays of intermediate data
must be cleared by the \ref fft_free function. For example:
\code
fft_t pfft; /* объявляем объект fft_t */
int n = 64; /* Размер БПФ */
/*
обнуляем все поля и указатели.
Данные шаг рекомендуется ввиду того, что некоторые
при создании переменной не инициализируют ее нулем.
*/
memset(&pfft, 0, sizeof(fft_t));
fft_t pfft = {0}; /* Structure fft_t and clear all fields */
int n = 64; /* FFT size */
int err;
/* создаем объект для 64-точечного БПФ */
/* Create and fill FFT structure for 64-points FFT */
err = fft_create(&pfft, n);
/* Вызов БПФ функции*/
/* Еще раз вызов БПФ функции */
/* FFT calculation here */
/* FFT calculation here one more */
/* ... */
/* очистить память объекта БПФ */
/* Clear fft structure */
fft_free(&pfft);
\endcode
\note
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
то он может быть использован только для БПФ размера `n`. \n\n
Также необходимо заметить, что функции БПФ самостоятельно контролируют размер,
и самостоятельно выделяют память объекта БПФ при необходимости.
Так если вызвать любую функцию использующую структуру `fft_t` с заполненными
данными для длины БПФ `k` для расчета БПФ длины `n`,
то массивы структуры будут автоматически пересозданы для длины `n`.
It is important to note that if the object `fft_t` was created for the FFT size equal to` n`,
it can only be used for FFT of size `n`. \n \n
Its also worth noting that the FFT functions independently control the size, and independently allocate the memory of the FFT object, if necessary.
So if you call any function using the `fft_t` structure with filled
data for the FFT length `k` for calculating the FFT of length`n`,
then the structure arrays will be automatically recreated for the length `n`.
\author
Бахурин Сергей.
www.dsplib.org
\author Sergey Bakhurin www.dsplib.org
***************************************************************************** */

Wyświetl plik

@ -36,7 +36,7 @@ groupdelay, impulse response and other.
\defgroup SPEC_MATH_TRANSCEND Transcendent math functions
\defgroup SPEC_MATH_ELLIP_GROUP Elliptic Jacoby functions of the real and complex arguments.
\defgroup SPEC_MATH_ELLIP_GROUP Elliptic Jacobi functions of the real and complex arguments.
\defgroup SPEC_MATH_RAND_GEN_GROUP Pseudo-random numbers generation
This group describes the functions of the pseudo-random numbers generation

Wyświetl plik

@ -1,10 +1,8 @@
/*! ****************************************************************************
\mainpage DSPL-2.0 - Digital Signal Processing Algorithm Library
.
\section sec_main_page DSPL-2.0 --- free DSP algorithm library
DSPL-2.0 --- opensource cross-platform digital
signal processing algorithm library, written in C language. \n

Wyświetl plik

@ -82,7 +82,7 @@
\brief Неверно заданы частоты преобразования ФНЧ-ПФ и ФНЧ-РФ.
Частотные маски полосовых и режекторных фильтров имеют две частоты среза
или частоты заграждения. При реализации частотных преобразований фильтров
необходимо задавать правую частоту среза меньше левой.
необходимо задавать левую частоту среза меньше правой.
*/
/*!

Wyświetl plik

@ -25,61 +25,9 @@
/*******************************************************************************
\ingroup FILTER_CONV_GROUP
\fn int conv(double* a, int na, double* b, int nb, double* c)
\brief Real vectors linear convolution.
Function convolves two real vectors \f$ c = a * b\f$ length `na` and `nb`.
The output convolution is a vector `c` with length equal to `na + nb - 1`.
\param[in] a Pointer to the first vector `a`. /n
Vector size is `[na x 1]`. /n /n
\param[in] na Size of the first vector `a`. /n /n
\param[in] b Pointer to the second vector `b`. /n
Vector size is `[nb x 1]`. /n /n
\param[in] nb Size of the second vector `b`. /n /n
\param[out] c Pointer to the convolution output vector \f$ c = a * b\f$. /n
Vector size is `[na + nb - 1 x 1]`. /n
Memory must be allocated. /n /n
\return `RES_OK` if convolution is calculated successfully. /n
Else \ref ERROR_CODE_GROUP "code error".
\note If vectors `a` and `b` are coefficients of two polynomials,
then convolution of the vectors `a` and `b` returns polynomial product
coefficients.
Example:
\code{.cpp}
double ar[3] = {1.0, 2.0, 3.0};
double br[4] = {3.0, -1.0, 2.0, 4.0};
double cr[6];
int n;
conv(ar, 3, br, 4, cr);
for(n = 0; n < 6; n++)
printf("cr[%d] = %5.1f\n", n, cr[n]);
\endcode
/n
Output:
\verbatim
cr[0] = 3.0
cr[1] = 5.0
cr[2] = 9.0
cr[3] = 5.0
cr[4] = 14.0
cr[5] = 12.0
\endverbatim
\author Sergey Bakhurin www.dsplib.org
Real vectors linear convolution.
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API conv(double* a, int na, double* b, int nb, double* c)
{
@ -122,61 +70,9 @@ int DSPL_API conv(double* a, int na, double* b, int nb, double* c)
/******************************************************************************
\ingroup FILTER_CONV_GROUP
\fn int conv_cmplx(complex_t* a, int na, complex_t* b, int nb, complex_t* c)
\brief Complex vectors linear convolution.
Function convolves two complex vectors \f$ c = a * b\f$ length `na` and `nb`.
The output convolution is a vector `c` with length equal to `na + nb - 1`.
\param[in] a Pointer to the first vector `a`. /n
Vector size is `[na x 1]`. /n /n
\param[in] na Size of the first vector `a`. /n /n
\param[in] b Pointer to the second vector `b`. /n
Vector size is `[nb x 1]`. /n /n
\param[in] nb Size of the second vector `b`. /n /n
\param[out] c Pointer to the convolution output vector \f$ c = a * b\f$. /n
Vector size is `[na + nb - 1 x 1]`. /n
Memory must be allocated. /n /n
\return `RES_OK` if convolution is calculated successfully. /n
Else \ref ERROR_CODE_GROUP "code error".
\note If vectors `a` and `b` are coefficients of two polynomials,
then convolution of the vectors `a` and `b` returns polynomial product
coefficients.
Example:
\code{.cpp}
complex_t ac[3] = {{0.0, 1.0}, {1.0, 1.0}, {2.0, 2.0}};
complex_t bc[4] = {{3.0, 3.0}, {4.0, 4.0}, {5.0, 5.0}, {6.0, 6.0}};
complex_t cc[6];
int n;
conv_cmplx(ac, 3, bc, 4, cc);
for(n = 0; n < 6; n++)
printf("cc[%d] = %5.1f%+5.1fj\n", n, RE(cc[n]),IM(cc[n]));
\endcode
/n
Output:
\verbatim
cc[0] = -3.0 +3.0j
cc[1] = -4.0+10.0j
cc[2] = -5.0+25.0j
cc[3] = -6.0+32.0j
cc[4] = 0.0+32.0j
cc[5] = 0.0+24.0j
\endverbatim
\author Sergey Bakhurin www.dsplib.org
Complex vectors linear convolution.
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API conv_cmplx(complex_t* a, int na, complex_t* b,
int nb, complex_t* c)
@ -224,75 +120,9 @@ int DSPL_API conv_cmplx(complex_t* a, int na, complex_t* b,
/******************************************************************************
\ingroup FILTER_CONV_GROUP
\fn int conv_fft(double* a, int na, double* b, int nb,
fft_t* pfft, int nfft, double* c)
\brief Real vectors fast linear convolution by using fast Fourier
transform algorithms
Function convolves two real vectors \f$ c = a * b\f$ length `na` and `nb`
in the frequency domain by using FFT algorithms. This approach provide
high-performance convolution which increases with `na` and `nb` increasing.
The output convolution is a vector `c` with length equal to `na + nb - 1`.
\param[in] a Pointer to the first vector `a`. /n
Vector size is `[na x 1]`. /n /n
\param[in] na Size of the first vector `a`. /n /n
\param[in] b Pointer to the second vector `b`. /n
Vector size is `[nb x 1]`. /n /n
\param[in] nb Size of the second vector `b`. /n /n
\param[in] pfft Pointer to the structure `fft_t`. /n
Function changes `fft_t` structure fields so `fft_t` must
be clear before program returns. /n /n
\param[in] nfft FFT size. /n
This parameter set which FFT size will be used
for overlapped frequency domain convolution. /n
FFT size must be more of minimal `na` and `nb` value.
For example if `na = 10`, `nb = 4` then `nfft` parameter must
be more than 4. /n
\param[out] c Pointer to the convolution output vector \f$ c = a * b\f$. /n
Vector size is `[na + nb - 1 x 1]`. /n
Memory must be allocated. /n /n
\return `RES_OK` if convolution is calculated successfully. /n
Else \ref ERROR_CODE_GROUP "code error". /n /n
Example:
\include conv_fft_test.c
Program output:
\verbatim
conv_fft error: 0x00000000
conv error: 0x00000000
c[ 0] = -0.00 d[ 0] = 0.00
c[ 1] = -0.00 d[ 1] = 0.00
c[ 2] = 1.00 d[ 2] = 1.00
c[ 3] = 4.00 d[ 3] = 4.00
c[ 4] = 10.00 d[ 4] = 10.00
c[ 5] = 20.00 d[ 5] = 20.00
c[ 6] = 35.00 d[ 6] = 35.00
c[ 7] = 56.00 d[ 7] = 56.00
c[ 8] = 77.00 d[ 8] = 77.00
c[ 9] = 98.00 d[ 9] = 98.00
c[ 10] = 119.00 d[ 10] = 119.00
c[ 11] = 140.00 d[ 11] = 140.00
c[ 12] = 161.00 d[ 12] = 161.00
c[ 13] = 182.00 d[ 13] = 182.00
c[ 14] = 190.00 d[ 14] = 190.00
c[ 15] = 184.00 d[ 15] = 184.00
c[ 16] = 163.00 d[ 16] = 163.00
c[ 17] = 126.00 d[ 17] = 126.00
c[ 18] = 72.00 d[ 18] = 72.00
\endverbatim
\author Sergey Bakhurin www.dsplib.org
Real vectors fast linear convolution by using fast Fourier transform
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API conv_fft(double* a, int na, double* b, int nb,
fft_t* pfft, int nfft, double* c)

Wyświetl plik

@ -26,65 +26,9 @@
/******************************************************************************
\ingroup DFT_GROUP
\fn int dft(double* x, int n, complex_t* y)
\brief `n`-points discrete Fourier transform of the real vector `x`.
Function calculates \f$ n \f$-points discrete Fourier transform of
the real vector \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
\f[
Y(k) = \sum_{m = 0}^{n-1} x(m)
\exp \left( -j \frac{2\pi}{n} m k \right),
\f]
here \f$ k = 0 \ldots n-1 \f$.
\param[in] x Pointer to the real input
signal vector \f$x(m)\f$,
\f$ m = 0 \ldots n-1 \f$. \n
Vector size is `[n x 1]`. \n \n
\param[in] n DFT size \f$n\f$ (size of input and output vectors). \n \n
\param[out] y Pointer to the complex DFT output vector \f$Y(k)\f$,
\f$ k = 0 \ldots n-1 \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return `RES_OK` if DFT is calculated successfully. \n
Else \ref ERROR_CODE_GROUP "code error".
Example:
\include dft_test.c
Program output:
\verbatim
y[ 0] = 120.000 0.000
y[ 1] = -8.000 40.219
y[ 2] = -8.000 19.314
y[ 3] = -8.000 11.973
y[ 4] = -8.000 8.000
y[ 5] = -8.000 5.345
y[ 6] = -8.000 3.314
y[ 7] = -8.000 1.591
y[ 8] = -8.000 0.000
y[ 9] = -8.000 -1.591
y[10] = -8.000 -3.314
y[11] = -8.000 -5.345
y[12] = -8.000 -8.000
y[13] = -8.000 -11.973
y[14] = -8.000 -19.314
y[15] = -8.000 -40.219
\endverbatim
\note
This function uses naive DFT algorithm and requires \f$ n^2 \f$
operations. You can use fast Fourier transform algorithms
for DFT performance improvement.
\author Sergey Bakhurin www.dsplib.org
`n`-points discrete Fourier transform of the real vector `x`.
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API dft(double* x, int n, complex_t* y)
{
@ -118,65 +62,9 @@ int DSPL_API dft(double* x, int n, complex_t* y)
/******************************************************************************
\ingroup DFT_GROUP
\fn int dft_cmplx(complex_t* x, int n, complex_t* y)
\brief `n`-points discrete Fourier transform of the complex vector `x`.
Function calculates \f$ n \f$-points discrete Fourier transform of
the complex vector \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
\f[
Y(k) = \sum_{m = 0}^{n-1} x(m)
\exp \left( -j \frac{2\pi}{n} m k \right),
\f]
here \f$ k = 0 \ldots n-1 \f$.
\param[in] x Pointer to the complex input
signal vector \f$x(m)\f$,
\f$ m = 0 \ldots n-1 \f$. \n
Vector size is `[n x 1]`. \n \n
\param[in] n DFT size \f$n\f$ (size of input and output vectors). \n \n
\param[out] y Pointer to the complex DFT output vector \f$Y(k)\f$,
\f$ k = 0 \ldots n-1 \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return `RES_OK` if DFT is calculated successfully. \n
Else \ref ERROR_CODE_GROUP "code error".
Example:
\include dft_cmplx_test.c
Program output:
\verbatim
y[ 0] = 120.000 0.000
y[ 1] = -8.000 40.219
y[ 2] = -8.000 19.314
y[ 3] = -8.000 11.973
y[ 4] = -8.000 8.000
y[ 5] = -8.000 5.345
y[ 6] = -8.000 3.314
y[ 7] = -8.000 1.591
y[ 8] = -8.000 0.000
y[ 9] = -8.000 -1.591
y[10] = -8.000 -3.314
y[11] = -8.000 -5.345
y[12] = -8.000 -8.000
y[13] = -8.000 -11.973
y[14] = -8.000 -19.314
y[15] = -8.000 -40.219
\endverbatim
\note
This function uses naive DFT algorithm and requires \f$ n^2 \f$
operations. You can use fast Fourier transform algorithms
for DFT performance improvement.
\author Sergey Bakhurin www.dsplib.org
`n`-points discrete Fourier transform of the complex vector `x`.
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API dft_cmplx(complex_t* x, int n, complex_t* y)
{
@ -214,65 +102,9 @@ int DSPL_API dft_cmplx(complex_t* x, int n, complex_t* y)
/******************************************************************************
\ingroup DFT_GROUP
\fn int idft_cmplx(complex_t* x, int n, complex_t* y)
\brief `n`-points inverse discrete Fourier transform of the complex vector `x`.
Function calculates \f$ n \f$-points inverse discrete Fourier transform of
the complex vector \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$. \n
\f[
y(k) = \sum_{m = 0}^{n-1} x(m)
\exp \left( j \frac{2\pi}{n} m k \right),
\f]
here \f$ k = 0 \ldots n-1 \f$.
\param[in] x Pointer to the complex input
vector \f$x(m)\f$,
\f$ m = 0 \ldots n-1 \f$. \n
Vector size is `[n x 1]`. \n \n
\param[in] n IDFT size \f$n\f$ (size of input and output vectors). \n \n
\param[out] y Pointer to the complex IDFT output vector \f$y(k)\f$,
\f$ k = 0 \ldots n-1 \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return `RES_OK` if IDFT is calculated successfully. \n
Else \ref ERROR_CODE_GROUP "code error".
Example:
\include idft_cmplx_test.c
Program output:
\verbatim
x[ 0] = 0.000 +0.000j, z[ 0] = 0.000 -0.000
x[ 1] = 1.000 +0.000j, z[ 1] = 1.000 -0.000
x[ 2] = 2.000 +0.000j, z[ 2] = 2.000 -0.000
x[ 3] = 3.000 +0.000j, z[ 3] = 3.000 -0.000
x[ 4] = 4.000 +0.000j, z[ 4] = 4.000 -0.000
x[ 5] = 5.000 +0.000j, z[ 5] = 5.000 -0.000
x[ 6] = 6.000 +0.000j, z[ 6] = 6.000 -0.000
x[ 7] = 7.000 +0.000j, z[ 7] = 7.000 -0.000
x[ 8] = 8.000 +0.000j, z[ 8] = 8.000 -0.000
x[ 9] = 9.000 +0.000j, z[ 9] = 9.000 -0.000
x[10] = 10.000 +0.000j, z[10] = 10.000 -0.000
x[11] = 11.000 +0.000j, z[11] = 11.000 +0.000
x[12] = 12.000 +0.000j, z[12] = 12.000 +0.000
x[13] = 13.000 +0.000j, z[13] = 13.000 +0.000
x[14] = 14.000 +0.000j, z[14] = 14.000 +0.000
x[15] = 15.000 +0.000j, z[15] = 15.000 -0.000
\endverbatim
\note
This function uses naive IDFT algorithm and requires \f$ n^2 \f$
operations. You can use fast Fourier transform algorithms
for DFT performance improvement.
\author Sergey Bakhurin www.dsplib.org
`n`-points inverse discrete Fourier transform of the complex vector `x`.
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API idft_cmplx(complex_t* x, int n, complex_t* y)
{

Wyświetl plik

@ -26,37 +26,12 @@
#include "dspl.h"
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_acd(double* w, int n, double k, double* u)
\brief Inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$ of real vector argument
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$ of real vector `w`. \n
\param[in] w Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `w`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Inverse Jacobi elliptic function cd^-1(w, k) for the real argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_acd(double* w, int n, double k, double* u)
{
double lnd[ELLIP_ITER], t;
@ -91,37 +66,12 @@ int DSPL_API ellip_acd(double* w, int n, double k, double* u)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_acd_cmplx(complex_t* w, int n, double k, complex_t* u)
\brief Inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$ of complex vector argument
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$ of complex vector `w`. \n
\param[in] w Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `w`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{cd}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Inverse Jacobi elliptic function cd^-1(w, k) for the complex argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_acd_cmplx(complex_t* w, int n, double k, complex_t* u)
{
double lnd[ELLIP_ITER], t;
@ -177,36 +127,10 @@ int DSPL_API ellip_acd_cmplx(complex_t* w, int n, double k, complex_t* u)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_asn(double* w, int n, double k, double* u)
\brief Inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$ of real vector argument
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$ of real vector `w`. \n
\param[in] w Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `w`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Inverse Jacobi elliptic function sn^-1(w, k) for the real argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_asn(double* w, int n, double k, double* u)
{
double lnd[ELLIP_ITER], t;
@ -242,36 +166,10 @@ int DSPL_API ellip_asn(double* w, int n, double k, double* u)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_asn_cmplx(complex_t* w, int n, double k, complex_t* u)
\brief Inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$ of complex vector argument
Function calculates inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$ of complex vector `w`. \n
\param[in] w Pointer to the argument vector \f$ w \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `w`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] u Pointer to the vector of inverse Jacobi elliptic function
\f$ u = \textrm{sn}^{-1}(w, k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Inverse Jacobi elliptic function sn^-1(w, k) for the complex argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_asn_cmplx(complex_t* w, int n, double k, complex_t* u)
{
double lnd[ELLIP_ITER], t;
@ -326,37 +224,10 @@ int DSPL_API ellip_asn_cmplx(complex_t* w, int n, double k, complex_t* u)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
int ellip_cd(double* u, int n, double k, double* y)
\brief Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$ of real vector argument
Function calculates Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$ of real vector `u` and
elliptical modulus `k`. \n
\param[in] u Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `u`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Jacobi elliptic function cd(u*K(k), k) for the real argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_cd(double* u, int n, double k, double* y)
{
double lnd[ELLIP_ITER];
@ -390,37 +261,10 @@ int DSPL_API ellip_cd(double* u, int n, double k, double* y)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
int ellip_cd_cmplx(complex_t* u, int n, double k, complex_t* y)
\brief Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$ of complex vector argument
Function calculates Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$ of complex vector `u` and
elliptical modulus `k`. \n
\param[in] u Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `u`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{cd}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Jacobi elliptic function cd(u*K(k), k) for the complex argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_cd_cmplx(complex_t* u, int n, double k, complex_t* y)
{
double lnd[ELLIP_ITER], t;
@ -467,81 +311,11 @@ int DSPL_API ellip_cd_cmplx(complex_t* u, int n, double k, complex_t* y)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
\fn int ellip_landen(double k, int n, double* y)
\brief Function calculates complete elliptical integral
coefficients \f$ k_i \f$
Complete elliptical integral \f$ K(k) \f$ can be described as:
\f[
K(k) = \frac{\pi}{2} \prod_{i = 1}^{\infty}(1+k_i),
\f]
here \f$ k_i \f$ -- coefficients which calculated
iterative from \f$ k_0 = k\f$:
\f[
k_i =
\left(
\frac{k_{i-1}}
{
1+\sqrt{1-k_{i-1}^2}
}
\right)^2
\f]
This function calculates `n` fist coefficients \f$ k_i \f$, which can
be used for Complete elliptical integral.
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[in] n Number of \f$ k_i \f$ which need to calculate.\n
Parameter `n` is size of output vector `y`.\n
\param[out] y pointer to the real vector which keep \f$ k_i \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` -- successful exit, else \ref ERROR_CODE_GROUP "error code". \n
Example:
\include ellip_landen_test.c
Result:
\verbatim
i k[i]
1 4.625e-01
2 6.009e-02
3 9.042e-04
4 2.044e-07
5 1.044e-14
6 2.727e-29
7 1.859e-58
8 8.640e-117
9 1.866e-233
10 0.000e+00
11 0.000e+00
12 0.000e+00
13 0.000e+00
\endverbatim
\note Complete elliptical integral converges enough fast
if modulus \f$ k<1 \f$. There are 10 to 20 coefficients \f$ k_i \f$
are sufficient for practical applications
to ensure complete elliptic integral precision within EPS.
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Function calculates complete elliptical integral coefficients \f$ k_i \f$
by Landen transform
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_landen(double k, int n, double* y)
{
int i;
@ -568,8 +342,10 @@ int DSPL_API ellip_landen(double k, int n, double* y)
/*****************************************************************************
* Elliptic modular equation
******************************************************************************/
Elliptic modular equation
--------------------------------------------------------------------------------
Documented: NO, NO
*******************************************************************************/
int DSPL_API ellip_modulareq(double rp, double rs, int ord, double *k)
{
double ep, es, ke, kp, t, sn = 0.0;
@ -614,8 +390,11 @@ int DSPL_API ellip_modulareq(double rp, double rs, int ord, double *k)
/*****************************************************************************
* Elliptic rational function
******************************************************************************/
Elliptic rational function
--------------------------------------------------------------------------------
Documented: NO, NO
*******************************************************************************/
int DSPL_API ellip_rat(double* w, int n, int ord, double k, double* u)
{
double t, xi, w2, xi2, k2;
@ -663,37 +442,10 @@ int DSPL_API ellip_rat(double* w, int n, int ord, double k, double* u)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
int ellip_sn(double* u, int n, double k, double* y)
\brief Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$ of real vector argument
Function calculates Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$ of real vector `u` and
elliptical modulus `k`. \n
\param[in] u Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `u`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Jacobi elliptic function sn(u*K(k), k) for the real vector argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_sn(double* u, int n, double k, double* y)
{
double lnd[ELLIP_ITER];
@ -724,37 +476,10 @@ int DSPL_API ellip_sn(double* u, int n, double k, double* y)
/*****************************************************************************
\ingroup SPEC_MATH_ELLIP_GROUP
int ellip_sn_cmplx(complex_t* u, int n, double k, complex_t* y)
\brief Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$ of complex vector argument
Function calculates Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$ of complex vector `u` and
elliptical modulus `k`. \n
\param[in] u Pointer to the argument vector \f$ u \f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\param[in] n Size of vector `u`. \n
\param[in] k Elliptical modulus \f$ k \f$. \n
Elliptical modulus is real parameter,
which values can be from 0 to 1. \n \n
\param[out] y Pointer to the vector of Jacobi elliptic function
\f$ y = \textrm{sn}(u K(k), k)\f$. \n
Vector size is `[n x 1]`. \n
Memory must be allocated. \n \n
\return
`RES_OK` successful exit, else \ref ERROR_CODE_GROUP "error code". \n
\author Sergey Bakhurin www.dsplib.org
******************************************************************************/
Jacobi elliptic function sn(u*K(k), k) for the complex vector argument
--------------------------------------------------------------------------------
Documented: RU, EN
*******************************************************************************/
int DSPL_API ellip_sn_cmplx(complex_t* u, int n, double k, complex_t* y)
{
double lnd[ELLIP_ITER], t;