kopia lustrzana https://github.com/Dsplib/libdspl-2.0
addded documenation for idft
rodzic
73ccf3adbf
commit
4054894f46
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
Результатом работы будет
|
||||
|
||||
|
|
|
@ -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
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
Ładowanie…
Reference in New Issue