From 4054894f4621573f09feabbed3ad7735952b2671 Mon Sep 17 00:00:00 2001 From: Sergey Bakhurin Date: Thu, 18 Jul 2019 21:35:59 +0300 Subject: [PATCH] addded documenation for idft --- dspl/dox/ru/array.dox | 182 ++++++++++----------- dspl/dox/ru/cheby.dox | 44 ++--- dspl/dox/ru/complex.dox | 162 +++++++++--------- dspl/dox/ru/dft.dox | 70 ++++++++ dspl/dox/ru/ellipj.dox | 291 ++++++++++++++++----------------- dspl/src/dft.c | 60 ++++++- examples/src/idft_cmplx_test.c | 35 ++++ 7 files changed, 503 insertions(+), 341 deletions(-) create mode 100644 examples/src/idft_cmplx_test.c diff --git a/dspl/dox/ru/array.dox b/dspl/dox/ru/array.dox index 54d868a..7868d9d 100644 --- a/dspl/dox/ru/array.dox +++ b/dspl/dox/ru/array.dox @@ -5,33 +5,33 @@ \brief Конкатенация двух массивов данных Функция производит конкатенацию двух массивов. Пусть массивы `a` и `b` -заданы как векторы:
-`a = [a(0), a(1), ... a(na-1)]`,
-`b = [b(0), b(1), ... b(nb-1)]`,
-тогда результатом конкатенации будет вектор размера `na+nb` вида:
+заданы как векторы: \n +`a = [a(0), a(1), ... a(na-1)]`, \n +`b = [b(0), b(1), ... b(nb-1)]`, \n +тогда результатом конкатенации будет вектор размера `na+nb` вида: \n `c = [a(0), a(1), ... a(na-1), b(0), b(1), ... b(nb-1)]`. -\param[in] a Указатель на первый вектор `a`.
- Размер вектора `na` байт.

+\param[in] a Указатель на первый вектор `a`. \n + Размер вектора `na` байт. \n \n -\param[in] na Размер первого вектора `a` в байт.

+\param[in] na Размер первого вектора `a` в байт. \n \n -\param[in] b Указатель на второй вектор `b`.
- Размер памяти вектора `nb` байт.

+\param[in] b Указатель на второй вектор `b`. \n + Размер памяти вектора `nb` байт. \n \n -\param[in] nb Размер второго вектора `b` в байт.

+\param[in] nb Размер второго вектора `b` в байт. \n \n -\param[out] c Указатель на вектор конкатенации `c`.
- Размер памяти вектора `na + nb` байт.
- Память должна быть выделена.

+\param[out] c Указатель на вектор конкатенации `c`. \n + Размер памяти вектора `na + nb` байт. \n + Память должна быть выделена. \n \n \return -`RES_OK` если функция выполнена успешно.
+`RES_OK` если функция выполнена успешно. \n В противном случае \ref ERROR_CODE_GROUP "код ошибки". Функция использует указатели типа `void*` и может быть использована для -конкатенации данных различного типа.
+конкатенации данных различного типа. \n Например конкатенация массивов типа `double`: \code{.cpp} double a[3] = {1.0, 2.0, 3.0}; @@ -57,31 +57,31 @@ c = [1.0, 2.0, 3.0, 4.0, 5.0] \fn int decimate(double* x, int n, int d, double* y, int* cnt) \brief Децимация вещественного вектора данных -Функция производит децимацию вещественного вектора `x` в `d` раз.
+Функция производит децимацию вещественного вектора `x` в `d` раз. \n В результате выходной вектор `y` содержит значения: -`y(k) = x(k*d), k = 0...n/d-1`
+`y(k) = x(k*d), k = 0...n/d-1` \n -\param[in] x Указатель на вектор входных данных `x`.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на вектор входных данных `x`. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного вектора `x`.

+\param[in] n Размер входного вектора `x`. \n \n -\param[in] d Коэффициент децимации.
+\param[in] d Коэффициент децимации. \n В результате децимации из вектора `x` будет взять каждый - d-й элемент.

+ d-й элемент. \n \n -\param[out] y Указатель на децимированный вектор `y`.
+\param[out] y Указатель на децимированный вектор `y`. \n Размер выходного вектора равен `[n/d x 1]` - будет сохранен по адресу `cnt`.
- Память должна быть выделена.

+ будет сохранен по адресу `cnt`. \n + Память должна быть выделена. \n \n \param[out] cnt Указатель переменную, в которую будет сохранен - размер выходного вектора после децимации.
+ размер выходного вектора после децимации. \n Указатель может быть `NULL`, в этом случае - размер вектора `y` не возвращается.

+ размер вектора `y` не возвращается. \n \n \return -`RES_OK` если функция выполнена успешно.
+`RES_OK` если функция выполнена успешно. \n В противном случае \ref ERROR_CODE_GROUP "код ошибки". Пример децимации вещественного массива данных в 2 раза: @@ -109,31 +109,31 @@ c = [0.0, 2.0, 4.0, 6.0, 8.0] \fn int decimate_cmplx(complex_t* x, int n, int d, complex_t* y, int* cnt) \brief Децимация комплексного вектора данных -Функция производит децимацию комплексного вектора `x` в `d` раз.
+Функция производит децимацию комплексного вектора `x` в `d` раз. \n В результате выходной вектор `y` содержит значения: -`y(k) = x(k*d), k = 0...n/d-1`
+`y(k) = x(k*d), k = 0...n/d-1` \n -\param[in] x Указатель на вектор входных данных `x`.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на вектор входных данных `x`. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного вектора `x`.

