Базовые математические функции.

Функции

int dspl_linspace (double x0, double x1, int n, int type, double *x)
 Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1 Подробнее...
 
int dspl_log_cmplx (double *xR, double *xI, int n, double *yR, double *yI)
 Натуральный логарифм комплексного векторного аргумента Подробнее...
 
int dspl_logspace (double x0, double x1, int n, int type, double *x)
 Функция заполняет массив значениями логарифмической шкале Подробнее...
 
int dspl_polyval (double *a, int ord, double *x, int n, double *y)
 Расчет вещественного полинома Подробнее...
 
int dspl_polyval_cmplx (double *aR, double *aI, int ord, double *xR, double *xI, int n, double *yR, double *yI)
 Расчет комплексного полинома Подробнее...
 
int dspl_sqrt_cmplx (double *xR, double *xI, int n, double *yR, double *yI)
 Корень квадратный комплексного векторного аргумента Подробнее...
 
int dspl_unwrap (double *phi, int n, double lev, double mar)
 Раскрытие периодичности арктангенса при расчете фазо-частотной характеристики. Подробнее...
 

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

Функции

int dspl_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\), here \(dx = \frac{x_1 - x_0}{n-1}\), \(k = 0 \ldots n-1.\)

Периодическое заполнение (параметр type=DSPL_PERIODIC) согласно выражению:

\(x(k) = x_0 + k \cdot dx\), here \(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].
Память должна быть выделена.

Возвращает
DSPL_OK - функция выполнена успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR - указатель x не может быть NULL.
DSPL_ERROR_SIZE - Размер массива x должен быть больше единицы.
Заметки
Отличие периодического и симметричного заполнения можно понять из следующих примеров.
Пример 1. Периодическое заполнение.
1 double x[5];
2 dspl_linspace(0, 5, 5, DSPL_PERIODIC, x);
В массиве x будут лежать значения:
1 0, 1, 2, 3, 4


Пример 2. Симметричное заполнение.
1 double x[5];
2 dspl_linspace(0, 5, 5, DSPL_SYMMETRIC, x);
В массиве x будут лежать значения:
1 0, 1.25, 2.5, 3.75, 5
Автор
Бахурин Сергей. www.dsplib.org
Примеры:
hilbert_fft.c, resample_lagrange_ex_interp.c, resample_lagrange_filter_frac_delay.c, resample_lagrange_filter_interp.c, resample_spline_ex_interp.c, resample_spline_filter_frac_delay.c, resample_spline_filter_interp.c и win_spectral_leakage.c.

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

int dspl_log_cmplx ( double *  xR,
double *  xI,
int  n,
double *  yR,
double *  yI 
)

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

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

\[ \ln(x) = \ln \left( |x| \right) + j \cdot \arg(x). \]

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

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

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

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

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

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

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

int dspl_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].
Память должна быть выделена.

Возвращает
DSPL_OK - функция выполнена успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR - указатель x не может быть NULL.
DSPL_ERROR_SIZE - Размер массива x должен быть больше единицы.
Заметки
Отличие периодического и симметричного заполнения можно понять из следующих примеров.
Пример 1. Периодическое заполнение.
1 double x[5];
2 dspl_logspace(-2, 3, 5, DSPL_PERIODIC, x);
В массиве x будут лежать значения:
1 0.01, 0.1, 1, 10, 100


Пример 2. Симметричное заполнение.
1 double x[5];
2 dspl_logspace(-2, 3, 5, DSPL_SYMMETRIC, x);
В массиве x будут лежать значения:
1 0.01 0.178 3.162 56.234 1000
Автор
Бахурин Сергей. www.dsplib.org
int dspl_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*x^3 + ... a_N*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].
Память должна быть выделена.

Возвращает
DSPL_OK Полином расчитан успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR Ошибка указателя. Указатели a, x и y не могут быть NULL.
DSPL_ERROR_SIZE Ошибка размера вектора (n < 1).
DSPL_ERROR_POLY_ORD Порядок полинома должен быть выше 0.
Автор
Бахурин Сергей. www.dsplib.org
Примеры:
resample_lagrange_ex_frac_delay.c и resample_spline_ex_frac_delay.c.

Используется в dspl_polyval_cmplx(), dspl_resample_lagrange() и dspl_resample_spline().

int dspl_polyval_cmplx ( double *  aR,
double *  aI,
int  ord,
double *  xR,
double *  xI,
int  n,
double *  yR,
double *  yI 
)

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

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

\[ P_N(x) = a_0 + a_1 \cdot x + a_2 \cdot x^2 + a_3*x^3 + ... a_N*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]aRУказатель на вектор реальной части коэффициентов полинома.
Размер вектора [ord+1 x 1].
Коэффициент aR[0] соответствует коэффициенту полинома \(a_0\).

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

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

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

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

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

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

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

Возвращает
DSPL_OK Полином расчитан успешно.
В противном случае код ошибки:
DSPL_ERROR_PTR Ошибка указателя. Указатели aR, xR и yR не могут быть NULL.
Указатель yI не может быть NULL если aI не NULL или xI не NULL. DSPL_ERROR_SIZE Ошибка размера вектора (n < 1).
DSPL_ERROR_POLY_ORD Порядок полинома должен быть выше 0.
Автор
Бахурин Сергей. www.dsplib.org

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

int dspl_sqrt_cmplx ( double *  xR,
double *  xI,
int  n,
double *  yR,
double *  yI 
)

Корень квадратный комплексного векторного аргумента

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

\[ \sqrt {x}={\sqrt {\frac {|x|+\Re (x)}{2}}} + \operatorname {sign} \left(\Im (x) \right) \cdot j\ {\sqrt {\frac {|x|-\Re (x)}{2}}}. \]

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

[in]xIУказатель на вектор мнимой части комплексного аргумента \( x \).
Размер вектора [n x 1].
Данный указатель может быть NULL, если необходимо рассчитать значения квадратного корня для вещественного векторного аргумента.

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

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

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

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

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

int dspl_unwrap ( double *  phi,
int  n,
double  lev,
double  mar 
)

Раскрытие периодичности арктангенса при расчете фазо-частотной характеристики.

Аргументы
[in,out]phiУказатель на вектор фазо-частотной характеристики.
Размер вектора [n x 1].
ФЧХ после раскрытия будет помещена по этому же адресу.

[in]nРазмер вектора ФЧХ.

[in]levПериод арктангенса.
M_2PI или M_PI в зависимости от способа расчета ФЧХ.
Так при использовании функции atan периодичность составит M_PI, а при использовании atan2 периодичность равна M_2PI.

[in]marЗапас при котором считается, что произошел переход на следующий период арктангенса.
Значение от 0 до 1.
Так например если lev = M_PI и mar = 0.8, то переход на следующий период арктангенса будет зафиксирован если |p[k] - phi[k-1]| > 0.8 * M_PI.

Возвращает
DSPL_OK если функция расчитана успешно.
В противном случае код ошибки.
Заметки
Данная функция является рекурсивной.
Это означает что она выполняется до тех пор пока в исходном векторе будут определены переходы на следующий период арктангенса.
Так например функция работает корректно если в исходной фазо-частотной характеристике период фазы составляет \( 2\pi \), в то время как lev = M_PI.
Функция осуществит два прохода в этом случае и корректно раскроет периодичность по фазе.

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

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