libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
Базовые функции и работа с массивами данных

Функции

int log_cmplx (complex_t *x, int n, complex_t *y)
 Натуральный логарифм комплексного аргумента x. Подробнее...
 
int sinc (double *x, int n, double a, double *y)
 Функция \( \textrm{sinc}(x,a) = \frac{\sin(ax)}{ax}\). Подробнее...
 
int sqrt_cmplx (complex_t *x, int n, complex_t *y)
 Квадратный корень из комплексного вектора x (поэлементный). Подробнее...
 
int polyroots (double *a, int ord, complex_t *r, int *info)
 Расчет корней вещественного полинома Подробнее...
 
int polyval (double *a, int ord, double *x, int n, double *y)
 Расчет вещественного полинома Подробнее...
 
int polyval_cmplx (complex_t *a, int ord, complex_t *x, int n, complex_t *y)
 Расчет комплексного полинома Подробнее...
 

Подробное описание

Функции

◆ log_cmplx()

int log_cmplx ( complex_t x,
int  n,
complex_t y 
)

Натуральный логарифм комплексного аргумента x.


Функция рассчитывает значения натурального логарифма комплексного аргумента, заданного вектором x длины n:

\[ \textrm{Ln}(x) = j \varphi + \ln(|x|), \]

где \(\varphi\) — фаза комплексного числа.

Аргументы
[in]xУказатель на комплексный вектор аргумента логарифма.
Размер вектора [n x 1].

[in]nРазмер входного и выходного векторов x и y.

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

Возвращает
RES_OK если значение функции рассчитано успешно.
В противном случае код ошибки:
Например при выполнении следующего кода
complex_t x[3] = {{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}};
complex_t y[3];
int k;
log_cmplx(x, 3, y);
for(k = 0; k < 3; k++)
printf("log_cmplx(%.1f%+.1fj) = %.3f%+.3fj\n",
RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k]));

Результатом работы будет
log_cmplx(1.0+2.0j) = 0.805+1.107j
log_cmplx(3.0+4.0j) = 1.609+0.927j
log_cmplx(5.0+6.0j) = 2.055+0.876j
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле math.c строка 718

Используется в asin_cmplx().

◆ polyroots()

int polyroots ( double *  a,
int  ord,
complex_t r,
int *  info 
)

Расчет корней вещественного полинома


Функция рассчитывает корни полинома \(P_N(x)\) \(N-\)ого порядка, заданного вектором коэффициентов a.

\[ P_N(x) = a_0 + a_1 x + a_2 x^2 + a_3 x^3 + ... a_N x^N. \]

Корни полинома рассчитываются как собственные числа характеристической матрицы полинома. Для расчета собственных чисел используется подпрограмма пакета LAPACK.

Аргументы
[in]aУказатель на вектор вещественных коэффициентов полинома.
Размер вектора [ord+1 x 1].
Коэффициент a[0] соответствует коэффициенту полинома \(a_0\).
Коэффициент a[ord] не должен быть равен нулю.

[in]ordПорядок полинома \(N\).

[out]rУказатель на вектор комплексных корней полинома.
Размер вектора [ord x 1].
Память должна быть выделена.

[out]infoУказатель наа код возврата пакета LAPACK.
Данный код возвращается подпрограммой LAPACK и транслируется через данную переменную для возможности анализа.

Возвращает
RES_OK — корни полинома рассчитаны успешно.

В противном случае код ошибки.

Пример расчета корней полинома:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "dspl.h"
#define N 2
int main(int argc, char* argv[])
{
void* hdspl; /* DSPL handle */
double a[N+1] = {2.0, 2.0, 1.0}; /* P(x) = 2 + 2x + x^2 */
complex_t r[N] = {0}; /* roots */
int err, n, info;
hdspl = dspl_load(); /* Load DSPL functions */
if(!hdspl)
{
printf("libdspl loading error!\n");
return -1;
}
/* roots calculation */
err = polyroots(a, N, r, &info);
printf("Error code: 0x%.8x\n", err);
/* print roots */
for(n = 0; n < N; n++)
printf("r[%d] = % -8.5f% -8.5f j\n", n, RE(r[n]), IM(r[n]));
/* free dspl handle */
dspl_free(hdspl);
return 0;
}

Данная программа производит расчет корней полинома

\[ P(x) = 2 + 2x + x^2 \]

и выводит рассчитанные корни на печать. Результат работы программы:

Error code: 0x00000000
r[0] = -1.00000 1.00000 j
r[1] = -1.00000-1.00000 j

Получили пару комплексно-сопряженных корней полинома.

Автор
Бахурин Сергей. www.dsplib.org

См. определение в файле polyval.c строка 135

◆ polyval()

int polyval ( double *  a,
int  ord,
double *  x,
int  n,
double *  y 
)

Расчет вещественного полинома


Функция рассчитывает полином \(P_N(x)\) \(N-\)ого порядка для вещественного аргумента, заданного вектором x.

\[ P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N. \]

Для расчета используется формула Горнера:

\[ P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) \]