+\param[in] n Размер входного вектора `x`. \n \n -\param[in] d Коэффициент децимации.
+\param[in] d Коэффициент децимации. \n В результате децимации из вектора `x` будет взять каждый - d-й элемент.

+ d-й элемент. \n \n -\param[out] y Указатель на децимированный вектор `y`.
+\param[out] y Указатель на децимированный вектор `y`. \n Размер выходного вектора равен `[n/d x 1]` - будет сохранен по адресу `cnt`.
- Память должна быть выделена.

+ будет сохранен по адресу `cnt`. \n + Память должна быть выделена. \n \n \param[out] cnt Указатель переменную, в которую будет сохранен - размер выходного вектора после децимации.
+ размер выходного вектора после децимации. \n Указатель может быть `NULL`, в этом случае - размер вектора `y` не возвращается.

+ размер вектора `y` не возвращается. \n \n \return -`RES_OK` если функция выполнена успешно.
+`RES_OK` если функция выполнена успешно. \n В противном случае \ref ERROR_CODE_GROUP "код ошибки". Пример децимации комплексного массива данных в 2 раза: @@ -162,28 +162,28 @@ c = [0.0+0.0j, 2.0+2.0j, 4.0+4.0j, 6.0+6.0j, 8.0+8.0j] \fn int find_max_abs(double* a, int n, double* m, int* ind) \brief Поиск максимального по модулю элемента вещественного вектора `a` -Функция производит поиск максимального по модулю значения вектора `a`.
+Функция производит поиск максимального по модулю значения вектора `a`. \n Максимальное по модулю значение `max|a[k]|` сохраняется по адресу `m`, а индекс -данного значения в векторе `a` сохраняется по адресу `ind`.
+данного значения в векторе `a` сохраняется по адресу `ind`. \n -\param[in] a Указатель на вещественный вектор `a`.
- Размер вектора `[n x 1]`.

+\param[in] a Указатель на вещественный вектор `a`. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного вектора `a`.

+\param[in] n Размер входного вектора `a`. \n \n \param[out] m Указатель на адрес памяти, в который сохранить - максимальное по модулю значение вектора `a`.
+ максимальное по модулю значение вектора `a`. \n Указатель может быть `NULL`, в этом случае - максимальное по модулю значение не сохраняется.

+ максимальное по модулю значение не сохраняется. \n \n \param[out] ind Указатель на переменную, в которую будет сохранен - индекс максимального по модулю значению вектора `a`.
+ индекс максимального по модулю значению вектора `a`. \n Указатель может быть `NULL`, в этом случае - индекс не возвращается.

+ индекс не возвращается. \n \n \return -`RES_OK` если функция выполнена успешно.
+`RES_OK` если функция выполнена успешно. \n В противном случае \ref ERROR_CODE_GROUP "код ошибки". Пример: @@ -207,8 +207,8 @@ c = [0.0+0.0j, 2.0+2.0j, 4.0+4.0j, 6.0+6.0j, 8.0+8.0j] \brief Функция отражения вещественного вектора `x` Функция производит отражение вещественного вектора длины `n` -в памяти данных.
-Например исходный вектор `x` длины 6:
+в памяти данных. \n +Например исходный вектор `x` длины 6: \n \verbatim x = [0, 1, 2, 3, 4, 5] \endverbatim @@ -217,14 +217,14 @@ x = [0, 1, 2, 3, 4, 5] x = [5, 4, 3, 2, 1, 0] \endverbatim -\param[in, out] x Указатель на вещественный вектор `x`.
- Размер вектора `[n x 1]`.
- Результат отражения будет помещен по этому же адресу.
+\param[in, out] x Указатель на вещественный вектор `x`. \n + Размер вектора `[n x 1]`. \n + Результат отражения будет помещен по этому же адресу. \n -\param[in] n Размер вектора `x`.

+\param[in] n Размер вектора `x`. \n \n \return -`RES_OK` если функция выполнена успешно.
+`RES_OK` если функция выполнена успешно. \n В противном случае \ref ERROR_CODE_GROUP "код ошибки". Пример: @@ -238,7 +238,7 @@ printf("\n"); for(i = 0; i < 5; i++) printf("%6.1f ", x[i]); \endcode -
+ \n Результат выполнения: \verbatim 0.0 1.0 2.0 3.0 4.0 @@ -256,8 +256,8 @@ for(i = 0; i < 5; i++) \brief Функция отражения комплексного вектора `x` Функция производит отражение комплексного вектора длины `n` -в памяти данных.
-Например исходный вектор `x` длины 6:
+в памяти данных. \n +Например исходный вектор `x` длины 6: \n \verbatim x = [0+0j, 1+1j, 2+2j, 3+3j, 4+4j, 5+5j] \endverbatim @@ -266,14 +266,14 @@ x = [0+0j, 1+1j, 2+2j, 3+3j, 4+4j, 5+5j] x = [5+5j, 4+4j, 3+3j, 2+2j, 1+1j, 0+0j] \endverbatim -\param[in, out] x Указатель на комплексный вектор `x`.
- Размер вектора `[n x 1]`.
- Результат отражения будет помещен по этому же адресу.
+\param[in, out] x Указатель на комплексный вектор `x`. \n + Размер вектора `[n x 1]`. \n + Результат отражения будет помещен по этому же адресу. \n -\param[in] n Размер вектора `x`.

