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.h
pull/6/merge
Dsplib 2020-10-13 16:27:52 +03:00
rodzic 5be973b36b
commit fcacbb0293
29 zmienionych plików z 595 dodań i 620 usunięć

Wyświetl plik

@ -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

Wyświetl plik

@ -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
Its also worth noting that the FFT functions independently control the size,
Its 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);

Wyświetl plik

@ -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:

Wyświetl plik

@ -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

1
dspl/dox/ru/img/.gitignore vendored 100644
Wyświetl plik

@ -0,0 +1 @@
!*.png

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 121 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 81 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 82 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 9.7 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 29 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 70 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 71 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 52 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 72 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 20 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 66 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 9.7 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 381 B

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 44 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 39 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 41 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 14 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 6.7 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 10 KiB

Plik binarny nie jest wyświetlany.

Po

Szerokość:  |  Wysokość:  |  Rozmiar: 14 KiB

Wyświetl plik

@ -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,

Wyświetl plik

@ -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

Wyświetl plik

@ -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

Wyświetl plik

@ -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
Its also worth noting that the FFT functions independently control the size,
Its 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);