kopia lustrzana https://github.com/Dsplib/libdspl-2.0
161 wiersze
7.1 KiB
Plaintext
161 wiersze
7.1 KiB
Plaintext
|
||
/*! ****************************************************************************
|
||
\ingroup SPEC_MATH_COMMON_GROUP
|
||
\fn int concat(void* a, size_t na, void* b, size_t nb, void* c)
|
||
\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>
|
||
`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] na Размер первого вектора `a` в байт.<BR><BR>
|
||
|
||
\param[in] b Указатель на второй вектор `b`.<BR>
|
||
Размер памяти вектора `nb` байт.<BR><BR>
|
||
|
||
\param[in] nb Размер второго вектора `b` в байт.<BR><BR>
|
||
|
||
\param[out] c Указатель на вектор конкатенации `c`.<BR>
|
||
Размер памяти вектора `na + nb` байт.<BR>
|
||
Память должна быть выделена.<BR><BR>
|
||
|
||
\return
|
||
`RES_OK` если функция выполнена успешно.<BR>
|
||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||
|
||
Функция использует указатели типа `void*` и может быть использована для
|
||
конкатенации данных различного типа.<BR>
|
||
Например конкатенация массивов типа `double`:
|
||
\code
|
||
double a[3] = {1.0, 2.0, 3.0};
|
||
double b[2] = {4.0, 5.0};
|
||
double c[5];
|
||
|
||
concat((void*)a, 3*sizeof(double), (void*)b, 2*sizeof(double), (void*)c);
|
||
\endcode
|
||
в результате вектор `c` будет хранить массив данных:
|
||
\code
|
||
c = [1.0, 2.0, 3.0, 4.0, 5.0]
|
||
\endcode
|
||
|
||
\author
|
||
Бахурин Сергей
|
||
www.dsplib.org
|
||
**************************************************************************** */
|
||
|
||
|
||
|
||
|
||
|
||
/*! ****************************************************************************
|
||
\ingroup SPEC_MATH_COMMON_GROUP
|
||
\fn int decimate(double* x, int n, int d, double* y, int* cnt)
|
||
\brief Децимация вещественного вектора данных
|
||
|
||
Функция производит децимацию вещественного вектора `x` в `d` раз.<BR>
|
||
В результате выходной вектор `y` содержит значения:
|
||
`y(k) = x(k*d), k = 0...n/d-1`<BR>
|
||
|
||
\param[in] x Указатель на вектор входных данных `x`.<BR>
|
||
Размер вектора `[n x 1]`.<BR><BR>
|
||
|
||
\param[in] n Размер входного вектора `x`.<BR><BR>
|
||
|
||
\param[in] d Коэффициент децимации.<BR>
|
||
В результате децимации из вектора `x` будет взять каждый
|
||
d-й элемент.<BR><BR>
|
||
|
||
\param[out] y Указатель на децимированный вектор `y`.<BR>
|
||
Размер выходного вектора равен `[n/d x 1]`
|
||
будет сохранен по адресу `cnt`.<BR>
|
||
Память должна быть выделена.<BR><BR>
|
||
|
||
\param[out] cnt Указатель переменную, в которую будет сохранен
|
||
размер выходного вектора после децимации.<BR>
|
||
Указатель может быть `NULL`, в этом случае
|
||
размер вектора `y` не возвращается.<BR><BR>
|
||
|
||
\return
|
||
`RES_OK` если функция выполнена успешно.<BR>
|
||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||
|
||
Пример децимации вещественного массива данных в 2 раза:
|
||
\code
|
||
double x[10] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0};
|
||
double y[5];
|
||
int d = 2;
|
||
int cnt;
|
||
|
||
decimate(x, 10, d, y, &cnt);
|
||
\endcode
|
||
в результате в переменную `cnt` будет записан размер 5,
|
||
а вектор `y` будет хранить массив данных:
|
||
\code
|
||
c = [0.0, 2.0, 4.0, 6.0, 8.0]
|
||
\endcode
|
||
|
||
\author Бахурин Сергей www.dsplib.org
|
||
**************************************************************************** */
|
||
|
||
|
||
|
||
/*! ****************************************************************************
|
||
\ingroup SPEC_MATH_COMMON_GROUP
|
||
\fn int decimate_cmplx(complex_t* x, int n, int d, complex_t* y, int* cnt)
|
||
\brief Децимация комплексного вектора данных
|
||
|
||
Функция производит децимацию комплексного вектора `x` в `d` раз.<BR>
|
||
В результате выходной вектор `y` содержит значения:
|
||
`y(k) = x(k*d), k = 0...n/d-1`<BR>
|
||
|
||
\param[in] x Указатель на вектор входных данных `x`.<BR>
|
||
Размер вектора `[n x 1]`.<BR><BR>
|
||
|
||
\param[in] n Размер входного вектора `x`.<BR><BR>
|
||
|
||
\param[in] d Коэффициент децимации.<BR>
|
||
В результате децимации из вектора `x` будет взять каждый
|
||
d-й элемент.<BR><BR>
|
||
|
||
\param[out] y Указатель на децимированный вектор `y`.<BR>
|
||
Размер выходного вектора равен `[n/d x 1]`
|
||
будет сохранен по адресу `cnt`.<BR>
|
||
Память должна быть выделена.<BR><BR>
|
||
|
||
\param[out] cnt Указатель переменную, в которую будет сохранен
|
||
размер выходного вектора после децимации.<BR>
|
||
Указатель может быть `NULL`, в этом случае
|
||
размер вектора `y` не возвращается.<BR><BR>
|
||
|
||
\return
|
||
`RES_OK` если функция выполнена успешно.<BR>
|
||
В противном случае \ref ERROR_CODE_GROUP "код ошибки".
|
||
|
||
Пример децимации комплексного массива данных в 2 раза:
|
||
\code
|
||
compex_t x[10] = {{0.0, 0.0}, {1.0, 1.0}, {2.0, 2.0}, {3.0, 3.0}, {4.0, 4.0},
|
||
{5.0, 5.0}, {6.0, 6.0}, {7.0, 7.0}, {8.0, 8.0}, {9.0, 9.0}};
|
||
compex_t y[5];
|
||
int d = 2;
|
||
int cnt;
|
||
|
||
decimate_cmplx(x, 10, d, y, &cnt);
|
||
\endcode
|
||
в результате в переменную `cnt` будет записан размер 5,
|
||
а вектор `y` будет хранить массив данных:
|
||
\code
|
||
c = [0.0+0.0j, 2.0+2.0j, 4.0+4.0j, 6.0+6.0j, 8.0+8.0j]
|
||
\endcode
|
||
|
||
\author Бахурин Сергей www.dsplib.org
|
||
**************************************************************************** */
|
||
|
||
|