+\param[in] n Размер вектора `x`. \n \n \return -`RES_OK` если функция выполнена успешно.
+`RES_OK` если функция выполнена успешно. \n В противном случае \ref ERROR_CODE_GROUP "код ошибки". Пример: @@ -286,7 +286,7 @@ printf("\n"); for(i = 0; i < 5; i++) printf("%6.1f%+.1fj ", RE(y[i]), IM(y[i])); \endcode -
+ \n Результат выполнения: \verbatim 0.0+0.0j 1.0+1.0j 2.0+2.0j 3.0+3.0j 4.0+4.0j @@ -315,33 +315,33 @@ e = \max(|x(k) - y(k)| ), ~\qquad \quad~|x(k)| = 0, \f] и возвращает `DSPL_VERIF_SUCCESS` если разница \f$ e\f$ меньше `eps`. -В противном случае возвращает `DSPL_VERIF_FAILED`.
+В противном случае возвращает `DSPL_VERIF_FAILED`. \n Данная функция используется для верификации работы алгоритмов если вектор `x` результат работы алгоритма пользователя, а `y` -- результат работы этого же алгоритма сторонней функцией. -\param[in] x Указатель на первый вектор `x`.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на первый вектор `x`. \n + Размер вектора `[n x 1]`. \n \n -\param[in] y Указатель на второй вектор `y`.
- Размер вектора `[n x 1]`.

+\param[in] y Указатель на второй вектор `y`. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер векторов `x` и `y`.

+\param[in] n Размер векторов `x` и `y`. \n \n -\param[in] eps Допустимая относительная ошибка.
+\param[in] eps Допустимая относительная ошибка. \n Если максимальная относительная ошибка меньше `eps`, то функция возвращает `DSPL_VERIF_SUCCESS`, в противном случае - `DSPL_VERIF_FAILED`.

+ `DSPL_VERIF_FAILED`. \n \n \param[in, out] err Указатель на переменную максимальной - относительной ошибки.
+ относительной ошибки. \n По данному адресу будет записано значение максимальной - относительной ошибки.
+ относительной ошибки. \n Указатель может быть `NULL`, значение ошибки в этом - случае не возвращается.

+ случае не возвращается. \n \n \return -`DSPL_VERIF_SUCCESS` если относительная ошибка меньше `eps`.
+`DSPL_VERIF_SUCCESS` если относительная ошибка меньше `eps`. \n В противном случае `DSPL_VERIF_FAILED`. \author Бахурин Сергей www.dsplib.org @@ -369,33 +369,33 @@ e = \max(|x(k) - y(k)| ), ~\qquad \quad~|x(k)| = 0, \f] и возвращает `DSPL_VERIF_SUCCESS` если разница \f$ e\f$ меньше `eps`. -В противном случае возвращает `DSPL_VERIF_FAILED`.
+В противном случае возвращает `DSPL_VERIF_FAILED`. \n Данная функция используется для верификации работы алгоритмов если вектор `x` результат работы алгоритма пользователя, а `y` -- результат работы этого же алгоритма сторонней функцией. -\param[in] x Указатель на первый вектор `x`.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на первый вектор `x`. \n + Размер вектора `[n x 1]`. \n \n -\param[in] y Указатель на второй вектор `y`.
- Размер вектора `[n x 1]`.

+\param[in] y Указатель на второй вектор `y`. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер векторов `x` и `y`.

+\param[in] n Размер векторов `x` и `y`. \n \n -\param[in] eps Допустимая относительная ошибка.
+\param[in] eps Допустимая относительная ошибка. \n Если максимальная относительная ошибка меньше `eps`, то функция возвращает `DSPL_VERIF_SUCCESS`, в противном случае - `DSPL_VERIF_FAILED`.

+ `DSPL_VERIF_FAILED`. \n \n \param[in, out] err Указатель на переменную максимальной - относительной ошибки.
+ относительной ошибки. \n По данному адресу будет записано значение максимальной - относительной ошибки.
+ относительной ошибки. \n Указатель может быть `NULL`, значение ошибки в этом - случае не возвращается.

+ случае не возвращается. \n \n \return -`DSPL_VERIF_SUCCESS` если функция выполнена успешно.
+`DSPL_VERIF_SUCCESS` если функция выполнена успешно. \n В противном случае `DSPL_VERIF_FAILED`. \author Бахурин Сергей www.dsplib.org diff --git a/dspl/dox/ru/cheby.dox b/dspl/dox/ru/cheby.dox index 679e878..12d3419 100644 --- a/dspl/dox/ru/cheby.dox +++ b/dspl/dox/ru/cheby.dox @@ -13,29 +13,29 @@ C_ord(x) = 2 x C_{ord-1}(x) - C_{ord-2}(x), где \f$ C_0(x) = 1 \f$, \f$ C_1(x) = x\f$ \param[in] x Указатель на вектор `x` аргумента полинома - Чебышева первого рода.
- Размер вектора `[n x 1]`.