Аргументы
[in]aУказатель на вектор вещественных коэффициентов полинома.
Размер вектора [ord+1 x 1].
Коэффициент a[0] соответствует коэффициенту полинома \(a_0\).

[in]ordПорядок полинома \(N\).

[in]xУказатель на вектор аргумента полинома.
Размер вектора [n x 1].
Значения полинома будут расчитаны для всех значений аргумента вектора x.

[in]nРазмер вектора агрумента полинома.

[out]yУказатель на значения полинома для аргумента x.
Размер вектора [n x 1].
Память должна быть выделена.

Возвращает
RES_OK — полином рассчитан успешно.

В противном случае код ошибки.
Автор
Бахурин Сергей. www.dsplib.org

См. определение в файле polyval.c строка 219

Используется в bessel_i0(), farrow_lagrange() и farrow_spline().

◆ polyval_cmplx()

int polyval_cmplx ( complex_t a,
int  ord,
complex_t x,
int  n,
complex_t y 
)

Расчет комплексного полинома


Функция рассчитывает полином \(P_N(x)\) \(N\)-го порядка комплексного аргумента, заданного вектором x.

\[ P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3 \cdot x^3 + ... a_N \cdot x^N. \]

Для расчета используется формула Горнера:

\[ P_N(x) = a_0 + x \cdot (a_1 + x \cdot (a_2 + \cdot ( \ldots x \cdot (a_{N-1} + x\cdot a_N) \ldots ))) \]

Аргументы
[in]aУказатель на вектор комплексных коэффициентов полинома.
Размер вектора [ord+1 x 1].
Коэффициент a[0] соответствует коэффициенту полинома \(a_0\).

[in]ordПорядок полинома \(N\).

[in]xУказатель на вектор аргумента полинома.
Размер вектора [n x 1].
Значения полинома будут расчитаны для всех значений аргумента вектора x.

[in]nРазмер вектора агрумента полинома.

[out]yУказатель вектор значения полинома для аргумента x.
Размер вектора [n x 1].
Память должна быть выделена.

Возвращает
RES_OK — полином расчитан успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей. www.dsplib.org

См. определение в файле polyval.c строка 293

Используется в freqs() и freqz().

◆ sinc()

int sinc ( double *  x,
int  n,
double  a,
double *  y 
)

Функция \( \textrm{sinc}(x,a) = \frac{\sin(ax)}{ax}\).


Функция рассчитывает значения функции для вещественного вектора x.

Аргументы
[in]xУказатель на вектор переменной \( x \).
Размер вектора [n x 1].
Память должна быть выделена.

[in]nРазмер входного вектора x.

[in]aПараметр функции \( \textrm{sinc}(x,a) = \frac{\sin(ax)}{ax}\).

[out]yУказатель на вектор значений функции.
Размер вектора [n x 1].
Память должна быть выделена.

Возвращает
RES_OK — расчёт произведен успешно.
В противном случае код ошибки.
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле math.c строка 936

◆ sqrt_cmplx()

int sqrt_cmplx ( complex_t x,
int  n,
complex_t y 
)

Квадратный корень из комплексного вектора x (поэлементный).


Функция рассчитывает значения квадратного корня комплексного аргумента, заданного вектором x длины n:

\[ y(k) = \sqrt{x(k)}, \qquad k = 0 \ldots n-1. \]

Аргументы
[in]xУказатель на вектор аргумента квадратного корня.
Размер вектора [n x 1].

[in]nРазмер входного и выходного векторов x и y.

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

Возвращает
RES_OK если значение функции рассчитано успешно .
В противном случае код ошибки:
Например при выполнении следующего кода
complex_t x[3] = {{1.0, 2.0}, {3.0, 4.0}, {5.0, 6.0}};
complex_t y[3];
int k;
sqrt_cmplx(x, 3, y);
for(k = 0; k < 3; k++)
printf("sqrt_cmplx(%.1f%+.1fj) = %.3f%+.3fj\n",
RE(x[k]), IM(x[k]), RE(y[k]), IM(y[k]));

Результатом работы будет
sqrt_cmplx(1.0+2.0j) = 1.272+0.786j
sqrt_cmplx(3.0+4.0j) = 2.000+1.000j
sqrt_cmplx(5.0+6.0j) = 2.531+1.185j
Автор
Бахурин Сергей www.dsplib.org

См. определение в файле math.c строка 1307

Используется в asin_cmplx(), ellip_acd_cmplx() и ellip_asn_cmplx().

#define RE(x)
Макрос определяющий реальную часть комплексного числа.
Definition: dspl.h:359
int log_cmplx(complex_t *x, int n, complex_t *y)
Натуральный логарифм комплексного аргумента x.
Definition: math.c:718
int polyroots(double *a, int ord, complex_t *r, int *info)
Расчет корней вещественного полинома
Definition: polyval.c:135
double complex_t[2]
Описание комплексного типа данных.
Definition: dspl.h:86
int sqrt_cmplx(complex_t *x, int n, complex_t *y)
Квадратный корень из комплексного вектора x (поэлементный).
Definition: math.c:1307
#define IM(x)
Макрос определяющий мнимую часть комплексного числа.
Definition: dspl.h:417