addded documenation for idft

pull/6/merge
Sergey Bakhurin 2019-07-18 21:35:59 +03:00
rodzic 73ccf3adbf
commit 4054894f46
7 zmienionych plików z 503 dodań i 341 usunięć

Wyświetl plik

@ -5,33 +5,33 @@
\brief Конкатенация двух массивов данных
Функция производит конкатенацию двух массивов. Пусть массивы `a` и `b`
заданы как векторы:<BR>
`a = [a(0), a(1), ... a(na-1)]`, <BR>
`b = [b(0), b(1), ... b(nb-1)]`, <BR>
тогда результатом конкатенации будет вектор размера `na+nb` вида:<BR>
заданы как векторы: \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`.<BR>
Размер вектора `na` байт.<BR><BR>
\param[in] a Указатель на первый вектор `a`. \n
Размер вектора `na` байт. \n \n
\param[in] na Размер первого вектора `a` в байт.<BR><BR>
\param[in] na Размер первого вектора `a` в байт. \n \n
\param[in] b Указатель на второй вектор `b`.<BR>
Размер памяти вектора `nb` байт.<BR><BR>
\param[in] b Указатель на второй вектор `b`. \n
Размер памяти вектора `nb` байт. \n \n
\param[in] nb Размер второго вектора `b` в байт.<BR><BR>
\param[in] nb Размер второго вектора `b` в байт. \n \n
\param[out] c Указатель на вектор конкатенации `c`.<BR>
Размер памяти вектора `na + nb` байт.<BR>
Память должна быть выделена.<BR><BR>
\param[out] c Указатель на вектор конкатенации `c`. \n
Размер памяти вектора `na + nb` байт. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если функция выполнена успешно.<BR>
`RES_OK` если функция выполнена успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
Функция использует указатели типа `void*` и может быть использована для
конкатенации данных различного типа.<BR>
конкатенации данных различного типа. \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` раз.<BR>
Функция производит децимацию вещественного вектора `x` в `d` раз. \n
В результате выходной вектор `y` содержит значения:
`y(k) = x(k*d), k = 0...n/d-1`<BR>
`y(k) = x(k*d), k = 0...n/d-1` \n
\param[in] x Указатель на вектор входных данных `x`.<BR>
Размер вектора `[n x 1]`.<BR><BR>
\param[in] x Указатель на вектор входных данных `x`. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного вектора `x`.<BR><BR>
\param[in] n Размер входного вектора `x`. \n \n
\param[in] d Коэффициент децимации.<BR>
\param[in] d Коэффициент децимации. \n
В результате децимации из вектора `x` будет взять каждый
d-й элемент.<BR><BR>
d-й элемент. \n \n
\param[out] y Указатель на децимированный вектор `y`.<BR>
\param[out] y Указатель на децимированный вектор `y`. \n
Размер выходного вектора равен `[n/d x 1]`
будет сохранен по адресу `cnt`.<BR>
Память должна быть выделена.<BR><BR>
будет сохранен по адресу `cnt`. \n
Память должна быть выделена. \n \n
\param[out] cnt Указатель переменную, в которую будет сохранен
размер выходного вектора после децимации.<BR>
размер выходного вектора после децимации. \n
Указатель может быть `NULL`, в этом случае
размер вектора `y` не возвращается.<BR><BR>
размер вектора `y` не возвращается. \n \n
\return
`RES_OK` если функция выполнена успешно.<BR>
`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` раз.<BR>
Функция производит децимацию комплексного вектора `x` в `d` раз. \n
В результате выходной вектор `y` содержит значения:
`y(k) = x(k*d), k = 0...n/d-1`<BR>
`y(k) = x(k*d), k = 0...n/d-1` \n
\param[in] x Указатель на вектор входных данных `x`.<BR>
Размер вектора `[n x 1]`.<BR><BR>
\param[in] x Указатель на вектор входных данных `x`. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного вектора `x`.<BR><BR>
\param[in] n Размер входного вектора `x`. \n \n
\param[in] d Коэффициент децимации.<BR>
\param[in] d Коэффициент децимации. \n
В результате децимации из вектора `x` будет взять каждый
d-й элемент.<BR><BR>
d-й элемент. \n \n
\param[out] y Указатель на децимированный вектор `y`.<BR>
\param[out] y Указатель на децимированный вектор `y`. \n
Размер выходного вектора равен `[n/d x 1]`
будет сохранен по адресу `cnt`.<BR>
Память должна быть выделена.<BR><BR>
будет сохранен по адресу `cnt`. \n
Память должна быть выделена. \n \n
\param[out] cnt Указатель переменную, в которую будет сохранен
размер выходного вектора после децимации.<BR>
размер выходного вектора после децимации. \n
Указатель может быть `NULL`, в этом случае
размер вектора `y` не возвращается.<BR><BR>
размер вектора `y` не возвращается. \n \n
\return
`RES_OK` если функция выполнена успешно.<BR>
`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`.<BR>
Функция производит поиск максимального по модулю значения вектора `a`. \n
Максимальное по модулю значение `max|a[k]|` сохраняется по адресу `m`, а индекс
данного значения в векторе `a` сохраняется по адресу `ind`.<BR>
данного значения в векторе `a` сохраняется по адресу `ind`. \n
\param[in] a Указатель на вещественный вектор `a`.<BR>
Размер вектора `[n x 1]`.<BR><BR>
\param[in] a Указатель на вещественный вектор `a`. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного вектора `a`.<BR><BR>
\param[in] n Размер входного вектора `a`. \n \n
\param[out] m Указатель на адрес памяти, в который сохранить
максимальное по модулю значение вектора `a`.<BR>
максимальное по модулю значение вектора `a`. \n
Указатель может быть `NULL`, в этом случае
максимальное по модулю значение не сохраняется.<BR><BR>
максимальное по модулю значение не сохраняется. \n \n
\param[out] ind Указатель на переменную, в которую будет сохранен
индекс максимального по модулю значению вектора `a`.<BR>
индекс максимального по модулю значению вектора `a`. \n
Указатель может быть `NULL`, в этом случае
индекс не возвращается.<BR><BR>
индекс не возвращается. \n \n
\return
`RES_OK` если функция выполнена успешно.<BR>
`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`
в памяти данных.<BR>
Например исходный вектор `x` длины 6:<BR>
в памяти данных. \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`.<BR>
Размер вектора `[n x 1]`.<BR>
Результат отражения будет помещен по этому же адресу.<BR>
\param[in, out] x Указатель на вещественный вектор `x`. \n
Размер вектора `[n x 1]`. \n
Результат отражения будет помещен по этому же адресу. \n
\param[in] n Размер вектора `x`.<BR><BR>
\param[in] n Размер вектора `x`. \n \n
\return
`RES_OK` если функция выполнена успешно.<BR>
`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
<BR>
\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`
в памяти данных.<BR>
Например исходный вектор `x` длины 6:<BR>
в памяти данных. \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`.<BR>
Размер вектора `[n x 1]`.<BR>
Результат отражения будет помещен по этому же адресу.<BR>
\param[in, out] x Указатель на комплексный вектор `x`. \n
Размер вектора `[n x 1]`. \n
Результат отражения будет помещен по этому же адресу. \n
\param[in] n Размер вектора `x`.<BR><BR>
\param[in] n Размер вектора `x`. \n \n
\return
`RES_OK` если функция выполнена успешно.<BR>
`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
<BR>
\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`.<BR>
В противном случае возвращает `DSPL_VERIF_FAILED`. \n
Данная функция используется для верификации работы алгоритмов если вектор `x`
результат работы алгоритма пользователя, а `y` -- результат работы этого же
алгоритма сторонней функцией.
\param[in] x Указатель на первый вектор `x`.<BR>
Размер вектора `[n x 1]`.<BR><BR>
\param[in] x Указатель на первый вектор `x`. \n
Размер вектора `[n x 1]`. \n \n
\param[in] y Указатель на второй вектор `y`.<BR>
Размер вектора `[n x 1]`.<BR><BR>
\param[in] y Указатель на второй вектор `y`. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер векторов `x` и `y`.<BR><BR>
\param[in] n Размер векторов `x` и `y`. \n \n
\param[in] eps Допустимая относительная ошибка.<BR>
\param[in] eps Допустимая относительная ошибка. \n
Если максимальная относительная ошибка меньше `eps`, то
функция возвращает `DSPL_VERIF_SUCCESS`, в противном случае
`DSPL_VERIF_FAILED`. <BR><BR>
`DSPL_VERIF_FAILED`. \n \n
\param[in, out] err Указатель на переменную максимальной
относительной ошибки.<BR>
относительной ошибки. \n
По данному адресу будет записано значение максимальной
относительной ошибки.<BR>
относительной ошибки. \n
Указатель может быть `NULL`, значение ошибки в этом
случае не возвращается.<BR><BR>
случае не возвращается. \n \n
\return
`DSPL_VERIF_SUCCESS` если относительная ошибка меньше `eps`.<BR>
`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`.<BR>
В противном случае возвращает `DSPL_VERIF_FAILED`. \n
Данная функция используется для верификации работы алгоритмов если вектор `x`
результат работы алгоритма пользователя, а `y` -- результат работы этого же
алгоритма сторонней функцией.
\param[in] x Указатель на первый вектор `x`.<BR>
Размер вектора `[n x 1]`.<BR><BR>
\param[in] x Указатель на первый вектор `x`. \n
Размер вектора `[n x 1]`. \n \n
\param[in] y Указатель на второй вектор `y`.<BR>
Размер вектора `[n x 1]`.<BR><BR>
\param[in] y Указатель на второй вектор `y`. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер векторов `x` и `y`.<BR><BR>
\param[in] n Размер векторов `x` и `y`. \n \n
\param[in] eps Допустимая относительная ошибка.<BR>
\param[in] eps Допустимая относительная ошибка. \n
Если максимальная относительная ошибка меньше `eps`, то
функция возвращает `DSPL_VERIF_SUCCESS`, в противном случае
`DSPL_VERIF_FAILED`. <BR><BR>
`DSPL_VERIF_FAILED`. \n \n
\param[in, out] err Указатель на переменную максимальной
относительной ошибки.<BR>
относительной ошибки. \n
По данному адресу будет записано значение максимальной
относительной ошибки.<BR>
относительной ошибки. \n
Указатель может быть `NULL`, значение ошибки в этом
случае не возвращается.<BR><BR>
случае не возвращается. \n \n
\return
`DSPL_VERIF_SUCCESS` если функция выполнена успешно.<BR>
`DSPL_VERIF_SUCCESS` если функция выполнена успешно. \n
В противном случае `DSPL_VERIF_FAILED`.
\author Бахурин Сергей www.dsplib.org