+ Чебышева первого рода. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер векторов `x` и `y`.

+\param[in] n Размер векторов `x` и `y`. \n \n -\param[in] ord Порядок полинома Чебышева первого рода.

+\param[in] ord Порядок полинома Чебышева первого рода. \n \n \param[out] y Указатель на вектор значений полинома Чебышева, - соответствующих аргументу `x`.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.

+ соответствующих аргументу `x`. \n + Размер вектора `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` Расчет произведен успешно.
-В противном случае \ref ERROR_CODE_GROUP "код ошибки".
+`RES_OK` Расчет произведен успешно. \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n Пример использования функции: \include cheby_poly1_test.c -

+ \n \n В каталоге `dat` будут созданы текстовые файлы значений -полиномов порядка 1-4:
+полиномов порядка 1-4: \n
 cheby_poly1_ord1.txt
@@ -72,29 +72,29 @@ U_{ord}(x) = 2 x U_{ord-1}(x) - U_{ord-2}(x),
 где \f$ U_0(x) = 1 \f$, \f$ U_1(x) = 2x\f$
 
 \param[in] x        Указатель на вектор `x` аргумента полинома 
-                    Чебышева второго рода.
- Размер вектора `[n x 1]`.

+ Чебышева второго рода. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер векторов `x` и `y`.

+\param[in] n Размер векторов `x` и `y`. \n \n -\param[in] ord Порядок полинома Чебышева второго рода.

+\param[in] ord Порядок полинома Чебышева второго рода. \n \n \param[out] y Указатель на вектор значений полинома Чебышева, - соответствующих аргументу `x`.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.

+ соответствующих аргументу `x`. \n + Размер вектора `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` Расчет произведен успешно.
-В противном случае \ref ERROR_CODE_GROUP "код ошибки".
+`RES_OK` Расчет произведен успешно. \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n Пример использования функции: \include cheby_poly2_test.c -

+ \n \n В каталоге `dat` будут созданы текстовые файлы значений -полиномов порядка 1-4:
+полиномов порядка 1-4: \n
 cheby_poly2_ord1.txt
diff --git a/dspl/dox/ru/complex.dox b/dspl/dox/ru/complex.dox
index 903ac80..27656c4 100644
--- a/dspl/dox/ru/complex.dox
+++ b/dspl/dox/ru/complex.dox
@@ -131,27 +131,27 @@
 \brief  Арккосинус комплексного аргумента `x`
 
 Функция рассчитывает значения арккосинуса комплексного аргумента, 
-заданного вектором `x` длины `n`: 
+заданного вектором `x` длины `n`: \n \f[ \textrm{Arccos}(x) = \frac{\pi}{2} - \textrm{Arcsin}(x) = \frac{\pi}{2} -j \textrm{Ln}\left( j x + \sqrt{1 - x^2} \right) \f] -\param[in] x Указатель на вектор аргумента комплексного арккосинуса.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на вектор аргумента комплексного арккосинуса. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного и выходного векторов `x` и `y`.

+\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n \param[out] y Указатель на вектор значений комплексного арккосинуса, - соответствующего входному вектору `x`.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+ соответствующего входному вектору `x`. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` если значение функции рассчитано успешно .
-В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+`RES_OK` если значение функции рассчитано успешно . \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n \note Функция может использоваться для расчета арккосинуса аргумента большего единицы, когда вещественная функция `acos` не определена. @@ -168,7 +168,7 @@ printf("acos_cmplx(%.1f%+.1fj) = %.3f%+.3fj\n", RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k])); \endcode -
+ \n Результатом работы будет @@ -192,26 +192,26 @@ acos_cmplx(5.0+6.0j) = 0.880-2.749j \brief Арксинус комплексного аргумента `x` Функция рассчитывает значения арксинуса комплексного аргумента, -заданного вектором `x` длины `n`:
+заданного вектором `x` длины `n`: \n \f[ \textrm{Arcsin}(x) = j \textrm{Ln}\left( j x + \sqrt{1 - x^2} \right) \f] -\param[in] x Указатель на вектор аргумента комплексного арксинуса.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на вектор аргумента комплексного арксинуса. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного и выходного векторов `x` и `y`.

+\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n \param[out] y Указатель на вектор значений комплексного арксинуса, - соответствующего входному вектору `x`.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+ соответствующего входному вектору `x`. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` если значение функции рассчитано успешно .
-В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+`RES_OK` если значение функции рассчитано успешно . \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n \note Функция может использоваться для расчета арксинуса аргумента большего единицы, когда вещественная функция `acos` не определена. @@ -227,7 +227,7 @@ acos_cmplx(5.0+6.0j) = 0.880-2.749j printf("asin_cmplx(%.1f%+.1fj) = %.3f%+.3fj\n", RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k])); \endcode -
+ \n Результатом работы будет @@ -255,25 +255,25 @@ asin_cmplx(5.0+6.0j) = 0.691+2.749j исходного массива Функция заполняет реальные массивы `re` и `im` соответствующими значениями -реальной и мнимой частей исходного комплексного массива `x`.
+реальной и мнимой частей исходного комплексного массива `x`. \n -\param[in] x Указатель на массив комплексных данных.
- Размер массива `[n x 1]`.

