doc modified and png files for doxygen are commited
Changes to be committed: modified: _release/dspl.c modified: _release/dspl.h modified: dspl/dox/doxyfile_ru modified: dspl/dox/ru/getting_started_compile_make_win.dox new file: dspl/dox/ru/img/.gitignore new file: dspl/dox/ru/img/codeblocks_1.png new file: dspl/dox/ru/img/codeblocks_10.png new file: dspl/dox/ru/img/codeblocks_11.png new file: dspl/dox/ru/img/codeblocks_12.png new file: dspl/dox/ru/img/codeblocks_2.png new file: dspl/dox/ru/img/codeblocks_3.png new file: dspl/dox/ru/img/codeblocks_4.png new file: dspl/dox/ru/img/codeblocks_5.png new file: dspl/dox/ru/img/codeblocks_6.png new file: dspl/dox/ru/img/codeblocks_7.png new file: dspl/dox/ru/img/codeblocks_8.png new file: dspl/dox/ru/img/codeblocks_9.png new file: dspl/dox/ru/img/dspl_small.png new file: dspl/dox/ru/img/libdspl_bin.png new file: dspl/dox/ru/img/libdspl_cmd.png new file: dspl/dox/ru/img/libdspl_dir.png new file: dspl/dox/ru/img/libdspl_release.png new file: dspl/dox/ru/img/welch_overlap.png new file: dspl/dox/ru/img/winconsole_1.png new file: dspl/dox/ru/img/writetxt_3d_matrix.png modified: dspl/src/inout.c modified: dspl/src/psd.c modified: include/dspl.c modified: include/dspl.hpull/6/merge
146
_release/dspl.c
|
@ -223,115 +223,6 @@ p_xcorr_cmplx xcorr_cmplx ;
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Perform dynamic linking and load libdspl-2.0 functions.
|
||||
|
||||
This function attempts to link to the library `libdspl.dll` in
|
||||
Windows system and the `libdspl.so` library on the Linux system.
|
||||
The library is assumed to be in the same directory as the application.
|
||||
user, or the path to the library is registered in the operating path variables
|
||||
system.
|
||||
|
||||
Upon successful binding and loading of library functions, the handle is returned
|
||||
libraries, as well as in the address space of the application appear
|
||||
pointers to libdspl-2.0 functions.
|
||||
|
||||
\note
|
||||
The returned handle is of type `void *`, which can be cast on Windows
|
||||
to type `HINSTANCE`. In practice, this is not necessary, because this
|
||||
the type is cast to `HINSTANCE` automatically if the compiler flag is set,
|
||||
indicating that the application is being built on Windows.
|
||||
|
||||
An example of a simple program that implements dynamic binding with DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
void * hdspl; // DSPL handle
|
||||
hdspl = dspl_load (); // Dynamic linking
|
||||
|
||||
// Check the pointer. If `NULL`, then the link failed
|
||||
if (! hdspl)
|
||||
{
|
||||
printf ("libdspl loading error! \n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// The link was successful, you can call the functions of DSPL-2.0
|
||||
|
||||
//Before correctly terminating the application, you must unlink
|
||||
//library and clear memory.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Произвести динамическую линковку и загрузить функции libdspl-2.0.
|
||||
|
||||
Данная функция производит попытку связывания с библиотекой `libdspl.dll` в
|
||||
системе Windows и с библиотекой `libdspl.so` в системе Linux.
|
||||
Предполагается, что библиотека находится в одной директории с приложением
|
||||
пользователя, или путь к библиотеке прописан в переменных пути операционной
|
||||
системы.
|
||||
|
||||
При удачном связывании и загрузке функций библиотеки возвращается хэндл
|
||||
библиотеки, а также в адресном пространстве приложения появляются
|
||||
указатели на функции libdspl-2.0.
|
||||
|
||||
\note
|
||||
Возвращаемый хэндл имеет тип `void*`, который в ОС Windows может быть приведен
|
||||
к типу `HINSTANCE`. На практике необходимости в этом, нет, потому что данный
|
||||
тип приводится к `HINSTANCE` автоматически, если выставлен флаг компилятора,
|
||||
указывающий, что сборка приложения производится в ОС Windows.
|
||||
|
||||
Пример простейшей программы реализующей динамическое связывание с DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; // DSPL хэндл
|
||||
hdspl = dspl_load(); // Динамическая линковка
|
||||
|
||||
// Проверяем указатель. Если `NULLL`, то линковка прошла неудачно
|
||||
if(!hdspl)
|
||||
{
|
||||
printf("libdspl loading error!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Линковка прошла успешно можно вызывать функции DSPL-2.0
|
||||
|
||||
// Перед корректным завершением приложения необходимо разлинковать
|
||||
// библиотеку и очистить память.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
void* dspl_load()
|
||||
{
|
||||
char* fname;
|
||||
|
@ -551,43 +442,6 @@ void* dspl_load()
|
|||
|
||||
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Cleans up the previously linked DSPL-2.0 dynamic library.
|
||||
|
||||
This cross-platform function clears the library `libdspl.dll` in
|
||||
Windows system and from the library `libdspl.so` on the Linux system.
|
||||
After cleaning the library, all functions will become unavailable.
|
||||
|
||||
\param [in] handle
|
||||
Handle of the previously linked DSPL-2.0 library. \n
|
||||
This pointer can be `NULL`, in this case no action
|
||||
are being produced.
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Очищает связанную ранее динамическую библиотеку DSPL-2.0.
|
||||
|
||||
Данная кроссплатформенная функция производит очистку библиотеки `libdspl.dll` в
|
||||
системе Windows и с библиотеки `libdspl.so` в системе Linux.
|
||||
После очистки библиотеки все функции станут недоступны.
|
||||
|
||||
\param[in] handle
|
||||
Хэндл прилинкованной ранее библиотеки DSPL-2.0. \n
|
||||
Данный указатель может быть `NULL`, в этом случае никакие действия не
|
||||
производятся.
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
**************************************************************************** */
|
||||
#endif
|
||||
void dspl_free(void* handle)
|
||||
{
|
||||
#ifdef WIN_OS
|
||||
|
|
308
_release/dspl.h
|
@ -62,14 +62,14 @@ special macros: \ref RE, \ref IM, \ref ABSSQR
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\typedef complex_t
|
||||
\brief Описание комплексного типа данных.
|
||||
\brief Описание комплексного типа данных.
|
||||
|
||||
Комплексный тип данных в библиотеке libdspl-2.0 определен как
|
||||
массив из двух элементов типа `double`.
|
||||
При этом первый элемент массива определяет реальную часть
|
||||
комплексного числа, а второй - мнимую.
|
||||
Комплексный тип данных в библиотеке libdspl-2.0 определен как
|
||||
массив из двух элементов типа `double`.
|
||||
При этом первый элемент массива определяет реальную часть
|
||||
комплексного числа, а второй - мнимую.
|
||||
|
||||
Например:
|
||||
Например:
|
||||
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
|
@ -77,10 +77,10 @@ special macros: \ref RE, \ref IM, \ref ABSSQR
|
|||
z[1] = -2.0;
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
|
||||
Для удобства работы с комплексными числами реализованы
|
||||
специальные макросы: \ref RE, \ref IM, \ref ABSSQR
|
||||
Для удобства работы с комплексными числами реализованы
|
||||
специальные макросы: \ref RE, \ref IM, \ref ABSSQR
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
typedef double complex_t[2];
|
||||
|
@ -147,7 +147,7 @@ fft_free(&pfft);
|
|||
\note
|
||||
It is important to note that if the object `fft_t` was created for the FFT size
|
||||
equal to` n`, it can only be used for FFT of size `n`. \n \n
|
||||
It’s also worth noting that the FFT functions independently control the size,
|
||||
It’s also worth noting that the FFT functions independently control the size,
|
||||
and independently allocate the memory of the FFT object, if necessary.
|
||||
So if you call any function using the `fft_t` structure with filled
|
||||
data for the FFT length `k` for calculating the FFT of length`n`,
|
||||
|
@ -160,66 +160,66 @@ then the structure arrays will be automatically recreated for the length `n`.
|
|||
/*! ****************************************************************************
|
||||
\ingroup DFT_GROUP
|
||||
\struct fft_t
|
||||
\brief Структура данных объекта быстрого преобразования Фурье
|
||||
\brief Структура данных объекта быстрого преобразования Фурье
|
||||
|
||||
Структура хранит указатели на массивы поворотных коэффициентов
|
||||
и массивы промежуточных данных алгоритма быстрого преобразования Фурье.
|
||||
Структура хранит указатели на массивы поворотных коэффициентов
|
||||
и массивы промежуточных данных алгоритма быстрого преобразования Фурье.
|
||||
|
||||
Библиотека libdspl-2.0 использует для БПФ алгоритм для составной длины
|
||||
Библиотека libdspl-2.0 использует для БПФ алгоритм для составной длины
|
||||
|
||||
\param n
|
||||
Размер вектора БПФ, для которого выделена память в массивах структуры. \n
|
||||
Парметр `n` должен быть равен целой степени двойки. \n \n
|
||||
Размер вектора БПФ, для которого выделена память в массивах структуры. \n
|
||||
Парметр `n` должен быть равен целой степени двойки. \n \n
|
||||
|
||||
\param w
|
||||
Указатель на вектор поворотных коэффициентов алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена и массив поворотных коэффициентов
|
||||
должен быть заполнен функцией \ref fft_create. \n \n
|
||||
Указатель на вектор поворотных коэффициентов алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена и массив поворотных коэффициентов
|
||||
должен быть заполнен функцией \ref fft_create. \n \n
|
||||
|
||||
\param t0
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
|
||||
\param t1
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
Структура заполняется функцией \ref fft_create один раз
|
||||
до использования алгоритма БПФ. \n
|
||||
Указатель на объект данной структуры может быть
|
||||
многократно использован при вызове функций БПФ. \n
|
||||
Перед выходом из программы выделенную память под поворотные
|
||||
коэффициенты и массивы промежуточных данных
|
||||
необходимо очистить функцией \ref fft_free. Например:
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
Структура заполняется функцией \ref fft_create один раз
|
||||
до использования алгоритма БПФ. \n
|
||||
Указатель на объект данной структуры может быть
|
||||
многократно использован при вызове функций БПФ. \n
|
||||
Перед выходом из программы выделенную память под поворотные
|
||||
коэффициенты и массивы промежуточных данных
|
||||
необходимо очистить функцией \ref fft_free. Например:
|
||||
\code
|
||||
fft_t pfft = {0}; // объявляем объект fft_t и обнуляем все поля
|
||||
int n = 64; // Размер БПФ
|
||||
fft_t pfft = {0}; // объявляем объект fft_t и обнуляем все поля
|
||||
int n = 64; // Размер БПФ
|
||||
int err;
|
||||
|
||||
// создаем объект для 64-точечного БПФ
|
||||
// создаем объект для 64-точечного БПФ
|
||||
err = fft_create(&pfft, n);
|
||||
|
||||
// Вызов БПФ функции
|
||||
// Еще раз вызов БПФ функции
|
||||
// Вызов БПФ функции
|
||||
// Еще раз вызов БПФ функции
|
||||
// ...
|
||||
|
||||
// очистить память объекта БПФ
|
||||
// очистить память объекта БПФ
|
||||
fft_free(&pfft);
|
||||
\endcode
|
||||
|
||||
\note
|
||||
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
|
||||
то он может быть использован только для БПФ размера `n`. \n\n
|
||||
Также необходимо заметить, что функции БПФ самостоятельно контролируют размер,
|
||||
и самостоятельно выделяют память объекта БПФ при необходимости.
|
||||
Так если вызвать любую функцию использующую структуру `fft_t` с заполненными
|
||||
данными для длины БПФ `k` для расчета БПФ длины `n`,
|
||||
то массивы структуры будут автоматически пересозданы для длины `n`.
|
||||
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
|
||||
то он может быть использован только для БПФ размера `n`. \n\n
|
||||
Также необходимо заметить, что функции БПФ самостоятельно контролируют размер,
|
||||
и самостоятельно выделяют память объекта БПФ при необходимости.
|
||||
Так если вызвать любую функцию использующую структуру `fft_t` с заполненными
|
||||
данными для длины БПФ `k` для расчета БПФ длины `n`,
|
||||
то массивы структуры будут автоматически пересозданы для длины `n`.
|
||||
|
||||
\author
|
||||
Бахурин Сергей.
|
||||
Бахурин Сергей.
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
|
@ -244,14 +244,14 @@ typedef struct
|
|||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_RAND_GEN_GROUP
|
||||
\struct random_t
|
||||
\brief Структура параметров датчиков псевдослучайных чисел.
|
||||
\brief Структура параметров датчиков псевдослучайных чисел.
|
||||
|
||||
Структура хранит инициализацию и текущие регистры различных датчиков
|
||||
псевдослучайных чисел. В библиотеке используются следующие датчики:
|
||||
\li MRG32K3A -- 32 битный датчик разработан Пьером Лекуэром [1].
|
||||
\li MT19937-64 -- 64-битный датчик
|
||||
Структура хранит инициализацию и текущие регистры различных датчиков
|
||||
псевдослучайных чисел. В библиотеке используются следующие датчики:
|
||||
\li MRG32K3A -- 32 битный датчик разработан Пьером Лекуэром [1].
|
||||
\li MT19937-64 -- 64-битный датчик
|
||||
<a href = "https://en.wikipedia.org/wiki/Mersenne_Twister">
|
||||
Вихрь Мерсенна
|
||||
Вихрь Мерсенна
|
||||
</a> [2, 3].
|
||||
|
||||
\note
|
||||
|
@ -265,24 +265,24 @@ typedef struct
|
|||
on Modeling and Computer Simulation 8. (Jan. 1998) 3--30. \n\n
|
||||
|
||||
\param mrg32k3a_seed
|
||||
Начальная инициализация датчика MRG32K3A. \n \n
|
||||
Начальная инициализация датчика MRG32K3A. \n \n
|
||||
|
||||
\param mrg32k3a_x
|
||||
Первый вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
Первый вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
|
||||
\param mrg32k3a_y
|
||||
Второй вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
Второй вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
|
||||
\param mt19937_mt
|
||||
Первый вектор состояния рекурсивного датчика MT19937-64. \n \n
|
||||
Первый вектор состояния рекурсивного датчика MT19937-64. \n \n
|
||||
|
||||
\param mt19937_mti
|
||||
Текущий индекс в векторе состояния датчика MT19937-64. \n \n
|
||||
Текущий индекс в векторе состояния датчика MT19937-64. \n \n
|
||||
|
||||
Параметры данной структуры заполняются автоматически функцией `random_init`
|
||||
и используются функциями генерации псевдослучайных векторов.
|
||||
Параметры данной структуры заполняются автоматически функцией `random_init`
|
||||
и используются функциями генерации псевдослучайных векторов.
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
typedef struct
|
||||
|
@ -333,27 +333,27 @@ but variable `r` will keep 3.
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\def RE(x)
|
||||
\brief Макрос определяющий реальную часть комплексного числа.
|
||||
\brief Макрос определяющий реальную часть комплексного числа.
|
||||
|
||||
Например:
|
||||
Например:
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
RE(z) = 1.0;
|
||||
IM(z) = -2.0;
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` --- мнимая единица.
|
||||
Переменная `z = 1-2j`, где `j` --- мнимая единица.
|
||||
|
||||
Аналогично, макрос можно использовать для получения
|
||||
реальной части комплексного числа:
|
||||
Аналогично, макрос можно использовать для получения
|
||||
реальной части комплексного числа:
|
||||
|
||||
\code{.cpp}
|
||||
complex_t z = {3.0, -4.0};
|
||||
double r;
|
||||
r = RE(z);
|
||||
\endcode
|
||||
В данном примере переменная `z = 3-4i`, а в переменой `r`
|
||||
будет храниться число 3.
|
||||
В данном примере переменная `z = 3-4i`, а в переменой `r`
|
||||
будет храниться число 3.
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#define RE(x) (x[0])
|
||||
|
@ -392,26 +392,26 @@ but variable `r` will keep -4.
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\def IM(x)
|
||||
\brief Макрос определяющий мнимую часть комплексного числа.
|
||||
\brief Макрос определяющий мнимую часть комплексного числа.
|
||||
|
||||
Например:
|
||||
Например:
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
RE(z) = 1.0;
|
||||
IM(z) = -2.0;
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
|
||||
Аналогично, макрос можно использовать для получения
|
||||
мнимой части комплексного числа:
|
||||
Аналогично, макрос можно использовать для получения
|
||||
мнимой части комплексного числа:
|
||||
\code{.cpp}
|
||||
complex_t z = {3.0, -4.0};
|
||||
double r;
|
||||
r = IM(z);
|
||||
\endcode
|
||||
В данном примере переменная `z = 3-4i`,
|
||||
а в переменой `r` будет храниться число -4.
|
||||
В данном примере переменная `z = 3-4i`,
|
||||
а в переменой `r` будет храниться число -4.
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#define IM(x) (x[1])
|
||||
|
@ -450,15 +450,15 @@ Variable `z = 1-2j`, here `j` - imaginary unit, but variable `y = 5`.
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\def ABSSQR(x)
|
||||
\brief Макрос возвращает квадрат модуля комплексного числа `x`.
|
||||
\brief Макрос возвращает квадрат модуля комплексного числа `x`.
|
||||
|
||||
Квадрат модуля комплексного числа \f$ x = a + j b \f$ равен:
|
||||
Квадрат модуля комплексного числа \f$ x = a + j b \f$ равен:
|
||||
|
||||
\f[
|
||||
|x|^2 = x x^* = a^2 + b^2.
|
||||
\f]
|
||||
|
||||
Например:
|
||||
Например:
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
double y;
|
||||
|
@ -467,7 +467,7 @@ Variable `z = 1-2j`, here `j` - imaginary unit, but variable `y = 5`.
|
|||
y = ABSSQR(z);
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица, а переменная `y = 5`.
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица, а переменная `y = 5`.
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#define ABSSQR(x) ((SQR(RE(x))) + (SQR(IM(x))))
|
||||
|
@ -1563,7 +1563,157 @@ DECLARE_FUNC(int, xcorr_cmplx, complex_t* x
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Cleans up the previously linked DSPL-2.0 dynamic library.
|
||||
|
||||
This cross-platform function clears the library `libdspl.dll` in
|
||||
Windows system and from the library `libdspl.so` on the Linux system.
|
||||
After cleaning the library, all functions will become unavailable.
|
||||
|
||||
\param [in] handle
|
||||
Handle of the previously linked DSPL-2.0 library. \n
|
||||
This pointer can be `NULL`, in this case no action
|
||||
are being produced.
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Очищает связанную ранее динамическую библиотеку DSPL-2.0.
|
||||
|
||||
Данная кроссплатформенная функция производит очистку библиотеки `libdspl.dll` в
|
||||
системе Windows и с библиотеки `libdspl.so` в системе Linux.
|
||||
После очистки библиотеки все функции станут недоступны.
|
||||
|
||||
\param[in] handle
|
||||
Хэндл прилинкованной ранее библиотеки DSPL-2.0. \n
|
||||
Данный указатель может быть `NULL`, в этом случае никакие действия не
|
||||
производятся.\n\n
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
**************************************************************************** */
|
||||
#endif
|
||||
void* dspl_load();
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Perform dynamic linking and load libdspl-2.0 functions.
|
||||
|
||||
This function attempts to link to the library `libdspl.dll` in
|
||||
Windows system and the `libdspl.so` library on the Linux system.
|
||||
The library is assumed to be in the same directory as the application.
|
||||
user, or the path to the library is registered in the operating path variables
|
||||
system.
|
||||
|
||||
Upon successful binding and loading of library functions, the handle is returned
|
||||
libraries, as well as in the address space of the application appear
|
||||
pointers to libdspl-2.0 functions.
|
||||
|
||||
\note
|
||||
The returned handle is of type `void *`, which can be cast on Windows
|
||||
to type `HINSTANCE`. In practice, this is not necessary, because this
|
||||
the type is cast to `HINSTANCE` automatically if the compiler flag is set,
|
||||
indicating that the application is being built on Windows.
|
||||
|
||||
An example of a simple program that implements dynamic binding with DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
void *hdspl; // DSPL handle
|
||||
hdspl = dspl_load (); // Dynamic linking
|
||||
|
||||
// Check the pointer. If `NULL`, then the link failed
|
||||
if (! hdspl)
|
||||
{
|
||||
printf ("libdspl loading error! \n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// The link was successful, you can call the functions of DSPL-2.0
|
||||
|
||||
//Before correctly terminating the application, you must unlink
|
||||
//library and clear memory.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Произвести динамическую линковку и загрузить функции libdspl-2.0.
|
||||
|
||||
Данная функция производит попытку связывания с библиотекой `libdspl.dll` в
|
||||
системе Windows и с библиотекой `libdspl.so` в системе Linux.
|
||||
Предполагается, что библиотека находится в одной директории с приложением
|
||||
пользователя, или путь к библиотеке прописан в переменных пути операционной
|
||||
системы.
|
||||
|
||||
При удачном связывании и загрузке функций библиотеки возвращается хэндл
|
||||
библиотеки, а также в адресном пространстве приложения появляются
|
||||
указатели на функции libdspl-2.0.
|
||||
|
||||
\note
|
||||
Возвращаемый хэндл имеет тип `void*`, который в ОС Windows может быть приведен
|
||||
к типу `HINSTANCE`. На практике необходимости в этом, нет, потому что данный
|
||||
тип приводится к `HINSTANCE` автоматически, если выставлен флаг компилятора,
|
||||
указывающий, что сборка приложения производится в ОС Windows.
|
||||
|
||||
Пример простейшей программы реализующей динамическое связывание с DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; // DSPL хэндл
|
||||
hdspl = dspl_load(); // Динамическая линковка
|
||||
|
||||
// Проверяем указатель. Если `NULLL`, то линковка прошла неудачно
|
||||
if(!hdspl)
|
||||
{
|
||||
printf("libdspl loading error!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Линковка прошла успешно можно вызывать функции DSPL-2.0
|
||||
|
||||
// Перед корректным завершением приложения необходимо разлинковать
|
||||
// библиотеку и очистить память.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
void dspl_free(void* handle);
|
||||
|
||||
|
||||
|
|
|
@ -825,9 +825,10 @@ WARN_LOGFILE =
|
|||
|
||||
INPUT = ru \
|
||||
../src \
|
||||
../../include \
|
||||
../../examples/src \
|
||||
../../examples/bin/img
|
||||
../../examples/bin/img \
|
||||
../../include \
|
||||
../../include/dspl.c
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
|
@ -855,49 +856,8 @@ INPUT_ENCODING = UTF-8
|
|||
# *.vhdl, *.ucf, *.qsf and *.ice.
|
||||
|
||||
FILE_PATTERNS = *.c \
|
||||
*.cc \
|
||||
*.cxx \
|
||||
*.cpp \
|
||||
*.c++ \
|
||||
*.java \
|
||||
*.ii \
|
||||
*.ixx \
|
||||
*.ipp \
|
||||
*.i++ \
|
||||
*.inl \
|
||||
*.idl \
|
||||
*.ddl \
|
||||
*.odl \
|
||||
*.h \
|
||||
*.hh \
|
||||
*.hxx \
|
||||
*.hpp \
|
||||
*.h++ \
|
||||
*.cs \
|
||||
*.d \
|
||||
*.php \
|
||||
*.php4 \
|
||||
*.php5 \
|
||||
*.phtml \
|
||||
*.inc \
|
||||
*.m \
|
||||
*.markdown \
|
||||
*.md \
|
||||
*.mm \
|
||||
*.dox \
|
||||
*.py \
|
||||
*.pyw \
|
||||
*.f90 \
|
||||
*.f \
|
||||
*.for \
|
||||
*.tcl \
|
||||
*.vhd \
|
||||
*.vhdl \
|
||||
*.ucf \
|
||||
*.qsf \
|
||||
*.as \
|
||||
*.js \
|
||||
*.plt
|
||||
*.dox
|
||||
|
||||
# The RECURSIVE tag can be used to specify whether or not subdirectories should
|
||||
# be searched for input files as well.
|
||||
|
@ -1614,7 +1574,7 @@ FORMULA_MACROFILE =
|
|||
# The default value is: NO.
|
||||
# This tag requires that the tag GENERATE_HTML is set to YES.
|
||||
|
||||
USE_MATHJAX = NO
|
||||
USE_MATHJAX = YES
|
||||
|
||||
# When MathJax is enabled you can set the default output format to be used for
|
||||
# the MathJax output. See the MathJax site (see:
|
||||
|
|
|
@ -59,8 +59,18 @@
|
|||
быстрее, потому что при первой сборке компилируются библиотеки BLAS и
|
||||
LAPACK, которые линкуются в дальнейшем из готовых объектных файлов.
|
||||
|
||||
После сборки проекта можно перейти в каталог `bin` в котором сохранены
|
||||
программы примеры. Также в данном каталоге можно найти готовую библиотеку
|
||||
После сборки библиотеки в каталоге `_release` появится файл скомпилированной
|
||||
библиотеки `libdspl.dll`, а также заголовочный файл `dspl.h` и файл `dspl.c`
|
||||
с функциями импорта библиотеки.
|
||||
|
||||
\n
|
||||
\n
|
||||
\image html libdspl_release.png
|
||||
\n
|
||||
\n
|
||||
|
||||
Также можно перейти в каталог `examples/bin` в котором сохранены
|
||||
примеры. Также в данном каталоге можно найти готовую библиотеку
|
||||
`libdspl.dll`:
|
||||
\n
|
||||
\n
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
!*.png
|
Po Szerokość: | Wysokość: | Rozmiar: 121 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 81 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 82 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 9.7 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 29 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 70 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 71 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 52 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 72 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 20 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 66 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 9.7 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 381 B |
Po Szerokość: | Wysokość: | Rozmiar: 44 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 39 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 41 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 14 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 6.7 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 10 KiB |
Po Szerokość: | Wysokość: | Rozmiar: 14 KiB |
198
dspl/src/inout.c
|
@ -236,67 +236,67 @@ end
|
|||
/*! ****************************************************************************
|
||||
\ingroup IN_OUT_GROUP
|
||||
\fn int writebin(void* x, int n, int dtype, char* fn)
|
||||
\brief Сохранить данные в бинарный файл
|
||||
\brief Сохранить данные в бинарный файл
|
||||
|
||||
Функция сохраняет реальный или комплексный вектор данных
|
||||
размера `[n x 1]` в бинарный файл `fn`. \n \n
|
||||
Функция сохраняет реальный или комплексный вектор данных
|
||||
размера `[n x 1]` в бинарный файл `fn`. \n \n
|
||||
|
||||
Файл является универсальным для хранения как одномерных,
|
||||
так и двумерных массивов и имеет следующий формат: \n \n
|
||||
Файл является универсальным для хранения как одномерных,
|
||||
так и двумерных массивов и имеет следующий формат: \n \n
|
||||
\verbatim
|
||||
|
||||
type 4 байта типа int.
|
||||
Может принимать значение:
|
||||
DAT_DOUBLE, если x указатель на вектор вещественных чисел;
|
||||
DAT_COMPLEX, если x указатель на вектор комплексных чисел.
|
||||
type 4 байта типа int.
|
||||
Может принимать значение:
|
||||
DAT_DOUBLE, если x указатель на вектор вещественных чисел;
|
||||
DAT_COMPLEX, если x указатель на вектор комплексных чисел.
|
||||
|
||||
n 4 байта типа int.
|
||||
Количество строк данных.
|
||||
n 4 байта типа int.
|
||||
Количество строк данных.
|
||||
|
||||
m 4 байта типа int.
|
||||
Количество столбцов данных.
|
||||
При сохранении вектора всегда равно 1.
|
||||
m 4 байта типа int.
|
||||
Количество столбцов данных.
|
||||
При сохранении вектора всегда равно 1.
|
||||
|
||||
data Данные в бинарном виде.
|
||||
Размер данных:
|
||||
n * sizeof(double), если dtype==DAT_DOUBLE;
|
||||
n * sizeof(complex_t), если dtype==DAT_COMPLEX.
|
||||
data Данные в бинарном виде.
|
||||
Размер данных:
|
||||
n * sizeof(double), если dtype==DAT_DOUBLE;
|
||||
n * sizeof(complex_t), если dtype==DAT_COMPLEX.
|
||||
\endverbatim
|
||||
|
||||
Файл может быть использован для верификации алгоритмов сторонними пакетами,
|
||||
такими как GNU Octave, Matlab, Python и т.д. \n \n
|
||||
Файл может быть использован для верификации алгоритмов сторонними пакетами,
|
||||
такими как GNU Octave, Matlab, Python и т.д. \n \n
|
||||
|
||||
\param[in] x
|
||||
Указатель на массив данных. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Указатель на массив данных. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
\n
|
||||
|
||||
\param[in] n
|
||||
Размер вектора данных. \n
|
||||
Размер вектора данных. \n
|
||||
\n
|
||||
|
||||
\param[in] dtype
|
||||
Тип данных. \n
|
||||
Может принимать значения: \n
|
||||
`DAT_DOUBLE` -- вещественные данные; \n
|
||||
`DAT_COMPLEX` -- комплексные данные. \n
|
||||
Тип данных. \n
|
||||
Может принимать значения: \n
|
||||
`DAT_DOUBLE` -- вещественные данные; \n
|
||||
`DAT_COMPLEX` -- комплексные данные. \n
|
||||
\n
|
||||
|
||||
\param[in] fn
|
||||
Имя файла. \n
|
||||
Имя файла. \n
|
||||
\n
|
||||
|
||||
\return
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки". \n
|
||||
|
||||
\note
|
||||
Данная функция производит запись в файл без потери точности,
|
||||
поэтому рекомендуется использовать ее для верификации данных DSPL. \n
|
||||
Данная функция производит запись в файл без потери точности,
|
||||
поэтому рекомендуется использовать ее для верификации данных DSPL. \n
|
||||
\n
|
||||
|
||||
|
||||
Функция для чтения бинарного файла в GNU Octave и Matlab:
|
||||
Функция для чтения бинарного файла в GNU Octave и Matlab:
|
||||
\code{.m}
|
||||
function [dat, n, m] = readbin(fn)
|
||||
fid = fopen(fn);
|
||||
|
@ -322,7 +322,7 @@ function [dat, n, m] = readbin(fn)
|
|||
end
|
||||
\endcode
|
||||
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
int DSPL_API writebin(void* x, int n, int dtype, char* fn)
|
||||
|
@ -446,10 +446,10 @@ So, it is not recommended to use it to verify algorithms.
|
|||
/*! ****************************************************************************
|
||||
\ingroup IN_OUT_GROUP
|
||||
\fn int writetxt(double* x, double* y, int n, char* fn)
|
||||
\brief Сохранить вещественные данные в текстовый файл
|
||||
\brief Сохранить вещественные данные в текстовый файл
|
||||
|
||||
Функция сохраняет вещественные данные в текстовый файл `fn`. \n
|
||||
Файл имеет следующий формат: \n
|
||||
Функция сохраняет вещественные данные в текстовый файл `fn`. \n
|
||||
Файл имеет следующий формат: \n
|
||||
\verbatim
|
||||
x[0] y[0]
|
||||
x[1] y[1]
|
||||
|
@ -457,35 +457,35 @@ x[1] y[1]
|
|||
x[n-1] y[n-1]
|
||||
\endverbatim
|
||||
|
||||
Файл может быть использован для построения графика сторонней программой,
|
||||
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). \n
|
||||
Файл может быть использован для построения графика сторонней программой,
|
||||
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). \n
|
||||
|
||||
\param[in] x
|
||||
Указатель на первый вектор. \n
|
||||
Размер вектора `[n x 1]`. \n \n
|
||||
Указатель на первый вектор. \n
|
||||
Размер вектора `[n x 1]`. \n \n
|
||||
|
||||
\param[in] y
|
||||
Указатель на второй вектор. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Может быть `NULL`. \n
|
||||
Файл будет содержать только один столбец соответствующий
|
||||
вектору `x` если `y == NULL`. \n \n
|
||||
Указатель на второй вектор. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Может быть `NULL`. \n
|
||||
Файл будет содержать только один столбец соответствующий
|
||||
вектору `x` если `y == NULL`. \n \n
|
||||
|
||||
\param[in] n
|
||||
Размер входных векторов. \n \n
|
||||
Размер входных векторов. \n \n
|
||||
|
||||
\param[in] fn
|
||||
Имя файла. \n \n
|
||||
Имя файла. \n \n
|
||||
|
||||
\return
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
|
||||
\note
|
||||
Данная функция производит округление данных при записи в файл.
|
||||
Поэтому не рекомендуется использовать ее для верификации данных DSPL.
|
||||
Данная функция производит округление данных при записи в файл.
|
||||
Поэтому не рекомендуется использовать ее для верификации данных DSPL.
|
||||
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
int DSPL_API writetxt(double* x, double* y, int n, char* fn)
|
||||
|
@ -622,10 +622,10 @@ Else \ref ERROR_CODE_GROUP "code error".
|
|||
\ingroup IN_OUT_GROUP
|
||||
\fn int writetxt_int(int* x, int* y, int n, char* fn)
|
||||
|
||||
\brief Сохранить целочисленные данные в текстовый файл
|
||||
\brief Сохранить целочисленные данные в текстовый файл
|
||||
|
||||
Функция сохраняет целочисленные данные в текстовый файл `fn`. \n
|
||||
Файл имеет следующий формат: \n
|
||||
Функция сохраняет целочисленные данные в текстовый файл `fn`. \n
|
||||
Файл имеет следующий формат: \n
|
||||
|
||||
\verbatim
|
||||
x[0] y[0]
|
||||
|
@ -634,31 +634,31 @@ x[1] y[1]
|
|||
x[n-1] y[n-1]
|
||||
\endverbatim
|
||||
|
||||
Файл может быть использован для построения графика сторонней программой,
|
||||
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). \n
|
||||
Файл может быть использован для построения графика сторонней программой,
|
||||
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). \n
|
||||
|
||||
\param[in] x
|
||||
Указатель на первый вектор. \n
|
||||
Размер вектора `[n x 1]`. \n \n
|
||||
Указатель на первый вектор. \n
|
||||
Размер вектора `[n x 1]`. \n \n
|
||||
|
||||
\param[in] y
|
||||
Указатель на второй вектор. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Может быть `NULL`. \n
|
||||
Файл будет содержать только один столбец соответствующий
|
||||
вектору `x` если `y == NULL`. \n \n
|
||||
Указатель на второй вектор. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Может быть `NULL`. \n
|
||||
Файл будет содержать только один столбец соответствующий
|
||||
вектору `x` если `y == NULL`. \n \n
|
||||
|
||||
\param[in] n
|
||||
Размер входных векторов. \n \n
|
||||
Размер входных векторов. \n \n
|
||||
|
||||
\param[in] fn
|
||||
Имя файла. \n \n
|
||||
Имя файла. \n \n
|
||||
|
||||
\return
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
int DSPL_API writetxt_int(int* x, int* y, int n, char* fn)
|
||||
|
@ -790,17 +790,17 @@ In addition, GNUPLOT built a 3D surface by data
|
|||
\ingroup IN_OUT_GROUP
|
||||
\fn int writetxt_3d(double* x, int nx, double* y, int ny, double* z, char* fn)
|
||||
|
||||
\brief Сохранить данные для построения 3D графика
|
||||
\brief Сохранить данные для построения 3D графика
|
||||
|
||||
Функция сохраняет вещественные данные в текстовый файл `fn`
|
||||
для построения 3D поверхности. \n
|
||||
Функция \f$ z(x,y)\f$ описывается матрицей значений `z[x[n], y[n]]`
|
||||
как это показано на рисунке
|
||||
Функция сохраняет вещественные данные в текстовый файл `fn`
|
||||
для построения 3D поверхности. \n
|
||||
Функция \f$ z(x,y)\f$ описывается матрицей значений `z[x[n], y[n]]`
|
||||
как это показано на рисунке
|
||||
|
||||
\image html writetxt_3d_matrix.png
|
||||
|
||||
Матрица `z` хранится в памяти по столбцам, как это показано красной стрелкой. \n
|
||||
Файл имеет следующий формат: \n
|
||||
Матрица `z` хранится в памяти по столбцам, как это показано красной стрелкой. \n
|
||||
Файл имеет следующий формат: \n
|
||||
|
||||
\verbatim
|
||||
x[0] y[0] z[0, 0]
|
||||
|
@ -825,56 +825,56 @@ x[2] y[ny-1] z[2, ny-1]
|
|||
... ... ...
|
||||
x[nx-1] y[ny-1] z[nx-1, ny-1]
|
||||
\endverbatim
|
||||
Таким образом, каждое значение матрицы `z` записано отдельной строкой со
|
||||
соответствующими значениями `x` и `y`. Столбцы матрицы отделены пустой строкой.
|
||||
Таким образом, каждое значение матрицы `z` записано отдельной строкой со
|
||||
соответствующими значениями `x` и `y`. Столбцы матрицы отделены пустой строкой.
|
||||
|
||||
Файл может быть использован для построения графика сторонней программой,
|
||||
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). Также данный формат
|
||||
поддерживается пакетами pgfplot3d издательской системы Latex. \n
|
||||
Файл может быть использован для построения графика сторонней программой,
|
||||
например пакетом GNUPLOT (см. раздел \ref PLOT_GROUP). Также данный формат
|
||||
поддерживается пакетами pgfplot3d издательской системы Latex. \n
|
||||
|
||||
\param[in] x
|
||||
Указатель на вектор значений оси `x`. \n
|
||||
Размер вектора `[nx x 1]`. \n \n
|
||||
Указатель на вектор значений оси `x`. \n
|
||||
Размер вектора `[nx x 1]`. \n \n
|
||||
|
||||
\param[in] nx
|
||||
Размер вектора оси `x`. \n \n
|
||||
Размер вектора оси `x`. \n \n
|
||||
|
||||
|
||||
\param[in] y
|
||||
Указатель на второй вектор значений оси `y`. \n
|
||||
Размер вектора `[ny x 1]`. \n
|
||||
Указатель на второй вектор значений оси `y`. \n
|
||||
Размер вектора `[ny x 1]`. \n
|
||||
|
||||
\param[in] ny
|
||||
Размер вектора оси `y`. \n \n
|
||||
Размер вектора оси `y`. \n \n
|
||||
|
||||
\param[in] z
|
||||
Указатель на матрицу значений функции `z(x, y)`. \n \n
|
||||
Указатель на матрицу значений функции `z(x, y)`. \n \n
|
||||
|
||||
\param[in] fn
|
||||
Имя файла. \n \n
|
||||
Имя файла. \n \n
|
||||
|
||||
\return
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
`RES_OK` --- файл сохранен успешно. \n
|
||||
В противном случае \ref ERROR_CODE_GROUP "код ошибки": \n
|
||||
|
||||
Пример использования функции и посторения 3D поверхности приведен
|
||||
в следующем листинге:
|
||||
Пример использования функции и посторения 3D поверхности приведен
|
||||
в следующем листинге:
|
||||
|
||||
\include writetxt_3d_test.c
|
||||
|
||||
Данная программа рассчитывает и строит поверхность функции
|
||||
Данная программа рассчитывает и строит поверхность функции
|
||||
|
||||
\f[
|
||||
z(x,y) = x \exp(-x^2 -y^2)
|
||||
\f]
|
||||
|
||||
В каталоге `dat` будет создан файл `data3d.txt`.\n
|
||||
Кроме того программа GNUPLOT произведет построение 3D поверхности
|
||||
по сохраненным в файл данным:
|
||||
В каталоге `dat` будет создан файл `data3d.txt`.\n
|
||||
Кроме того программа GNUPLOT произведет построение 3D поверхности
|
||||
по сохраненным в файл данным:
|
||||
|
||||
\image html writetxt_3d.png
|
||||
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
\author Бахурин Сергей www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
int DSPL_API writetxt_3d(double* x, int nx, double* y, int ny,
|
||||
|
|
|
@ -406,12 +406,11 @@ exit_label:
|
|||
Тип оконной функции, применяемой для модифицированной периодограммы.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
|
||||
|
||||
\param[in] win_type
|
||||
Параметр оконной функции.\n
|
||||
Данный параметр используется, если задано параметрическая оконная функция.
|
||||
Для непараметрических окон данный параметр игнорируется.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
\param[in] win_param
|
||||
Параметр оконной функциии. \n
|
||||
Данный параметр применяется только для парамтрических типов окон
|
||||
(смотри описание функции \ref window).\n
|
||||
Для непараметрических функций игнорируется. \n\n
|
||||
|
||||
\param[in] pfft
|
||||
Указатель на структуру \ref fft_t. \n
|
||||
|
@ -636,12 +635,11 @@ exit_label:
|
|||
Тип оконной функции, применяемой для модифицированной периодограммы.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
|
||||
|
||||
\param[in] win_type
|
||||
Параметр оконной функции.\n
|
||||
Данный параметр используется, если задано параметрическая оконная функция.
|
||||
Для непараметрических окон данный параметр игнорируется.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
\param[in] win_param
|
||||
Параметр оконной функциии. \n
|
||||
Данный параметр применяется только для парамтрических типов окон
|
||||
(смотри описание функции \ref window).\n
|
||||
Для непараметрических функций игнорируется. \n\n
|
||||
|
||||
\param[in] pfft
|
||||
Указатель на структуру \ref fft_t. \n
|
||||
|
@ -873,12 +871,11 @@ int psd_welch(double* x, int n,
|
|||
Тип оконной функции, применяемой для модифицированной периодограммы.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
|
||||
|
||||
\param[in] win_type
|
||||
Параметр оконной функции.\n
|
||||
Данный параметр используется, если задано параметрическая оконная функция.
|
||||
Для непараметрических окон данный параметр игнорируется.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
\param[in] win_param
|
||||
Параметр оконной функциии. \n
|
||||
Данный параметр применяется только для парамтрических типов окон
|
||||
(смотри описание функции \ref window).\n
|
||||
Для непараметрических функций игнорируется. \n\n
|
||||
|
||||
\param[in] nfft
|
||||
Размер перекрывающегося сегмента.\n
|
||||
|
@ -1135,12 +1132,11 @@ int psd_welch_cmplx(complex_t* x, int n,
|
|||
Тип оконной функции, применяемой для модифицированной периодограммы.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
|
||||
|
||||
\param[in] win_type
|
||||
Параметр оконной функции.\n
|
||||
Данный параметр используется, если задано параметрическая оконная функция.
|
||||
Для непараметрических окон данный параметр игнорируется.\n
|
||||
Подробнее смотри описание функции \ref window. \n\n
|
||||
\param[in] win_param
|
||||
Параметр оконной функциии. \n
|
||||
Данный параметр применяется только для парамтрических типов окон
|
||||
(смотри описание функции \ref window).\n
|
||||
Для непараметрических функций игнорируется. \n\n
|
||||
|
||||
\param[in] nfft
|
||||
Размер перекрывающегося сегмента.\n
|
||||
|
|
146
include/dspl.c
|
@ -223,115 +223,6 @@ p_xcorr_cmplx xcorr_cmplx ;
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Perform dynamic linking and load libdspl-2.0 functions.
|
||||
|
||||
This function attempts to link to the library `libdspl.dll` in
|
||||
Windows system and the `libdspl.so` library on the Linux system.
|
||||
The library is assumed to be in the same directory as the application.
|
||||
user, or the path to the library is registered in the operating path variables
|
||||
system.
|
||||
|
||||
Upon successful binding and loading of library functions, the handle is returned
|
||||
libraries, as well as in the address space of the application appear
|
||||
pointers to libdspl-2.0 functions.
|
||||
|
||||
\note
|
||||
The returned handle is of type `void *`, which can be cast on Windows
|
||||
to type `HINSTANCE`. In practice, this is not necessary, because this
|
||||
the type is cast to `HINSTANCE` automatically if the compiler flag is set,
|
||||
indicating that the application is being built on Windows.
|
||||
|
||||
An example of a simple program that implements dynamic binding with DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
void * hdspl; // DSPL handle
|
||||
hdspl = dspl_load (); // Dynamic linking
|
||||
|
||||
// Check the pointer. If `NULL`, then the link failed
|
||||
if (! hdspl)
|
||||
{
|
||||
printf ("libdspl loading error! \n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// The link was successful, you can call the functions of DSPL-2.0
|
||||
|
||||
//Before correctly terminating the application, you must unlink
|
||||
//library and clear memory.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Произвести динамическую линковку и загрузить функции libdspl-2.0.
|
||||
|
||||
Данная функция производит попытку связывания с библиотекой `libdspl.dll` в
|
||||
системе Windows и с библиотекой `libdspl.so` в системе Linux.
|
||||
Предполагается, что библиотека находится в одной директории с приложением
|
||||
пользователя, или путь к библиотеке прописан в переменных пути операционной
|
||||
системы.
|
||||
|
||||
При удачном связывании и загрузке функций библиотеки возвращается хэндл
|
||||
библиотеки, а также в адресном пространстве приложения появляются
|
||||
указатели на функции libdspl-2.0.
|
||||
|
||||
\note
|
||||
Возвращаемый хэндл имеет тип `void*`, который в ОС Windows может быть приведен
|
||||
к типу `HINSTANCE`. На практике необходимости в этом, нет, потому что данный
|
||||
тип приводится к `HINSTANCE` автоматически, если выставлен флаг компилятора,
|
||||
указывающий, что сборка приложения производится в ОС Windows.
|
||||
|
||||
Пример простейшей программы реализующей динамическое связывание с DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; // DSPL хэндл
|
||||
hdspl = dspl_load(); // Динамическая линковка
|
||||
|
||||
// Проверяем указатель. Если `NULLL`, то линковка прошла неудачно
|
||||
if(!hdspl)
|
||||
{
|
||||
printf("libdspl loading error!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Линковка прошла успешно можно вызывать функции DSPL-2.0
|
||||
|
||||
// Перед корректным завершением приложения необходимо разлинковать
|
||||
// библиотеку и очистить память.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
void* dspl_load()
|
||||
{
|
||||
char* fname;
|
||||
|
@ -551,43 +442,6 @@ void* dspl_load()
|
|||
|
||||
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Cleans up the previously linked DSPL-2.0 dynamic library.
|
||||
|
||||
This cross-platform function clears the library `libdspl.dll` in
|
||||
Windows system and from the library `libdspl.so` on the Linux system.
|
||||
After cleaning the library, all functions will become unavailable.
|
||||
|
||||
\param [in] handle
|
||||
Handle of the previously linked DSPL-2.0 library. \n
|
||||
This pointer can be `NULL`, in this case no action
|
||||
are being produced.
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Очищает связанную ранее динамическую библиотеку DSPL-2.0.
|
||||
|
||||
Данная кроссплатформенная функция производит очистку библиотеки `libdspl.dll` в
|
||||
системе Windows и с библиотеки `libdspl.so` в системе Linux.
|
||||
После очистки библиотеки все функции станут недоступны.
|
||||
|
||||
\param[in] handle
|
||||
Хэндл прилинкованной ранее библиотеки DSPL-2.0. \n
|
||||
Данный указатель может быть `NULL`, в этом случае никакие действия не
|
||||
производятся.
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
**************************************************************************** */
|
||||
#endif
|
||||
void dspl_free(void* handle)
|
||||
{
|
||||
#ifdef WIN_OS
|
||||
|
|
308
include/dspl.h
|
@ -62,14 +62,14 @@ special macros: \ref RE, \ref IM, \ref ABSSQR
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\typedef complex_t
|
||||
\brief Описание комплексного типа данных.
|
||||
\brief Описание комплексного типа данных.
|
||||
|
||||
Комплексный тип данных в библиотеке libdspl-2.0 определен как
|
||||
массив из двух элементов типа `double`.
|
||||
При этом первый элемент массива определяет реальную часть
|
||||
комплексного числа, а второй - мнимую.
|
||||
Комплексный тип данных в библиотеке libdspl-2.0 определен как
|
||||
массив из двух элементов типа `double`.
|
||||
При этом первый элемент массива определяет реальную часть
|
||||
комплексного числа, а второй - мнимую.
|
||||
|
||||
Например:
|
||||
Например:
|
||||
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
|
@ -77,10 +77,10 @@ special macros: \ref RE, \ref IM, \ref ABSSQR
|
|||
z[1] = -2.0;
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
|
||||
Для удобства работы с комплексными числами реализованы
|
||||
специальные макросы: \ref RE, \ref IM, \ref ABSSQR
|
||||
Для удобства работы с комплексными числами реализованы
|
||||
специальные макросы: \ref RE, \ref IM, \ref ABSSQR
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
typedef double complex_t[2];
|
||||
|
@ -147,7 +147,7 @@ fft_free(&pfft);
|
|||
\note
|
||||
It is important to note that if the object `fft_t` was created for the FFT size
|
||||
equal to` n`, it can only be used for FFT of size `n`. \n \n
|
||||
It’s also worth noting that the FFT functions independently control the size,
|
||||
It’s also worth noting that the FFT functions independently control the size,
|
||||
and independently allocate the memory of the FFT object, if necessary.
|
||||
So if you call any function using the `fft_t` structure with filled
|
||||
data for the FFT length `k` for calculating the FFT of length`n`,
|
||||
|
@ -160,66 +160,66 @@ then the structure arrays will be automatically recreated for the length `n`.
|
|||
/*! ****************************************************************************
|
||||
\ingroup DFT_GROUP
|
||||
\struct fft_t
|
||||
\brief Структура данных объекта быстрого преобразования Фурье
|
||||
\brief Структура данных объекта быстрого преобразования Фурье
|
||||
|
||||
Структура хранит указатели на массивы поворотных коэффициентов
|
||||
и массивы промежуточных данных алгоритма быстрого преобразования Фурье.
|
||||
Структура хранит указатели на массивы поворотных коэффициентов
|
||||
и массивы промежуточных данных алгоритма быстрого преобразования Фурье.
|
||||
|
||||
Библиотека libdspl-2.0 использует для БПФ алгоритм для составной длины
|
||||
Библиотека libdspl-2.0 использует для БПФ алгоритм для составной длины
|
||||
|
||||
\param n
|
||||
Размер вектора БПФ, для которого выделена память в массивах структуры. \n
|
||||
Парметр `n` должен быть равен целой степени двойки. \n \n
|
||||
Размер вектора БПФ, для которого выделена память в массивах структуры. \n
|
||||
Парметр `n` должен быть равен целой степени двойки. \n \n
|
||||
|
||||
\param w
|
||||
Указатель на вектор поворотных коэффициентов алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена и массив поворотных коэффициентов
|
||||
должен быть заполнен функцией \ref fft_create. \n \n
|
||||
Указатель на вектор поворотных коэффициентов алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена и массив поворотных коэффициентов
|
||||
должен быть заполнен функцией \ref fft_create. \n \n
|
||||
|
||||
\param t0
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
|
||||
\param t1
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
Структура заполняется функцией \ref fft_create один раз
|
||||
до использования алгоритма БПФ. \n
|
||||
Указатель на объект данной структуры может быть
|
||||
многократно использован при вызове функций БПФ. \n
|
||||
Перед выходом из программы выделенную память под поворотные
|
||||
коэффициенты и массивы промежуточных данных
|
||||
необходимо очистить функцией \ref fft_free. Например:
|
||||
Указатель на вектор промежуточных вычислений алгоритма БПФ. \n
|
||||
Размер вектора `[n x 1]`. \n
|
||||
Память должна быть выделена функцией \ref fft_create. \n \n
|
||||
Структура заполняется функцией \ref fft_create один раз
|
||||
до использования алгоритма БПФ. \n
|
||||
Указатель на объект данной структуры может быть
|
||||
многократно использован при вызове функций БПФ. \n
|
||||
Перед выходом из программы выделенную память под поворотные
|
||||
коэффициенты и массивы промежуточных данных
|
||||
необходимо очистить функцией \ref fft_free. Например:
|
||||
\code
|
||||
fft_t pfft = {0}; // объявляем объект fft_t и обнуляем все поля
|
||||
int n = 64; // Размер БПФ
|
||||
fft_t pfft = {0}; // объявляем объект fft_t и обнуляем все поля
|
||||
int n = 64; // Размер БПФ
|
||||
int err;
|
||||
|
||||
// создаем объект для 64-точечного БПФ
|
||||
// создаем объект для 64-точечного БПФ
|
||||
err = fft_create(&pfft, n);
|
||||
|
||||
// Вызов БПФ функции
|
||||
// Еще раз вызов БПФ функции
|
||||
// Вызов БПФ функции
|
||||
// Еще раз вызов БПФ функции
|
||||
// ...
|
||||
|
||||
// очистить память объекта БПФ
|
||||
// очистить память объекта БПФ
|
||||
fft_free(&pfft);
|
||||
\endcode
|
||||
|
||||
\note
|
||||
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
|
||||
то он может быть использован только для БПФ размера `n`. \n\n
|
||||
Также необходимо заметить, что функции БПФ самостоятельно контролируют размер,
|
||||
и самостоятельно выделяют память объекта БПФ при необходимости.
|
||||
Так если вызвать любую функцию использующую структуру `fft_t` с заполненными
|
||||
данными для длины БПФ `k` для расчета БПФ длины `n`,
|
||||
то массивы структуры будут автоматически пересозданы для длины `n`.
|
||||
Важно отметить, что если объект `fft_t` был создан для размера БПФ равного `n`,
|
||||
то он может быть использован только для БПФ размера `n`. \n\n
|
||||
Также необходимо заметить, что функции БПФ самостоятельно контролируют размер,
|
||||
и самостоятельно выделяют память объекта БПФ при необходимости.
|
||||
Так если вызвать любую функцию использующую структуру `fft_t` с заполненными
|
||||
данными для длины БПФ `k` для расчета БПФ длины `n`,
|
||||
то массивы структуры будут автоматически пересозданы для длины `n`.
|
||||
|
||||
\author
|
||||
Бахурин Сергей.
|
||||
Бахурин Сергей.
|
||||
www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
|
@ -244,14 +244,14 @@ typedef struct
|
|||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_RAND_GEN_GROUP
|
||||
\struct random_t
|
||||
\brief Структура параметров датчиков псевдослучайных чисел.
|
||||
\brief Структура параметров датчиков псевдослучайных чисел.
|
||||
|
||||
Структура хранит инициализацию и текущие регистры различных датчиков
|
||||
псевдослучайных чисел. В библиотеке используются следующие датчики:
|
||||
\li MRG32K3A -- 32 битный датчик разработан Пьером Лекуэром [1].
|
||||
\li MT19937-64 -- 64-битный датчик
|
||||
Структура хранит инициализацию и текущие регистры различных датчиков
|
||||
псевдослучайных чисел. В библиотеке используются следующие датчики:
|
||||
\li MRG32K3A -- 32 битный датчик разработан Пьером Лекуэром [1].
|
||||
\li MT19937-64 -- 64-битный датчик
|
||||
<a href = "https://en.wikipedia.org/wiki/Mersenne_Twister">
|
||||
Вихрь Мерсенна
|
||||
Вихрь Мерсенна
|
||||
</a> [2, 3].
|
||||
|
||||
\note
|
||||
|
@ -265,24 +265,24 @@ typedef struct
|
|||
on Modeling and Computer Simulation 8. (Jan. 1998) 3--30. \n\n
|
||||
|
||||
\param mrg32k3a_seed
|
||||
Начальная инициализация датчика MRG32K3A. \n \n
|
||||
Начальная инициализация датчика MRG32K3A. \n \n
|
||||
|
||||
\param mrg32k3a_x
|
||||
Первый вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
Первый вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
|
||||
\param mrg32k3a_y
|
||||
Второй вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
Второй вектор состояния рекурсивного датчика MRG32K3A. \n \n
|
||||
|
||||
\param mt19937_mt
|
||||
Первый вектор состояния рекурсивного датчика MT19937-64. \n \n
|
||||
Первый вектор состояния рекурсивного датчика MT19937-64. \n \n
|
||||
|
||||
\param mt19937_mti
|
||||
Текущий индекс в векторе состояния датчика MT19937-64. \n \n
|
||||
Текущий индекс в векторе состояния датчика MT19937-64. \n \n
|
||||
|
||||
Параметры данной структуры заполняются автоматически функцией `random_init`
|
||||
и используются функциями генерации псевдослучайных векторов.
|
||||
Параметры данной структуры заполняются автоматически функцией `random_init`
|
||||
и используются функциями генерации псевдослучайных векторов.
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
typedef struct
|
||||
|
@ -333,27 +333,27 @@ but variable `r` will keep 3.
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\def RE(x)
|
||||
\brief Макрос определяющий реальную часть комплексного числа.
|
||||
\brief Макрос определяющий реальную часть комплексного числа.
|
||||
|
||||
Например:
|
||||
Например:
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
RE(z) = 1.0;
|
||||
IM(z) = -2.0;
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` --- мнимая единица.
|
||||
Переменная `z = 1-2j`, где `j` --- мнимая единица.
|
||||
|
||||
Аналогично, макрос можно использовать для получения
|
||||
реальной части комплексного числа:
|
||||
Аналогично, макрос можно использовать для получения
|
||||
реальной части комплексного числа:
|
||||
|
||||
\code{.cpp}
|
||||
complex_t z = {3.0, -4.0};
|
||||
double r;
|
||||
r = RE(z);
|
||||
\endcode
|
||||
В данном примере переменная `z = 3-4i`, а в переменой `r`
|
||||
будет храниться число 3.
|
||||
В данном примере переменная `z = 3-4i`, а в переменой `r`
|
||||
будет храниться число 3.
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#define RE(x) (x[0])
|
||||
|
@ -392,26 +392,26 @@ but variable `r` will keep -4.
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\def IM(x)
|
||||
\brief Макрос определяющий мнимую часть комплексного числа.
|
||||
\brief Макрос определяющий мнимую часть комплексного числа.
|
||||
|
||||
Например:
|
||||
Например:
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
RE(z) = 1.0;
|
||||
IM(z) = -2.0;
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица.
|
||||
|
||||
Аналогично, макрос можно использовать для получения
|
||||
мнимой части комплексного числа:
|
||||
Аналогично, макрос можно использовать для получения
|
||||
мнимой части комплексного числа:
|
||||
\code{.cpp}
|
||||
complex_t z = {3.0, -4.0};
|
||||
double r;
|
||||
r = IM(z);
|
||||
\endcode
|
||||
В данном примере переменная `z = 3-4i`,
|
||||
а в переменой `r` будет храниться число -4.
|
||||
В данном примере переменная `z = 3-4i`,
|
||||
а в переменой `r` будет храниться число -4.
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#define IM(x) (x[1])
|
||||
|
@ -450,15 +450,15 @@ Variable `z = 1-2j`, here `j` - imaginary unit, but variable `y = 5`.
|
|||
/*! ****************************************************************************
|
||||
\ingroup TYPES_GROUP
|
||||
\def ABSSQR(x)
|
||||
\brief Макрос возвращает квадрат модуля комплексного числа `x`.
|
||||
\brief Макрос возвращает квадрат модуля комплексного числа `x`.
|
||||
|
||||
Квадрат модуля комплексного числа \f$ x = a + j b \f$ равен:
|
||||
Квадрат модуля комплексного числа \f$ x = a + j b \f$ равен:
|
||||
|
||||
\f[
|
||||
|x|^2 = x x^* = a^2 + b^2.
|
||||
\f]
|
||||
|
||||
Например:
|
||||
Например:
|
||||
\code{.cpp}
|
||||
complex_t z;
|
||||
double y;
|
||||
|
@ -467,7 +467,7 @@ Variable `z = 1-2j`, here `j` - imaginary unit, but variable `y = 5`.
|
|||
y = ABSSQR(z);
|
||||
\endcode
|
||||
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица, а переменная `y = 5`.
|
||||
Переменная `z = 1-2j`, где `j` - мнимая единица, а переменная `y = 5`.
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#define ABSSQR(x) ((SQR(RE(x))) + (SQR(IM(x))))
|
||||
|
@ -1563,7 +1563,157 @@ DECLARE_FUNC(int, xcorr_cmplx, complex_t* x
|
|||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Cleans up the previously linked DSPL-2.0 dynamic library.
|
||||
|
||||
This cross-platform function clears the library `libdspl.dll` in
|
||||
Windows system and from the library `libdspl.so` on the Linux system.
|
||||
After cleaning the library, all functions will become unavailable.
|
||||
|
||||
\param [in] handle
|
||||
Handle of the previously linked DSPL-2.0 library. \n
|
||||
This pointer can be `NULL`, in this case no action
|
||||
are being produced.
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void dspl_free(void* handle)
|
||||
\brief Очищает связанную ранее динамическую библиотеку DSPL-2.0.
|
||||
|
||||
Данная кроссплатформенная функция производит очистку библиотеки `libdspl.dll` в
|
||||
системе Windows и с библиотеки `libdspl.so` в системе Linux.
|
||||
После очистки библиотеки все функции станут недоступны.
|
||||
|
||||
\param[in] handle
|
||||
Хэндл прилинкованной ранее библиотеки DSPL-2.0. \n
|
||||
Данный указатель может быть `NULL`, в этом случае никакие действия не
|
||||
производятся.\n\n
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
**************************************************************************** */
|
||||
#endif
|
||||
void* dspl_load();
|
||||
|
||||
|
||||
#ifdef DOXYGEN_ENGLISH
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Perform dynamic linking and load libdspl-2.0 functions.
|
||||
|
||||
This function attempts to link to the library `libdspl.dll` in
|
||||
Windows system and the `libdspl.so` library on the Linux system.
|
||||
The library is assumed to be in the same directory as the application.
|
||||
user, or the path to the library is registered in the operating path variables
|
||||
system.
|
||||
|
||||
Upon successful binding and loading of library functions, the handle is returned
|
||||
libraries, as well as in the address space of the application appear
|
||||
pointers to libdspl-2.0 functions.
|
||||
|
||||
\note
|
||||
The returned handle is of type `void *`, which can be cast on Windows
|
||||
to type `HINSTANCE`. In practice, this is not necessary, because this
|
||||
the type is cast to `HINSTANCE` automatically if the compiler flag is set,
|
||||
indicating that the application is being built on Windows.
|
||||
|
||||
An example of a simple program that implements dynamic binding with DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main (int argc, char* argv[])
|
||||
{
|
||||
void *hdspl; // DSPL handle
|
||||
hdspl = dspl_load (); // Dynamic linking
|
||||
|
||||
// Check the pointer. If `NULL`, then the link failed
|
||||
if (! hdspl)
|
||||
{
|
||||
printf ("libdspl loading error! \n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// The link was successful, you can call the functions of DSPL-2.0
|
||||
|
||||
//Before correctly terminating the application, you must unlink
|
||||
//library and clear memory.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Bakhurin Sergey. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
#ifdef DOXYGEN_RUSSIAN
|
||||
/*! ****************************************************************************
|
||||
\ingroup SYS_LOADING_GROUP
|
||||
\fn void* dspl_load()
|
||||
\brief Произвести динамическую линковку и загрузить функции libdspl-2.0.
|
||||
|
||||
Данная функция производит попытку связывания с библиотекой `libdspl.dll` в
|
||||
системе Windows и с библиотекой `libdspl.so` в системе Linux.
|
||||
Предполагается, что библиотека находится в одной директории с приложением
|
||||
пользователя, или путь к библиотеке прописан в переменных пути операционной
|
||||
системы.
|
||||
|
||||
При удачном связывании и загрузке функций библиотеки возвращается хэндл
|
||||
библиотеки, а также в адресном пространстве приложения появляются
|
||||
указатели на функции libdspl-2.0.
|
||||
|
||||
\note
|
||||
Возвращаемый хэндл имеет тип `void*`, который в ОС Windows может быть приведен
|
||||
к типу `HINSTANCE`. На практике необходимости в этом, нет, потому что данный
|
||||
тип приводится к `HINSTANCE` автоматически, если выставлен флаг компилятора,
|
||||
указывающий, что сборка приложения производится в ОС Windows.
|
||||
|
||||
Пример простейшей программы реализующей динамическое связывание с DSPL-2.0.
|
||||
|
||||
\code
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "dspl.h"
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
void* hdspl; // DSPL хэндл
|
||||
hdspl = dspl_load(); // Динамическая линковка
|
||||
|
||||
// Проверяем указатель. Если `NULLL`, то линковка прошла неудачно
|
||||
if(!hdspl)
|
||||
{
|
||||
printf("libdspl loading error!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Линковка прошла успешно можно вызывать функции DSPL-2.0
|
||||
|
||||
// Перед корректным завершением приложения необходимо разлинковать
|
||||
// библиотеку и очистить память.
|
||||
dspl_free(hdspl);
|
||||
|
||||
return 0;
|
||||
}
|
||||
\endcode
|
||||
|
||||
\author Бахурин Сергей. www.dsplib.org
|
||||
***************************************************************************** */
|
||||
#endif
|
||||
void dspl_free(void* handle);
|
||||
|
||||
|
||||
|
|