Wyświetl plik

@ -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` аргумента полинома
Чебышева первого рода.<BR>
Размер вектора `[n x 1]`.<BR><BR>
Чебышева первого рода. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер векторов `x` и `y`.<BR><BR>
\param[in] n Размер векторов `x` и `y`. \n \n
\param[in] ord Порядок полинома Чебышева первого рода.<BR><BR>
\param[in] ord Порядок полинома Чебышева первого рода. \n \n
\param[out] y Указатель на вектор значений полинома Чебышева,
соответствующих аргументу `x`.<BR>
Размер вектора `[n x 1]`.<BR>
Память должна быть выделена.<BR><BR>
соответствующих аргументу `x`. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` Расчет произведен успешно.<BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки".<BR>
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
Пример использования функции:
\include cheby_poly1_test.c
<BR><BR>
\n \n
В каталоге `dat` будут созданы текстовые файлы значений
полиномов порядка 1-4:<BR>
полиномов порядка 1-4: \n
<pre>
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` аргумента полинома
Чебышева второго рода.<BR>
Размер вектора `[n x 1]`.<BR><BR>
Чебышева второго рода. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер векторов `x` и `y`.<BR><BR>
\param[in] n Размер векторов `x` и `y`. \n \n
\param[in] ord Порядок полинома Чебышева второго рода.<BR><BR>
\param[in] ord Порядок полинома Чебышева второго рода. \n \n
\param[out] y Указатель на вектор значений полинома Чебышева,
соответствующих аргументу `x`.<BR>
Размер вектора `[n x 1]`.<BR>
Память должна быть выделена.<BR><BR>
соответствующих аргументу `x`. \n
Размер вектора `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` Расчет произведен успешно.<BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки".<BR>
`RES_OK` Расчет произведен успешно. \n
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
Пример использования функции:
\include cheby_poly2_test.c
<BR><BR>
\n \n
В каталоге `dat` будут созданы текстовые файлы значений
полиномов порядка 1-4:<BR>
полиномов порядка 1-4: \n
<pre>
cheby_poly2_ord1.txt

Wyświetl plik

@ -131,27 +131,27 @@
\brief Арккосинус комплексного аргумента `x`
Функция рассчитывает значения арккосинуса комплексного аргумента,
заданного вектором `x` длины `n`: <BR>
заданного вектором `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 Указатель на вектор аргумента комплексного арккосинуса.<BR>
Размер вектора `[n x 1]`. <BR><BR>
\param[in] x Указатель на вектор аргумента комплексного арккосинуса. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного и выходного векторов `x` и `y`.<BR><BR>
\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n
\param[out] y Указатель на вектор значений комплексного арккосинуса,
соответствующего входному вектору `x`.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
соответствующего входному вектору `x`. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если значение функции рассчитано успешно . <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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
<BR>
\n
Результатом работы будет
@ -192,26 +192,26 @@ acos_cmplx(5.0+6.0j) = 0.880-2.749j
\brief Арксинус комплексного аргумента `x`
Функция рассчитывает значения арксинуса комплексного аргумента,
заданного вектором `x` длины `n`: <BR>
заданного вектором `x` длины `n`: \n
\f[
\textrm{Arcsin}(x) = j \textrm{Ln}\left( j x + \sqrt{1 - x^2} \right)
\f]
\param[in] x Указатель на вектор аргумента комплексного арксинуса.<BR>
Размер вектора `[n x 1]`. <BR><BR>
\param[in] x Указатель на вектор аргумента комплексного арксинуса. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного и выходного векторов `x` и `y`.<BR><BR>
\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n
\param[out] y Указатель на вектор значений комплексного арксинуса,
соответствующего входному вектору `x`.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
соответствующего входному вектору `x`. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если значение функции рассчитано успешно . <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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
<BR>
\n
Результатом работы будет
@ -255,25 +255,25 @@ asin_cmplx(5.0+6.0j) = 0.691+2.749j
исходного массива
Функция заполняет реальные массивы `re` и `im` соответствующими значениями
реальной и мнимой частей исходного комплексного массива `x`. <BR>
реальной и мнимой частей исходного комплексного массива `x`. \n
\param[in] x Указатель на массив комплексных данных.<BR>
Размер массива `[n x 1]`. <BR><BR>
\param[in] x Указатель на массив комплексных данных. \n
Размер массива `[n x 1]`. \n \n
\param[in] n Размер массивов входных и выходных данных.<BR><BR>
\param[in] n Размер массивов входных и выходных данных. \n \n
\param[out] re Указатель на адрес массива реальной части данных.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
\param[out] re Указатель на адрес массива реальной части данных. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\param[out] im Указатель на адрес массива мнимой части данных.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
\param[out] im Указатель на адрес массива мнимой части данных. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если преобразование произведено успешно. <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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`: <BR>
заданного вектором `x` длины `n`: \n
\f[
\textrm{cos}(x) = \frac{\exp(jx) + \exp(-jx)}{2}
\f]
\param[in] x Указатель на вектор аргумента комплексного косинуса.<BR>
Размер вектора `[n x 1]`. <BR><BR>
\param[in] x Указатель на вектор аргумента комплексного косинуса. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного и выходного векторов `x` и `y`.<BR><BR>
\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n
\param[out] y Указатель на вектор значений комплексного косинуса,
соответствующего входному вектору `x`.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
соответствующего входному вектору `x`. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если значение функции рассчитано успешно . <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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
<BR>
\n
Результатом работы будет
@ -364,26 +364,26 @@ cos_cmplx(5.0+6.0j) = 57.219 +193.428j
\brief Натуральный логарифм комплексного аргумента `x`
Функция рассчитывает значения натурального логарифма комплексного аргумента,
заданного вектором `x` длины `n`: <BR>
заданного вектором `x` длины `n`: \n
\f[
\textrm{Ln}(x) = j \varphi + \ln(|x|),
\f]
где \f$\varphi\f$ - фаза комплексного числа.
\param[in] x Указатель на комплексный вектор аргумента логарифма.<BR>
Размер вектора `[n x 1]`. <BR><BR>
\param[in] x Указатель на комплексный вектор аргумента логарифма. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного и выходного векторов `x` и `y`.<BR><BR>
\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n
\param[out] y Указатель на вектор значений комплексного логарифма,
соответствующего входному вектору `x`.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
соответствующего входному вектору `x`. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если значение функции рассчитано успешно. <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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
<BR>
\n
Результатом работы будет
@ -426,22 +426,22 @@ log_cmplx(5.0+6.0j) = 2.055+0.876j
\brief Преобразование массива вещественных данных в массив комплексных данных.
Функция заполняет реальные части массива `y` данных соответсвующими значениями
исходного вещественного массива `x`. <BR>
исходного вещественного массива `x`. \n
\param[in] x Указатель на массив вещественных данных.<BR>
Размер массива `[n x 1]`. <BR><BR>
\param[in] x Указатель на массив вещественных данных. \n
Размер массива `[n x 1]`. \n \n
\param[in] n Размер массивов входных и выходных данных.<BR><BR>
\param[in] n Размер массивов входных и выходных данных. \n \n
\param[out] y Указатель на адрес массива комплексных данных.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
\param[out] y Указатель на адрес массива комплексных данных. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если преобразование произведено успешно. <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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`: <BR>
заданного вектором `x` длины `n`: \n
\f[
\textrm{sin}(x) = \frac{\exp(jx) - \exp(-jx)}{2j}
\f]
\param[in] x Указатель на вектор аргумента комплексного синуса.<BR>
Размер вектора `[n x 1]`. <BR><BR>
\param[in] x Указатель на вектор аргумента комплексного синуса. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного и выходного векторов `x` и `y`.<BR><BR>
\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n
\param[out] y Указатель на вектор значений комплексного синуса,
соответствующего входному вектору `x`.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
соответствующего входному вектору `x`. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если значение функции рассчитано успешно . <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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
<BR>
\n
Результатом работы будет
@ -532,26 +532,26 @@ sin_cmplx(5.0+6.0j) = -193.430 +57.218j
\brief Квадратный корень из комплексного вектора `x` (поэлементный).
Функция рассчитывает значения квадратного корня комплексного аргумента,
заданного вектором `x` длины `n`: <BR>
заданного вектором `x` длины `n`: \n
\f[
y(k) = \sqrt{x(k)}, \qquad k = 0 \ldots n-1.
\f]
\param[in] x Указатель на вектор аргумента квадратного корня.<BR>
Размер вектора `[n x 1]`. <BR><BR>
\param[in] x Указатель на вектор аргумента квадратного корня. \n
Размер вектора `[n x 1]`. \n \n
\param[in] n Размер входного и выходного векторов `x` и `y`.<BR><BR>
\param[in] n Размер входного и выходного векторов `x` и `y`. \n \n
\param[out] y Указатель на вектор значений комплексного корня,
соответствующего входному вектору `x`.<BR>
Размер массива `[n x 1]`. <BR>
Память должна быть выделена. <BR><BR>
соответствующего входному вектору `x`. \n
Размер массива `[n x 1]`. \n
Память должна быть выделена. \n \n
\return
`RES_OK` если значение функции рассчитано успешно . <BR>
В противном случае \ref ERROR_CODE_GROUP "код ошибки":<BR>
`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
<BR>
\n
Результатом работы будет

Wyświetl plik

@ -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$.<BR>
\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$. <BR>
Размер вектора `[n x 1]`. <BR><BR>
\param[in] n Размер ОДПФ \f$n\f$ (размер векторов входного
спектра и результата ОДПФ).<BR><BR>
\param[out] y Указатель на комплексный вектор
результата ОДПФ \f$y(k)\f$,
\f$ k = 0 \ldots n-1 \f$.
Размер вектора `[n x 1]`. <BR>
Память должна быть выделена.<BR><BR>
\return
`RES_OK` если ОДПФ рассчитана успешно. <BR>
В противном случае \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$ комплексных умножений.<BR>
Для увеличения скорости расчета рекомендуется
использовать алгоритмы быстрого преобразования Фурье.
\author Бахурин Сергей. www.dsplib.org
***************************************************************************** */

Wyświetl plik

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

Wyświetl plik

@ -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$.<BR>
\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$. <BR>
Vector size is `[n x 1]`. <BR><BR>
\param[in] n IDFT size \f$n\f$ (size of input and output vectors).<BR><BR>
\param[out] y Pointer to the complex IDFT output vector \f$y(k)\f$,
\f$ k = 0 \ldots n-1 \f$. <BR>
Vector size is `[n x 1]`. <BR>
Memory must be allocated.<BR><BR>
\return `RES_OK` if IDFT is calculated successfully. <BR>
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)
{

Wyświetl plik

@ -0,0 +1,35 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#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;
}