+\param[in] x Указатель на массив комплексных данных. \n + Размер массива `[n x 1]`. \n \n -\param[in] n Размер массивов входных и выходных данных.

+\param[in] n Размер массивов входных и выходных данных. \n \n -\param[out] re Указатель на адрес массива реальной части данных.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+\param[out] re Указатель на адрес массива реальной части данных. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n -\param[out] im Указатель на адрес массива мнимой части данных.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+\param[out] im Указатель на адрес массива мнимой части данных. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return - `RES_OK` если преобразование произведено успешно.
- В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+ `RES_OK` если преобразование произведено успешно. \n + В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n Например при выполнении следующего кода \code{.cpp} @@ -306,26 +306,26 @@ re[2] = 5.0; im[2] = 6.0; \brief Косинус комплексного аргумента `x` Функция рассчитывает значения косинуса комплексного аргумента, -заданного вектором `x` длины `n`:
+заданного вектором `x` длины `n`: \n \f[ \textrm{cos}(x) = \frac{\exp(jx) + \exp(-jx)}{2} \f] -\param[in] x Указатель на вектор аргумента комплексного косинуса.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на вектор аргумента комплексного косинуса. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного и выходного векторов `x` и `y`.

+\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n \param[out] y Указатель на вектор значений комплексного косинуса, - соответствующего входному вектору `x`.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+ соответствующего входному вектору `x`. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` если значение функции рассчитано успешно .
-В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+`RES_OK` если значение функции рассчитано успешно . \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n Например при выполнении следующего кода \code{.cpp} @@ -341,7 +341,7 @@ re[2] = 5.0; im[2] = 6.0; RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k])); \endcode -
+ \n Результатом работы будет @@ -364,26 +364,26 @@ cos_cmplx(5.0+6.0j) = 57.219 +193.428j \brief Натуральный логарифм комплексного аргумента `x` Функция рассчитывает значения натурального логарифма комплексного аргумента, -заданного вектором `x` длины `n`:
+заданного вектором `x` длины `n`: \n \f[ \textrm{Ln}(x) = j \varphi + \ln(|x|), \f] где \f$\varphi\f$ - фаза комплексного числа. -\param[in] x Указатель на комплексный вектор аргумента логарифма.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на комплексный вектор аргумента логарифма. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного и выходного векторов `x` и `y`.

+\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n \param[out] y Указатель на вектор значений комплексного логарифма, - соответствующего входному вектору `x`.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+ соответствующего входному вектору `x`. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` если значение функции рассчитано успешно.
-В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+`RES_OK` если значение функции рассчитано успешно. \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n Например при выполнении следующего кода \code{.cpp} @@ -398,7 +398,7 @@ cos_cmplx(5.0+6.0j) = 57.219 +193.428j RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k])); \endcode -
+ \n Результатом работы будет @@ -426,22 +426,22 @@ log_cmplx(5.0+6.0j) = 2.055+0.876j \brief Преобразование массива вещественных данных в массив комплексных данных. Функция заполняет реальные части массива `y` данных соответсвующими значениями -исходного вещественного массива `x`.
+исходного вещественного массива `x`. \n -\param[in] x Указатель на массив вещественных данных.
- Размер массива `[n x 1]`.

+\param[in] x Указатель на массив вещественных данных. \n + Размер массива `[n x 1]`. \n \n -\param[in] n Размер массивов входных и выходных данных.

+\param[in] n Размер массивов входных и выходных данных. \n \n -\param[out] y Указатель на адрес массива комплексных данных.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+\param[out] y Указатель на адрес массива комплексных данных. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` если преобразование произведено успешно.
-В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+`RES_OK` если преобразование произведено успешно. \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n @@ -475,26 +475,26 @@ log_cmplx(5.0+6.0j) = 2.055+0.876j \brief Синус комплексного аргумента `x` Функция рассчитывает значения синуса комплексного аргумента, -заданного вектором `x` длины `n`:
+заданного вектором `x` длины `n`: \n \f[ \textrm{sin}(x) = \frac{\exp(jx) - \exp(-jx)}{2j} \f] -\param[in] x Указатель на вектор аргумента комплексного синуса.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на вектор аргумента комплексного синуса. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного и выходного векторов `x` и `y`.

+\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n \param[out] y Указатель на вектор значений комплексного синуса, - соответствующего входному вектору `x`.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+ соответствующего входному вектору `x`. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` если значение функции рассчитано успешно .
-В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+`RES_OK` если значение функции рассчитано успешно . \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n Например при выполнении следующего кода \code{.cpp} @@ -509,7 +509,7 @@ log_cmplx(5.0+6.0j) = 2.055+0.876j RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k])); \endcode -
+ \n Результатом работы будет @@ -532,26 +532,26 @@ sin_cmplx(5.0+6.0j) = -193.430 +57.218j \brief Квадратный корень из комплексного вектора `x` (поэлементный). Функция рассчитывает значения квадратного корня комплексного аргумента, -заданного вектором `x` длины `n`:
+заданного вектором `x` длины `n`: \n \f[ y(k) = \sqrt{x(k)}, \qquad k = 0 \ldots n-1. \f] -\param[in] x Указатель на вектор аргумента квадратного корня.
- Размер вектора `[n x 1]`.

