![]() |
libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
|
Функции | |
int | array_scale_lin (double *x, int n, double xmin, double xmax, double dx, double h, double *y) |
Линейное растяжение вектора данных x Функция производит преобразование значений \(x(i)\), \(i = 0,1,\ldots n\) в значения \(y(i)\), в соответствии с формулой: Подробнее... | |
int | concat (void *a, size_t na, void *b, size_t nb, void *c) |
Конкатенация двух массивов данных Подробнее... | |
int | decimate (double *x, int n, int d, double *y, int *cnt) |
Децимация вещественного вектора данных Подробнее... | |
int | decimate_cmplx (complex_t *x, int n, int d, complex_t *y, int *cnt) |
Децимация комплексного вектора данных Подробнее... | |
int | flipip (double *x, int n) |
Функция отражения вещественного вектора x Подробнее... | |
int | flipip_cmplx (complex_t *x, int n) |
Функция отражения комплексного вектора x Подробнее... | |
int | linspace (double x0, double x1, int n, int type, double *x) |
Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1 Подробнее... | |
int | logspace (double x0, double x1, int n, int type, double *x) |
Функция заполняет массив значениями логарифмической шкале Подробнее... | |
int | ones (double *x, int n) |
Функция заполнения вещественного массива единицами Подробнее... | |
int | sum (double *x, int n, double *s) |
int | verif (double *x, double *y, size_t n, double eps, double *err) |
Верификация вещественных массивов Подробнее... | |
int | verif_cmplx (complex_t *x, complex_t *y, size_t n, double eps, double *err) |
Верификация комплексных массивов Подробнее... | |
Подробное описание
Функции
◆ array_scale_lin()
int array_scale_lin | ( | double * | x, |
int | n, | ||
double | xmin, | ||
double | xmax, | ||
double | dx, | ||
double | h, | ||
double * | y | ||
) |
Линейное растяжение вектора данных x
Функция производит преобразование значений \(x(i)\), \(i = 0,1,\ldots n\) в значения \(y(i)\), в соответствии с формулой:
\[ y(i) = k_x x(i) + d_x, \qquad k_x = \frac{h}{x_{\textrm{max}} - x_{\textrm{min}}}. \]
Таким образом, все значения входного вектора x
в диапазоне от \(x_{\textrm{min}}\) до \(x_{\textrm{max}}\), линейно растягиваются в значения вектора y
в диапазоне от \(d_x\) до \(h + d_x\). Заметим, что \(d_x\) задает линейное смещение значений вектора y
.
Данная функция удобна для перевода величин разных размерностей, в частности, для переноса значений вектора x
на график высоты h
, где высота может быть задана в количестве пикселей, в сантиметрах и т.д.
- Аргументы
-
[in] x Указатель на вектор входных значений x
.
Размер вектора[n x 1]
.
[in] n Размер вектора x
.
[in] xmin Нижняя граница диапазона трансформации.
[in] xmax Верхняя граница диапазона трансформации.
Значениеxmax
должно быть строго больше значенияxmin
.
[in] dx Смещение после трансформации.
Данный параметр должен иметь размерность выходного вектораy
.
[in] h Диапазон значений вектора y
после трансформации отdx
доh+dx
.
[out] y Указатель на вектора данных после трансформации.
Размер вектора[n x 1]
.
Память должна быть выделена.
- Заметки
- Указатель
y
может совпадать сx
, в этом случае, данные вектораx
будут перезаписаны линейно измененными в соответствии с формулой выше.
- Возвращает
RES_OK
если функция выполнена успешно.
В противном случае код ошибки.
См. определение в файле array_scale_lin.c строка 171
◆ concat()
int concat | ( | void * | a, |
size_t | na, | ||
void * | b, | ||
size_t | nb, | ||
void * | c | ||
) |
Конкатенация двух массивов данных
Функция производит конкатенацию двух массивов. Пусть массивы a
и b
заданы как векторы:
a = [a(0), a(1), ... a(na-1)]
,
b = [b(0), b(1), ... b(nb-1)]
,
тогда результатом конкатенации будет вектор размера na+nb
вида:
c = [a(0), a(1), ... a(na-1), b(0), b(1), ... b(nb-1)]
.
- Аргументы
-
[in] a Указатель на первый вектор a
.
Размер вектораna
байт.
[in] na Размер первого вектора a
в байт.
[in] b Указатель на второй вектор b
.
Размер памяти вектораnb
байт.
[in] nb Размер второго вектора b
в байт.
[out] c Указатель на вектор конкатенации c
.
Размер памяти вектораna + nb
байт.
Память должна быть выделена.
- Возвращает
RES_OK
если функция выполнена успешно.
В противном случае код ошибки.
- Заметки
- Функция использует указатели типа
void*
и может быть использована для конкатенации данных различного типа.
Например конкатенация массивов типаdouble
:в результате векторdouble a[3] = {1.0, 2.0, 3.0};double b[2] = {4.0, 5.0};double c[5];int concat(void *a, size_t na, void *b, size_t nb, void *c)Конкатенация двух массивов данныхDefinition: concat.c:146c
будет хранить массив данных:c = [1.0, 2.0, 3.0, 4.0, 5.0]
◆ decimate()
int decimate | ( | double * | x, |
int | n, | ||
int | d, | ||
double * | y, | ||
int * | cnt | ||
) |
Децимация вещественного вектора данных
Функция производит децимацию вещественного вектора x
в d
раз.
В результате выходной вектор y
содержит значения: y(k) = x(k*d), k = 0...n/d-1
- Аргументы
-
[in] x Указатель на вектор входных данных x
.
Размер вектора[n x 1]
.
[in] n Размер входного вектора x
.
[in] d Коэффициент децимации.
В результате децимации из вектораx
будет взять каждый d-й элемент.
[out] y Указатель на децимированный вектор y
.
Размер выходного вектора равен[n/d x 1]
будет сохранен по адресуcnt
.
Память должна быть выделена.
[out] cnt Указатель переменную, в которую будет сохранен размер выходного вектора после децимации.
Указатель может бытьNULL
, в этом случае размер вектораy
не возвращается.
- Возвращает
RES_OK
если функция выполнена успешно.
В противном случае код ошибки.
Пример децимации вещественного массива данных в 2 раза:
В результате в переменную cnt
будет записан размер 5, а вектор y
будет хранить массив данных:
c = [0.0, 2.0, 4.0, 6.0, 8.0]
См. определение в файле decimate.c строка 140
◆ decimate_cmplx()
Децимация комплексного вектора данных
Функция производит децимацию комплексного вектора x
в d
раз.
В результате выходной вектор y
содержит значения: y(k) = x(k*d), k = 0...n/d-1
- Аргументы
-
[in] x Указатель на вектор входных данных x
.
Размер вектора[n x 1]
.
[in] n Размер входного вектора x
.
[in] d Коэффициент децимации.
В результате децимации из вектораx
будет взять каждый d-й элемент.
[out] y Указатель на децимированный вектор y
.
Размер выходного вектора равен[n/d x 1]
будет сохранен по адресуcnt
.
Память должна быть выделена.
[out] cnt Указатель переменную, в которую будет сохранен размер выходного вектора после децимации.
Указатель может бытьNULL
, в этом случае размер вектораy
не возвращается.
- Возвращает
RES_OK
если функция выполнена успешно.
В противном случае код ошибки.
Пример децимации комплексного массива данных в 2 раза:
В результате в переменную cnt
будет записан размер 5, а вектор y
будет хранить массив данных:
c = [0.0+0.0j, 2.0+2.0j, 4.0+4.0j, 6.0+6.0j, 8.0+8.0j]
См. определение в файле decimate_cmplx.c строка 144
◆ flipip()
int flipip | ( | double * | x, |
int | n | ||
) |
Функция отражения вещественного вектора x
Функция производит отражение вещественного вектора длины n
в памяти данных.
Например исходный вектор x
длины 6:
x = [0, 1, 2, 3, 4, 5]
После отражения вектор x
будет иметь вид:
x = [5, 4, 3, 2, 1, 0]
- Аргументы
-
[in,out] x Указатель на вещественный вектор x
.
Размер вектора[n x 1]
.
Результат отражения будет помещен по этому же адресу.
[in] n Размер вектора x
.
- Возвращает
RES_OK
если функция выполнена успешно.
В противном случае код ошибки.
Пример:
Результат выполнения:
0.0 1.0 2.0 3.0 4.0 4.0 3.0 2.0 1.0 0.0
◆ flipip_cmplx()
int flipip_cmplx | ( | complex_t * | x, |
int | n | ||
) |
Функция отражения комплексного вектора x
Функция производит отражение комплексного вектора длины n
в памяти данных.
Например исходный вектор x
длины 6:
x = [0+0j, 1+1j, 2+2j, 3+3j, 4+4j, 5+5j]
После отражения вектор x
будет иметь вид:
x = [5+5j, 4+4j, 3+3j, 2+2j, 1+1j, 0+0j]
- Аргументы
-
[in,out] x Указатель на комплексный вектор x
.
Размер вектора[n x 1]
.
Результат отражения будет помещен по этому же адресу.
[in] n Размер вектора x
.
- Возвращает
RES_OK
если функция выполнена успешно.
В противном случае код ошибки.
Пример:
Результат выполнения:
0.0+0.0j 1.0+1.0j 2.0+2.0j 3.0+3.0j 4.0+4.0j 4.0+4.0j 3.0+3.0j 2.0+2.0j 1.0+1.0j 0.0+0.0j
См. определение в файле flipip_cmplx.c строка 132
◆ linspace()
int linspace | ( | double | x0, |
double | x1, | ||
int | n, | ||
int | type, | ||
double * | x | ||
) |
Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0
до x1
Заполняет массив x
длиной n
значениями в диапазоне от \(x_0\) до \(x_1\). Функция поддерживает два типа заполнения в соответствии с параметром type
:
Симметричное заполнение согласно выражению (параметр type=DSPL_SYMMETRIC
):
\(x(k) = x_0 + k \cdot dx\), \(dx = \frac{x_1 - x_0}{n-1}\), \(k = 0 \ldots n-1.\)
Периодическое заполнение (параметр type=DSPL_PERIODIC
) согласно выражению:
\(x(k) = x_0 + k \cdot dx\), \(dx = \frac{x_1 - x_0}{n}\), \(k = 0 \ldots n-1.\)
- Аргументы
-
[in] x0 Начальное показателя \(x_0\).
[in] x1 Конечное значение \(x_1\).
[in] n Количество точек массива x
.
[in] type Тип заполнения:
DSPL_SYMMETRIC
— симметричное заполнение,
DSPL_PERIODIC
— периодическое заполнение.
[in,out] x Указатель на вектор равноотстоящих значений .
Размер вектора[n x 1]
.
Память должна быть выделена.
- Возвращает
RES_OK
— функция выполнена успешно.
В противном случае код ошибки.
- Заметки
- Отличие периодического и симметричного заполнения можно понять из следующих примеров.
Пример 1. Периодическое заполнение.В массивеdouble x[5];linspace(0, 5, 5, DSPL_PERIODIC, x);int linspace(double x0, double x1, int n, int type, double *x)Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1Definition: linspace.c:169x
будут лежать значения:0, 1, 2, 3, 4
Пример 2. Симметричное заполнение.В массивеdouble x[5];linspace(0, 5, 5, DSPL_SYMMETRIC, x);x
будут лежать значения:0, 1.25, 2.5, 3.75, 5
См. определение в файле linspace.c строка 169
Используется в psd_bartlett(), psd_bartlett_cmplx(), psd_welch() и psd_welch_cmplx().
◆ logspace()
int logspace | ( | double | x0, |
double | x1, | ||
int | n, | ||
int | type, | ||
double * | x | ||
) |
Функция заполняет массив значениями логарифмической шкале
Заполняет массив x
длиной n
значениями в диапазоне от \(10^{x_0}\) до \(10^{x_1}\).
Функция поддерживает два типа заполнения в соответствии с параметром type
:
Симметричное заполнение согласно выражению:
\(x(k) = 10^{x_0} \cdot dx^k\), где \(dx = \sqrt[n-1]{10^{x_1 - x_0}}\), \(k = 0 \ldots n-1.\)
Периодическое заполнение согласно выражению:
\(x(k) = 10^{x_0} \cdot dx^k\), где \(dx = \sqrt[n]{10^{x_1 - x_0}}\), \(k = 0 \ldots n-1.\)
- Аргументы
-
[in] x0 Начальное значение показателя \(x_0\).
[in] x1 Конечное значение показателя \(x_1\).
[in] n Количество точек массива x
.
[in] type Тип заполнения:
DSPL_SYMMETRIC
— симметричное заполнение,
DSPL_PERIODIC
— периодическое заполнение.
[in,out] x Указатель на вектор значений в логарифмической шкале.
Размер вектора[n x 1]
.
Память должна быть выделена.
- Возвращает
RES_OK
— функция выполнена успешно.
В противном случае код ошибки.
- Заметки
- Отличие периодического и симметричного заполнения можно понять из следующих примеров.
Пример 1. Периодическое заполнение.В массивеdouble x[5];logspace(-2, 3, 5, DSPL_PERIODIC, x);int logspace(double x0, double x1, int n, int type, double *x)Функция заполняет массив значениями логарифмической шкалеDefinition: logspace.c:178x
будут лежать значения:0.01, 0.1, 1, 10, 100
Пример 2. Симметричное заполнение.double x[5];logspace(-2, 3, 5, DSPL_SYMMETRIC, x);
В массиве x
будут лежать значения:
0.01 0.178 3.162 56.234 1000
См. определение в файле logspace.c строка 178
◆ ones()
int ones | ( | double * | x, |
int | n | ||
) |
Функция заполнения вещественного массива единицами
- Аргументы
-
[in,out] x Указатель на вещественный вектор x
.
Размер вектора[n x 1]
.
Значения данного вектора будут установлены в единицу.
[in] n Размер вектора x
.
- Возвращает
RES_OK
если функция выполнена успешно.
В противном случае код ошибки.
Пример:
Результат выполнения:
1.0 1.0 1.0 1.0 1.0
◆ sum()
int sum | ( | double * | x, |
int | n, | ||
double * | s | ||
) |
См. определение в файле sum.c строка 43
Используется в mean(), mean_cmplx(), stat_std() и stat_std_cmplx().
◆ verif()
int verif | ( | double * | x, |
double * | y, | ||
size_t | n, | ||
double | eps, | ||
double * | err | ||
) |
Верификация вещественных массивов
Функция производит расчет максимальной относительной ошибки между вещественными векторами x
и y
равной длины n
:
\[ e = \max \left( \frac{|x(k) - y(k)| }{ |x(k)|} \right), \quad \quad |x(k)| > 0, \]
или
\[ e = \max(|x(k) - y(k)| ), \qquad \quad~|x(k)| = 0, \]
и возвращает DSPL_VERIF_SUCCESS
если разница \( e\) меньше eps
. В противном случае возвращает DSPL_VERIF_FAILED
.
Данная функция используется для верификации работы алгоритмов если вектор x
результат работы алгоритма пользователя, а y
– результат работы этого же алгоритма сторонней функцией.
- Аргументы
-
[in] x Указатель на первый вектор x
.
Размер вектора[n x 1]
.
[in] y Указатель на второй вектор y
.
Размер вектора[n x 1]
.
[in] n Размер векторов x
иy
.
[in] eps Допустимая относительная ошибка.
Если максимальная относительная ошибка меньшеeps
, то функция возвращаетDSPL_VERIF_SUCCESS
, в противном случаеDSPL_VERIF_FAILED
.
[in,out] err Указатель на переменную максимальной относительной ошибки.
По данному адресу будет записано значение максимальной относительной ошибки.
Указатель может бытьNULL
, значение ошибки в этом случае не возвращается.
- Возвращает
DSPL_VERIF_SUCCESS
если относительная ошибка меньшеeps
.
В противном случаеDSPL_VERIF_FAILED
.
◆ verif_cmplx()
Верификация комплексных массивов
Функция производит расчет максимальной относительной ошибки между комплексными векторами x
и y
равной длины n
:
\[ e = \max \left( \frac{|x(k) - y(k)|}{|x(k)|} \right), \quad \quad |x(k)| > 0, \]
или
\[ e = \max(|x(k) - y(k)| ), ~\qquad \quad~|x(k)| = 0, \]
и возвращает DSPL_VERIF_SUCCESS
если разница \( e\) меньше eps
. В противном случае возвращает DSPL_VERIF_FAILED
.
Данная функция используется для верификации работы алгоритмов если вектор x
результат работы алгоритма пользователя, а y
– результат работы этого же алгоритма сторонней функцией.
- Аргументы
-
[in] x Указатель на первый вектор x
.
Размер вектора[n x 1]
.
[in] y Указатель на второй вектор y
.
Размер вектора[n x 1]
.
[in] n Размер векторов x
иy
.
[in] eps Допустимая относительная ошибка.
Если максимальная относительная ошибка меньшеeps
, то функция возвращаетDSPL_VERIF_SUCCESS
, в противном случаеDSPL_VERIF_FAILED
.
[in,out] err Указатель на переменную максимальной относительной ошибки.
По данному адресу будет записано значение максимальной относительной ошибки.
Указатель может бытьNULL
, значение ошибки в этом случае не возвращается.
- Возвращает
DSPL_VERIF_SUCCESS
если функция выполнена успешно.
В противном случаеDSPL_VERIF_FAILED
.
См. определение в файле verif_cmplx.c строка 141
Документация по libdspl-2.0. Последние изменения: Ср 5 Янв 2022 12:44:35. Создано системой