+\param[in] x Указатель на вектор аргумента квадратного корня. \n + Размер вектора `[n x 1]`. \n \n -\param[in] n Размер входного и выходного векторов `x` и `y`.

+\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n \param[out] y Указатель на вектор значений комплексного корня, - соответствующего входному вектору `x`.
- Размер массива `[n x 1]`.
- Память должна быть выделена.

+ соответствующего входному вектору `x`. \n + Размер массива `[n x 1]`. \n + Память должна быть выделена. \n \n \return -`RES_OK` если значение функции рассчитано успешно .
-В противном случае \ref ERROR_CODE_GROUP "код ошибки":
+`RES_OK` если значение функции рассчитано успешно . \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n Например при выполнении следующего кода \code{.cpp} @@ -566,7 +566,7 @@ y(k) = \sqrt{x(k)}, \qquad k = 0 \ldots n-1. RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k])); \endcode -
+ \n Результатом работы будет diff --git a/dspl/dox/ru/dft.dox b/dspl/dox/ru/dft.dox index 62ccf31..737cda7 100644 --- a/dspl/dox/ru/dft.dox +++ b/dspl/dox/ru/dft.dox @@ -135,3 +135,73 @@ + +/*! **************************************************************************** +\ingroup DFT_GROUP +\fn int idft_cmplx(complex_t* x, int n, complex_t* y) +\brief Обратное дискретное преобразование Фурье комплексного спектра. + +Функция рассчитывает \f$ n \f$-точечное обратное дискретное преобразование Фурье +комплексного спектра \f$ x(m) \f$, \f$ m = 0 \ldots n-1 \f$.
+\f[ + 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$. + +\param[in] x Указатель на вектор входного комплексного + спектра сигнала \f$x(m)\f$, + \f$ m = 0 \ldots n-1 \f$.
+ Размер вектора `[n x 1]`.

+ +\param[in] n Размер ОДПФ \f$n\f$ (размер векторов входного + спектра и результата ОДПФ).

+ +\param[out] y Указатель на комплексный вектор + результата ОДПФ \f$y(k)\f$, + \f$ k = 0 \ldots n-1 \f$. + Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ + +\return +`RES_OK` если ОДПФ рассчитана успешно.
+ В противном случае \ref ERROR_CODE_GROUP "код ошибки". + +Пример использования функции `dft_cmplx`: + +\include idft_cmplx_test.c + +Результат работы программы: + +\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 +Данная функция выполняет расчет ОДПФ наивным методом +и требует \f$ n^2 \f$ комплексных умножений.
+Для увеличения скорости расчета рекомендуется +использовать алгоритмы быстрого преобразования Фурье. + +\author Бахурин Сергей. www.dsplib.org +***************************************************************************** */ + + + + diff --git a/dspl/dox/ru/ellipj.dox b/dspl/dox/ru/ellipj.dox index 974a618..bdc352f 100644 --- a/dspl/dox/ru/ellipj.dox +++ b/dspl/dox/ru/ellipj.dox @@ -2,42 +2,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$ вещественного аргумента +\fn int ellip_acd(double* w, int n, double k, double* u) +\brief Обратная эллиптическая функция Якоби + \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] n Размер вектора `w`.

- -\param[in] k Значение эллиптического модуля \f$ k \f$.
- Эллиптический модуль -- вещественный параметр, - принимающий значения от 0 до 1.

- +\param[in] w Указатель на массив вектора переменной \f$ w \f$. \n + Размер вектора `[n x 1]`. \n + Память должна быть выделена. \n \n + +\param[in] n Размер вектора `w`. \n + +\param[in] k Значение эллиптического модуля \f$ k \f$. + Эллиптический модуль -- вещественный параметр, + принимающий значения от 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` Расчет произведен успешно.
- В противном случае - \ref ERROR_CODE_GROUP "код ошибки".
+`RES_OK` Расчет произведен успешно. \n +В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n \author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -49,42 +48,42 @@ /*! **************************************************************************** \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 Обратная эллиптическая функция Якоби + \f$ u = \textrm{cd}^{-1}(w, k)\f$ комплексного аргумента Функция рассчитывает занчения значения обратной эллиптической функции \f$ u = \textrm{cd}^{-1}(w, k)\f$ для комплексного вектора `w`.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.
- + -\param[in] w Указатель на массив вектора переменной \f$ w \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.

- -\param[in] n Размер вектора `w`.

- -\param[in] k Значение эллиптического модуля \f$ k \f$.
- Эллиптический модуль -- вещественный параметр, - принимающий значения от 0 до 1.

- +\param[in] w Указатель на массив вектора переменной \f$ w \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `w`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ -\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 x 1]`.
+ Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
- В противном случае - \ref ERROR_CODE_GROUP "код ошибки".
+ `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
\author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -96,42 +95,42 @@ /*! **************************************************************************** \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$ вещественного аргумента +\fn int ellip_asn(double* w, int n, double k, double* u) +\brief Обратная эллиптическая функция Якоби + \f$ u = \textrm{sn}^{-1}(w, k)\f$ вещественного аргумента Функция рассчитывает занчения значения обратной эллиптической функции \f$ u = \textrm{sn}^{-1}(w, k)\f$ для вещественного вектора `w`.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.
- + -\param[in] w Указатель на массив вектора переменной \f$ w \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.

- -\param[in] n Размер вектора `w`.

- -\param[in] k Значение эллиптического модуля \f$ k \f$.
- Эллиптический модуль -- вещественный параметр, - принимающий значения от 0 до 1.

- +\param[in] w Указатель на массив вектора переменной \f$ w \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `w`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
+ Эллиптический модуль -- вещественный параметр, + принимающий значения от 0 до 1.

+ -\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 x 1]`.
+ Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
- В противном случае - \ref ERROR_CODE_GROUP "код ошибки".
+ `RES_OK` Расчет произведен успешно.
+ В противном случае + \ref ERROR_CODE_GROUP "код ошибки".
\author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -143,42 +142,42 @@ /*! **************************************************************************** \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 Обратная эллиптическая функция Якоби + \f$ u = \textrm{sn}^{-1}(w, k)\f$ комплексного аргумента Функция рассчитывает занчения значения обратной эллиптической функции \f$ u = \textrm{sn}^{-1}(w, k)\f$ для комплексного вектора `w`.
Для расчета используется итерационный алгоритм на основе преобразования Ландена.
- + -\param[in] w Указатель на массив вектора переменной \f$ w \f$.
- Размер вектора `[n x 1]`.
- Память должна быть выделена.

- -\param[in] n Размер вектора `w`.

- -\param[in] k Значение эллиптического модуля \f$ k \f$.
+\param[in] w Указатель на массив вектора переменной \f$ w \f$.
+ Размер вектора `[n x 1]`.
+ Память должна быть выделена.

+ +\param[in] n Размер вектора `w`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
Эллиптический модуль -- вещественный параметр, принимающий значения от 0 до 1.

- + -\param[out] u Указатель на вектор значений обратной эллиптической +\param[out] u Указатель на вектор значений обратной эллиптической функции \f$ u = \textrm{sn}^{-1}(w, k)\f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно.
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
\author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -190,8 +189,8 @@ /*! **************************************************************************** \ingroup SPEC_MATH_ELLIP_GROUP -\fn int ellip_cd(double* u, int n, double k, double* y) -\brief Эллиптическая функция Якоби +\fn int ellip_cd(double* u, int n, double k, double* y) +\brief Эллиптическая функция Якоби \f$ y = \textrm{cd}(u K(k), k)\f$ вещественного аргумента Функция рассчитывает занчения значения эллиптической функции @@ -200,33 +199,33 @@ Для расчета используется итерационный алгоритм на основе преобразования Ландена.
- + -\param[in] u Указатель на массив вектора переменной \f$ u \f$.
+\param[in] u Указатель на массив вектора переменной \f$ u \f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

- -\param[in] n Размер вектора `u`.

- -\param[in] k Значение эллиптического модуля \f$ k \f$.
+ +\param[in] n Размер вектора `u`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
Эллиптический модуль -- вещественный параметр, принимающий значения от 0 до 1.

- + -\param[out] y Указатель на вектор значений эллиптической +\param[out] y Указатель на вектор значений эллиптической функции \f$ y = \textrm{cd}(u K(k), k)\f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно.
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
\author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -239,8 +238,8 @@ /*! **************************************************************************** \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$ комплексного аргумента +\brief Эллиптическая функция Якоби + \f$ y = \textrm{cd}(u K(k), k)\f$ комплексного аргумента Функция рассчитывает занчения значения эллиптической функции \f$ y = \textrm{cd}(u K(k), k)\f$ для комплексного вектора `u` и @@ -248,33 +247,33 @@ Для расчета используется итерационный алгоритм на основе преобразования Ландена.
- + -\param[in] u Указатель на массив вектора переменной \f$ u \f$.
+\param[in] u Указатель на массив вектора переменной \f$ u \f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

- -\param[in] n Размер вектора `u`.

- -\param[in] k Значение эллиптического модуля \f$ k \f$.
+ +\param[in] n Размер вектора `u`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
Эллиптический модуль -- вещественный параметр, принимающий значения от 0 до 1.

- + -\param[out] y Указатель на вектор значений эллиптической +\param[out] y Указатель на вектор значений эллиптической функции \f$ y = \textrm{cd}(u K(k), k)\f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно.
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
\author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -286,7 +285,7 @@ /*! **************************************************************************** \ingroup SPEC_MATH_ELLIP_GROUP \fn int ellip_landen(double k, int n, double* y) -\brief Расчет коэффициентов \f$ k_i \f$ ряда полного эллиптического интеграла. +\brief Расчет коэффициентов \f$ k_i \f$ ряда полного эллиптического интеграла. Полный эллиптический интеграл \f$ K(k) \f$ может быть представлен рядом: @@ -309,27 +308,27 @@ k_i = Данная функция рассчитывает ряд первых `n` значений \f$ k_i \f$, которые в дальнейшем могут быть использованы для расчета эллиптического интеграла и эллиптических функций. - + -\param[in] k Эллиптический модуль \f$ k \f$.
+\param[in] k Эллиптический модуль \f$ k \f$.
- -\param[in] n Размер вектора `y` соответсвующих + +\param[in] n Размер вектора `y` соответсвующих коэффициентам \f$ k_i \f$.

- - + + -\param[out] y Указатель на вектор значений +\param[out] y Указатель на вектор значений коэффициентов \f$ k_i \f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно.
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
- + Пример использования функции `ellip_landen`: \include ellip_landen_test.c @@ -353,16 +352,16 @@ k_i = 12 0.000e+00 13 0.000e+00 \endverbatim - -\note Ряд полного эллиптического интеграла сходится при значениях + +\note Ряд полного эллиптического интеграла сходится при значениях эллиптического модуля \f$ k<1 \f$. При этом сходимость ряда достаточно быстрая и для практический приложений достаточно от 10 до 20 значений \f$ k_i \f$ для обеспечения погрешности при расчете полного эллиптического интеграла в пределах машинной точности. \author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -373,8 +372,8 @@ k_i = /*! **************************************************************************** \ingroup SPEC_MATH_ELLIP_GROUP -\fn int ellip_sn(double* u, int n, double k, double* y) -\brief Эллиптическая функция Якоби +\fn int ellip_sn(double* u, int n, double k, double* y) +\brief Эллиптическая функция Якоби \f$ y = \textrm{sn}(u K(k), k)\f$ вещественного аргумента Функция рассчитывает занчения значения эллиптической функции @@ -383,33 +382,33 @@ k_i = Для расчета используется итерационный алгоритм на основе преобразования Ландена.
- + -\param[in] u Указатель на массив вектора переменной \f$ u \f$.
+\param[in] u Указатель на массив вектора переменной \f$ u \f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

- -\param[in] n Размер вектора `u`.

- -\param[in] k Значение эллиптического модуля \f$ k \f$.
+ +\param[in] n Размер вектора `u`.

+ +\param[in] k Значение эллиптического модуля \f$ k \f$.
Эллиптический модуль -- вещественный параметр, принимающий значения от 0 до 1.

- + -\param[out] y Указатель на вектор значений эллиптической +\param[out] y Указатель на вектор значений эллиптической функции \f$ y = \textrm{sn}(u K(k), k)\f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно.
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
\author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ @@ -422,7 +421,7 @@ k_i = /*! **************************************************************************** \ingroup SPEC_MATH_ELLIP_GROUP \fn int ellip_sn_cmplx(complex_t* u, int n, double k, complex_t* y) -\brief Эллиптическая функция Якоби +\brief Эллиптическая функция Якоби \f$ y = \textrm{sn}(u K(k), k)\f$ комплексного аргумента Функция рассчитывает занчения значения эллиптической функции @@ -442,18 +441,18 @@ k_i = Эллиптический модуль -- вещественный параметр, принимающий значения от 0 до 1.

-\param[out] y Указатель на вектор значений эллиптической +\param[out] y Указатель на вектор значений эллиптической функции \f$ y = \textrm{sn}(u K(k), k)\f$.
Размер вектора `[n x 1]`.
Память должна быть выделена.

\return - `RES_OK` Расчет произведен успешно.
+ `RES_OK` Расчет произведен успешно.
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
\author - Бахурин Сергей - www.dsplib.org + Бахурин Сергей + www.dsplib.org ***************************************************************************** */ diff --git a/dspl/src/dft.c b/dspl/src/dft.c index 1ea7ad5..9e07b12 100644 --- a/dspl/src/dft.c +++ b/dspl/src/dft.c @@ -214,7 +214,65 @@ int DSPL_API dft_cmplx(complex_t* x, int n, complex_t* y) /****************************************************************************** -Complex vector inverse DFT +\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$.
+\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$.
+ Vector size is `[n x 1]`.

+ +\param[in] n IDFT size \f$n\f$ (size of input and output vectors).

+ +\param[out] y Pointer to the complex IDFT output vector \f$y(k)\f$, + \f$ k = 0 \ldots n-1 \f$.
+ Vector size is `[n x 1]`.
+ Memory must be allocated.

+ + +\return `RES_OK` if IDFT is calculated successfully.
+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 *******************************************************************************/ int DSPL_API idft_cmplx(complex_t* x, int n, complex_t* y) { diff --git a/examples/src/idft_cmplx_test.c b/examples/src/idft_cmplx_test.c new file mode 100644 index 0000000..a05d23d --- /dev/null +++ b/examples/src/idft_cmplx_test.c @@ -0,0 +1,35 @@ +#include +#include +#include +#include "dspl.h" + +#define N 16 +int main() +{ + + void* handle; // DSPL handle + handle = dspl_load(); // Load DSPL function + complex_t x[N]; // complex input signal + complex_t y[N]; // DFT + complex_t z[N]; // IDFT + int k; + + for(k = 0; k < N; k++) + { + RE(x[k]) = (double)k; + IM(x[k]) = 0.0; + } + + dft_cmplx(x,N,y); + idft_cmplx(y,N,z); + + for(k = 0; k < N; k++) + printf("x[%2d] = %9.3f%+9.3fj, z[%2d] = %9.3f%+9.3f\n", + k, RE(x[k]), IM(x[k]), k, RE(z[k]), IM(z[k])); + + + dspl_free(handle); // remember to free the resource + return 0; +} + +