kopia lustrzana https://github.com/Dsplib/libdspl-2.0
added sine_int function and documntation
plt files changed (gnuplot will produce only png images)pull/6/merge
rodzic
0e646be5df
commit
b0b23ce5a7
|
@ -25,22 +25,12 @@ $generatedby  <a href="http://www.doxygen.org/index.html">
|
|||
|
||||
</div> <!-- div id="dsplib_main" -->
|
||||
|
||||
<div id="dsplib_footer">
|
||||
<div id = "dsplib_bottombar">
|
||||
<a href="http://ru.dsplib.org">Содержание</a>
|
||||
<a href="http://ru.dsplib.org/dspl">DSPL</a>
|
||||
<a href="http://ru.dsplib.org/forum">Форум</a>
|
||||
</div> <!-- div id="wrapper" -->
|
||||
|
||||
<hr align="center" width="100%" size="1" color="#000000" />
|
||||
<div class="dsplib_copyright">
|
||||
© Бахурин Сергей 2015 - 2018. Все права защищены.
|
||||
© Бахурин Сергей 2015 - 2019. Все права защищены.
|
||||
Любое копирование материалов сайте без разрешения автора запрещено.
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</div> <!-- div id="wrapper" -->
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -1,98 +1,100 @@
|
|||
/*!
|
||||
\defgroup MAIN_GROUP Библиотека DSPL
|
||||
\defgroup MAIN_GROUP Библиотека DSPL
|
||||
|
||||
\defgroup GETTING_START Быстрый старт использования библиотеки DSPL
|
||||
\ingroup MAIN_GROUP
|
||||
\defgroup GETTING_START Быстрый старт использования библиотеки DSPL
|
||||
\ingroup MAIN_GROUP
|
||||
|
||||
\defgroup TYPES_GROUP Типы данных DSPL
|
||||
\ingroup MAIN_GROUP
|
||||
В данной группе описаны типы данных библиотеки DSPL и методы их преобразования.
|
||||
\defgroup TYPES_GROUP Типы данных DSPL
|
||||
\ingroup MAIN_GROUP
|
||||
В данной группе описаны типы данных библиотеки DSPL и методы их преобразования.
|
||||
|
||||
|
||||
|
||||
\defgroup SPECTRAL_GROUP Спектральный анализ
|
||||
\ingroup MAIN_GROUP
|
||||
В данной группе собраны функции реализующие алгоритмы дискретного преобразования Фурье (ДПФ),
|
||||
быстрого преобразования Фурье (БПФ), функции оконного взвешивания, расчета спектральной плотности мощности.
|
||||
\defgroup SPECTRAL_GROUP Спектральный анализ
|
||||
\ingroup MAIN_GROUP
|
||||
В данной группе собраны функции реализующие алгоритмы дискретного
|
||||
преобразования Фурье (ДПФ), быстрого преобразования Фурье (БПФ), функции оконного взвешивания, расчета спектральной плотности мощности.
|
||||
|
||||
\defgroup DFT_GROUP Алгоритмы дискретного и быстрого преобразования Фурье
|
||||
\ingroup SPECTRAL_GROUP
|
||||
|
||||
Алгоритмы дискретного и быстрого преобразования Фурье.
|
||||
\defgroup DFT_GROUP Алгоритмы дискретного и быстрого преобразования Фурье
|
||||
\ingroup SPECTRAL_GROUP
|
||||
Алгоритмы дискретного и быстрого преобразования Фурье.
|
||||
|
||||
|
||||
\defgroup WIN_GROUP Функции оконного взвешивания
|
||||
\ingroup SPECTRAL_GROUP
|
||||
\defgroup WIN_GROUP Функции оконного взвешивания
|
||||
\ingroup SPECTRAL_GROUP
|
||||
|
||||
|
||||
\defgroup HILBERT_GROUP Преобразование Гильберта
|
||||
\ingroup MAIN_GROUP
|
||||
|
||||
В данной группе собраны функции реализующие алгоритмы преобразования Гильберта.
|
||||
\defgroup HILBERT_GROUP Преобразование Гильберта
|
||||
\ingroup MAIN_GROUP
|
||||
В данной группе собраны функции реализующие алгоритмы преобразования Гильберта.
|
||||
|
||||
|
||||
|
||||
\defgroup FILTER_GROUP Цифровая фильтрация. Синтез и анализ цифровых фильтров.
|
||||
\ingroup MAIN_GROUP
|
||||
\defgroup FILTER_GROUP Цифровая фильтрация. Синтез и анализ цифровых фильтров.
|
||||
\ingroup MAIN_GROUP
|
||||
|
||||
|
||||
\defgroup FILTER_CONV_GROUP Свертка и цифровая фильтрация
|
||||
\ingroup FILTER_GROUP
|
||||
|
||||
Функции для расчета циклической и линейной сверток, а также цифровой КИХ и БИХ фильтрации.
|
||||
\defgroup FILTER_CONV_GROUP Свертка и цифровая фильтрация
|
||||
\ingroup FILTER_GROUP
|
||||
Функции для расчета циклической и линейной сверток, а также цифровой КИХ и БИХ фильтрации.
|
||||
|
||||
|
||||
\defgroup IIR_FILTER_DESIGN_GROUP Расчет БИХ-фильтров
|
||||
\ingroup FILTER_GROUP
|
||||
Функции расчета цифровых БИХ-фильтров.
|
||||
\defgroup IIR_FILTER_DESIGN_GROUP Расчет БИХ-фильтров
|
||||
\ingroup FILTER_GROUP
|
||||
Функции расчета цифровых БИХ-фильтров.
|
||||
|
||||
|
||||
\defgroup FIR_FILTER_DESIGN_GROUP Расчет КИХ-фильтров
|
||||
\ingroup FILTER_GROUP
|
||||
Функции расчета цифровых КИХ-фильтров.
|
||||
\defgroup FIR_FILTER_DESIGN_GROUP Расчет КИХ-фильтров
|
||||
\ingroup FILTER_GROUP
|
||||
Функции расчета цифровых КИХ-фильтров.
|
||||
|
||||
\defgroup FILTER_ANALYSIS_GROUP Функции анализа аналоговых и цифровых фильтров
|
||||
\ingroup FILTER_GROUP
|
||||
Функции анализа аналоговых и цифровых фильтров
|
||||
\defgroup FILTER_ANALYSIS_GROUP Функции анализа аналоговых и цифровых фильтров
|
||||
\ingroup FILTER_GROUP
|
||||
Функции анализа аналоговых и цифровых фильтров
|
||||
|
||||
\defgroup RESAMPLING_GROUP Цифровая передискретизация сигналов
|
||||
\ingroup MAIN_GROUP
|
||||
\defgroup RESAMPLING_GROUP Цифровая передискретизация сигналов
|
||||
\ingroup MAIN_GROUP
|
||||
|
||||
|
||||
\defgroup SPEC_MATH_GROUP Специальные математические функции
|
||||
\ingroup MAIN_GROUP
|
||||
\defgroup SPEC_MATH_GROUP Специальные математические функции
|
||||
\ingroup MAIN_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_COMMON_GROUP Базовые математические функции.
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
\defgroup SPEC_MATH_COMMON_GROUP Базовые математические функции
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_TRIG_GROUP Тригонометрические и гиперболические функции
|
||||
вещественного и комплексного аргумента.
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_TRIG_GROUP Тригонометрические и гиперболические функции
|
||||
вещественного и комплексного аргумента.
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_TRANSCEND Высшие трансцендентные функции
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_ELLIP_GROUP Эллиптические функции вещественного
|
||||
и комплексного аргумента
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_ELLIP_GROUP Эллиптические функции вещественного и комплексного аргумента.
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
\defgroup SPEC_MATH_RAND_GEN_GROUP Генерация случайных чисел
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_RAND_GEN_GROUP Генерация случайных чисел
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
\defgroup SPEC_MATH_STAT_GROUP Функции математической статистики
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_STAT_GROUP Функции математической статистики
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
\defgroup SPEC_MATH_LINALG_GROUP Линейная алгебра и матричные операции
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
\defgroup SPEC_MATH_LINALG_GROUP Линейная алгебра и матричные операции
|
||||
\ingroup SPEC_MATH_GROUP
|
||||
|
||||
|
||||
\defgroup IN_OUT_GROUP Функции ввода - вывода данных
|
||||
\ingroup MAIN_GROUP
|
||||
Функции ввода и вывода данных. Запись и считывание данных в бинарные и текстовые файлы.
|
||||
\defgroup IN_OUT_GROUP Функции ввода - вывода данных
|
||||
\ingroup MAIN_GROUP
|
||||
Функции ввода и вывода данных. Запись и считывание данных в бинарные и текстовые файлы
|
||||
|
||||
|
||||
\defgroup MACRO_DEFINE_GROUP Макросы и константы
|
||||
\ingroup MAIN_GROUP
|
||||
\defgroup MACRO_DEFINE_GROUP Макросы и константы
|
||||
\ingroup MAIN_GROUP
|
||||
|
||||
\defgroup ERROR_CODE_GROUP Коды ошибок при вызове функций
|
||||
\ingroup MACRO_DEFINE_GROUP
|
||||
В данной группе приведены возможные коды ошибок, возвращаемые функциями библиотеки в процессе
|
||||
работы.
|
||||
\defgroup ERROR_CODE_GROUP Коды ошибок при вызове функций
|
||||
\ingroup MACRO_DEFINE_GROUP
|
||||
В данной группе приведены возможные коды ошибок, возвращаемые функциями библиотеки в процессе
|
||||
работы.
|
||||
|
||||
*/
|
||||
|
|
|
@ -32,3 +32,58 @@
|
|||
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
||||
/*! ****************************************************************************
|
||||
\ingroup SPEC_MATH_TRANSCEND
|
||||
\fn int sine_int(double* x, int n, double* si)
|
||||
\brief Функция интегрального синуса
|
||||
|
||||
\f[ \textrm{Si}(x) = \int_{0}^{x} \frac{\sin(x)}{x} \, dx\f]
|
||||
|
||||
Функция рассчитывает значения функции для интегрального синуса
|
||||
для произвольного вещественного вектора `x`.
|
||||
<BR>
|
||||
|
||||
\param[in] x Указатель на вектор переменной \f$ x \f$.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
|
||||
\param[in] n Размер входного вектора `x`. <BR><BR>
|
||||
|
||||
|
||||
\param[out] si Указатель на вектор значений функции интегрального синуса.<BR>
|
||||
Размер вектора `[n x 1]`.<BR>
|
||||
Память должна быть выделена.<BR><BR>
|
||||
|
||||
\return
|
||||
`RES_OK` Расчет произведен успешно.<BR>
|
||||
В противном случае
|
||||
\ref ERROR_CODE_GROUP "код ошибки".<BR>
|
||||
|
||||
Пример использования функции `sine_int`:
|
||||
|
||||
\include sine_int_test.c
|
||||
|
||||
Данная программа рассчитывает значения функции интегрального синуса и
|
||||
функции \ref sinc для вектора переменной `x`
|
||||
в интервале \f$[-6\pi \ 6\pi]\f$.
|
||||
Рассчитанные данные сохраняются в текстовые файлы
|
||||
`dat/dat0.txt` и `dat/dat1.txt`
|
||||
|
||||
и выводятся на график `img/sine_int.png`
|
||||
|
||||
\image html sine_int.png
|
||||
|
||||
Скрипт GNUPLOT для построения графиков из текстовых файлов:
|
||||
\include sine_int.plt
|
||||
|
||||
расчет функции производится на осове
|
||||
|
||||
\author
|
||||
Бахурин Сергей
|
||||
www.dsplib.org
|
||||
|
||||
***************************************************************************** */
|
||||
|
||||
|
||||
|
|
162
dspl/src/math.c
162
dspl/src/math.c
|
@ -58,3 +58,165 @@ int DSPL_API sinc(double* x, int n, double a, double* y)
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************************************
|
||||
Sine integral
|
||||
--------------------------------------------------------------------------------
|
||||
This function uses Padé approximants of the convergent Taylor series [1]
|
||||
|
||||
|
||||
[1]
|
||||
https://www.sciencedirect.com/science/article/pii/S221313371500013X?via%3Dihub
|
||||
|
||||
*******************************************************************************/
|
||||
int DSPL_API sine_int(double* x, int n, double* si)
|
||||
{
|
||||
int k, sgn, p;
|
||||
double num, den, y, x2, x22, z, f, g;
|
||||
|
||||
double A[8] = {+1.00000000000000000E0 ,
|
||||
-4.54393409816329991E-2 ,
|
||||
+1.15457225751016682E-3 ,
|
||||
-1.41018536821330254E-5 ,
|
||||
+9.43280809438713025E-8 ,
|
||||
-3.53201978997168357E-10 ,
|
||||
+7.08240282274875911E-13 ,
|
||||
-6.05338212010422477E-16 };
|
||||
|
||||
|
||||
|
||||
double B[7] = {+1.0 ,
|
||||
+1.01162145739225565E-2 ,
|
||||
+4.99175116169755106E-5 ,
|
||||
+1.55654986308745614E-7 ,
|
||||
+3.28067571055789734E-10 ,
|
||||
+4.50490975753865810E-13 ,
|
||||
+3.21107051193712168E-16 };
|
||||
|
||||
|
||||
|
||||
double FA[11] = {+1.000000000000000000000E0,
|
||||
+7.444370681619367006180E2,
|
||||
+1.963963728951468698010E5,
|
||||
+2.377503101254318340340E7,
|
||||
+1.430734038212746368880E9,
|
||||
+4.33736238870432522765E10,
|
||||
+6.40533830574022022911E11,
|
||||
+4.20968180571076940208E12,
|
||||
+1.00795182980368574617E13,
|
||||
+4.94816688199951963482E12,
|
||||
-4.94701168645415959931E11};
|
||||
|
||||
double FB[10] = {+1.000000000000000000000E0,
|
||||
+7.464370681619276780310E2,
|
||||
+1.978652470315839514500E5,
|
||||
+2.415356701651268451440E7,
|
||||
+1.474789521929854649580E9,
|
||||
+4.58595115847765779830E10,
|
||||
+7.08501308149515401563E11,
|
||||
+5.06084464593475076774E12,
|
||||
+1.43468549171581016479E13,
|
||||
+1.11535493509914254097E13};
|
||||
|
||||
|
||||
|
||||
double GA[11] = {+1.000000000000000000E0,
|
||||
+8.135952011516861500E2,
|
||||
+2.352391816264782000E5,
|
||||
+3.125575707957787310E7,
|
||||
+2.062975951467633540E9,
|
||||
+6.83052205423625007E10,
|
||||
+1.09049528450362786E12,
|
||||
+7.57664583257834349E12,
|
||||
+1.81004487464664575E13,
|
||||
+6.43291613143049485E12,
|
||||
-1.36517137670871689E12};
|
||||
|
||||
|
||||
double GB[10] = {+1.000000000000000000E0,
|
||||
+8.195952011514515640E2,
|
||||
+2.400367528355787770E5,
|
||||
+3.260266616470908220E7,
|
||||
+2.233555432780993600E9,
|
||||
+7.87465017341829930E10,
|
||||
+1.39866710696414565E12,
|
||||
+1.17164723371736605E13,
|
||||
+4.01839087307656620E13,
|
||||
+3.99653257887490811E13};
|
||||
|
||||
if(!x || !si)
|
||||
return ERROR_PTR;
|
||||
if(n<1)
|
||||
return ERROR_SIZE;
|
||||
|
||||
|
||||
for(p = 0; p < n; p++)
|
||||
{
|
||||
sgn = x[p] > 0.0 ? 0 : 1;
|
||||
y = x[p] < 0.0 ? -x[p] : x[p];
|
||||
|
||||
if(y < 4)
|
||||
{
|
||||
x2 = y * y;
|
||||
z = 1.0;
|
||||
num = 0.0;
|
||||
for(k = 0; k < 8; k++)
|
||||
{
|
||||
num += A[k] * z;
|
||||
z*=x2;
|
||||
}
|
||||
z = 1.0;
|
||||
den = 0.0;
|
||||
for(k = 0; k < 7; k++)
|
||||
{
|
||||
den += B[k]*z;
|
||||
z*=x2;
|
||||
}
|
||||
si[p] = x[p] * num/den;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
x2 = 1.0/y;
|
||||
x22 = x2*x2;
|
||||
z = 1.0;
|
||||
num = 0.0;
|
||||
for(k = 0; k < 11; k++)
|
||||
{
|
||||
num += FA[k] * z;
|
||||
z*=x22;
|
||||
}
|
||||
z = 1.0;
|
||||
den = 0.0;
|
||||
for(k = 0; k < 10; k++)
|
||||
{
|
||||
den += FB[k]*z;
|
||||
z*=x22;
|
||||
}
|
||||
|
||||
f = x2 * num / den;
|
||||
|
||||
z = 1.0;
|
||||
num = 0.0;
|
||||
for(k = 0; k < 11; k++)
|
||||
{
|
||||
num += GA[k] * z;
|
||||
z*=x22;
|
||||
}
|
||||
z = 1.0;
|
||||
den = 0.0;
|
||||
for(k = 0; k < 10; k++)
|
||||
{
|
||||
den += GB[k]*z;
|
||||
z*=x22;
|
||||
}
|
||||
|
||||
g = x22 * num / den;
|
||||
|
||||
si[p] = sgn ? f * cos(y) + g * sin(y) - M_PI * 0.5 :
|
||||
M_PI * 0.5 - f * cos(y) - g * sin(y);
|
||||
}
|
||||
}
|
||||
return RES_OK;
|
||||
}
|
||||
|
|
|
@ -118,6 +118,7 @@ p_signal_pimp signal_pimp ;
|
|||
p_signal_saw signal_saw ;
|
||||
p_sin_cmplx sin_cmplx ;
|
||||
p_sinc sinc ;
|
||||
p_sine_int sine_int ;
|
||||
p_sqrt_cmplx sqrt_cmplx ;
|
||||
p_trapint trapint ;
|
||||
p_trapint_cmplx trapint_cmplx ;
|
||||
|
@ -265,6 +266,7 @@ void* dspl_load()
|
|||
LOAD_FUNC(signal_saw);
|
||||
LOAD_FUNC(sin_cmplx);
|
||||
LOAD_FUNC(sinc);
|
||||
LOAD_FUNC(sine_int);
|
||||
LOAD_FUNC(sqrt_cmplx);
|
||||
LOAD_FUNC(trapint);
|
||||
LOAD_FUNC(trapint_cmplx);
|
||||
|
|
|
@ -463,11 +463,11 @@ DECLARE_FUNC(int, flipip_cmplx, complex_t*
|
|||
COMMA int);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, fourier_integral_cmplx, double* t
|
||||
COMMA complex_t* s
|
||||
COMMA int nt
|
||||
COMMA int nw
|
||||
COMMA double* w
|
||||
COMMA complex_t* y);
|
||||
COMMA complex_t* s
|
||||
COMMA int nt
|
||||
COMMA int nw
|
||||
COMMA double* w
|
||||
COMMA complex_t* y);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, fourier_series_dec, double*
|
||||
COMMA double*
|
||||
|
@ -591,7 +591,7 @@ DECLARE_FUNC(int, matrix_create, matrix_t* a
|
|||
COMMA int type);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(void, matrix_free, matrix_t* a);
|
||||
DECLARE_FUNC(void, matrix_free, matrix_t* a);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, matrix_print, matrix_t* a
|
||||
COMMA const char* name
|
||||
|
@ -640,11 +640,11 @@ DECLARE_FUNC(int, ratcompos, double* b
|
|||
DECLARE_FUNC(int, re2cmplx, double*
|
||||
COMMA int
|
||||
COMMA complex_t*);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, readbin, char* fn
|
||||
COMMA void** x
|
||||
COMMA int* k
|
||||
COMMA int* dtype);
|
||||
COMMA int* dtype);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, signal_pimp, double*
|
||||
COMMA size_t
|
||||
|
@ -670,6 +670,10 @@ DECLARE_FUNC(int, sinc, double* x
|
|||
COMMA double a
|
||||
COMMA double* y);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, sine_int, double* x
|
||||
COMMA int n
|
||||
COMMA double* si);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, sqrt_cmplx, complex_t*
|
||||
COMMA int
|
||||
COMMA complex_t*);
|
||||
|
@ -688,18 +692,18 @@ DECLARE_FUNC(int, unwrap, double*
|
|||
COMMA int
|
||||
COMMA double
|
||||
COMMA double);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, verif, double* x
|
||||
COMMA double* y
|
||||
COMMA size_t n
|
||||
COMMA double eps
|
||||
COMMA double* err);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, verif_cmplx, complex_t* x
|
||||
COMMA complex_t* y
|
||||
COMMA size_t n
|
||||
COMMA double eps
|
||||
COMMA double* err);
|
||||
COMMA double* err);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, writebin, void*
|
||||
COMMA int
|
||||
|
|
|
@ -118,6 +118,7 @@ p_signal_pimp signal_pimp ;
|
|||
p_signal_saw signal_saw ;
|
||||
p_sin_cmplx sin_cmplx ;
|
||||
p_sinc sinc ;
|
||||
p_sine_int sine_int ;
|
||||
p_sqrt_cmplx sqrt_cmplx ;
|
||||
p_trapint trapint ;
|
||||
p_trapint_cmplx trapint_cmplx ;
|
||||
|
@ -265,6 +266,7 @@ void* dspl_load()
|
|||
LOAD_FUNC(signal_saw);
|
||||
LOAD_FUNC(sin_cmplx);
|
||||
LOAD_FUNC(sinc);
|
||||
LOAD_FUNC(sine_int);
|
||||
LOAD_FUNC(sqrt_cmplx);
|
||||
LOAD_FUNC(trapint);
|
||||
LOAD_FUNC(trapint_cmplx);
|
||||
|
|
|
@ -463,11 +463,11 @@ DECLARE_FUNC(int, flipip_cmplx, complex_t*
|
|||
COMMA int);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, fourier_integral_cmplx, double* t
|
||||
COMMA complex_t* s
|
||||
COMMA int nt
|
||||
COMMA int nw
|
||||
COMMA double* w
|
||||
COMMA complex_t* y);
|
||||
COMMA complex_t* s
|
||||
COMMA int nt
|
||||
COMMA int nw
|
||||
COMMA double* w
|
||||
COMMA complex_t* y);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, fourier_series_dec, double*
|
||||
COMMA double*
|
||||
|
@ -591,7 +591,7 @@ DECLARE_FUNC(int, matrix_create, matrix_t* a
|
|||
COMMA int type);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(void, matrix_free, matrix_t* a);
|
||||
DECLARE_FUNC(void, matrix_free, matrix_t* a);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, matrix_print, matrix_t* a
|
||||
COMMA const char* name
|
||||
|
@ -640,11 +640,11 @@ DECLARE_FUNC(int, ratcompos, double* b
|
|||
DECLARE_FUNC(int, re2cmplx, double*
|
||||
COMMA int
|
||||
COMMA complex_t*);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, readbin, char* fn
|
||||
COMMA void** x
|
||||
COMMA int* k
|
||||
COMMA int* dtype);
|
||||
COMMA int* dtype);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, signal_pimp, double*
|
||||
COMMA size_t
|
||||
|
@ -670,6 +670,10 @@ DECLARE_FUNC(int, sinc, double* x
|
|||
COMMA double a
|
||||
COMMA double* y);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, sine_int, double* x
|
||||
COMMA int n
|
||||
COMMA double* si);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, sqrt_cmplx, complex_t*
|
||||
COMMA int
|
||||
COMMA complex_t*);
|
||||
|
@ -688,18 +692,18 @@ DECLARE_FUNC(int, unwrap, double*
|
|||
COMMA int
|
||||
COMMA double
|
||||
COMMA double);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, verif, double* x
|
||||
COMMA double* y
|
||||
COMMA size_t n
|
||||
COMMA double eps
|
||||
COMMA double* err);
|
||||
//------------------------------------------------------------------------------
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, verif_cmplx, complex_t* x
|
||||
COMMA complex_t* y
|
||||
COMMA size_t n
|
||||
COMMA double eps
|
||||
COMMA double* err);
|
||||
COMMA double* err);
|
||||
//------------------------------------------------------------------------------
|
||||
DECLARE_FUNC(int, writebin, void*
|
||||
COMMA int
|
||||
|
|
|
@ -3,7 +3,9 @@ unset key
|
|||
set grid
|
||||
set xlabel "frequency, rad/s"
|
||||
|
||||
set terminal wxt size 920, 260 enhanced font 'Verdana,8'
|
||||
set terminal pngcairo size 920, 260 enhanced font 'Verdana,8'
|
||||
set output 'img/butter_ap_test.png'
|
||||
|
||||
|
||||
set multiplot layout 1,3 rowsfirst
|
||||
set ylabel "Magnitude, dB"
|
||||
|
@ -20,20 +22,3 @@ plot 'dat/butter_ap_test_tau.txt' with lines
|
|||
|
||||
unset multiplot
|
||||
|
||||
set terminal pngcairo size 920, 260 enhanced font 'Verdana,8'
|
||||
set output 'img/butter_ap_test.png'
|
||||
|
||||
set multiplot layout 1,3 rowsfirst
|
||||
set ylabel "Magnitude, dB"
|
||||
set yrange [-100:5]
|
||||
plot 'dat/butter_ap_test_mag.txt' with lines
|
||||
|
||||
set ylabel "Phase response, rad"
|
||||
unset yrange
|
||||
plot 'dat/butter_ap_test_phi.txt' with lines
|
||||
|
||||
set ylabel "Groupdelay, sec"
|
||||
unset yrange
|
||||
plot 'dat/butter_ap_test_tau.txt' with lines
|
||||
|
||||
unset multiplot
|
|
@ -3,23 +3,6 @@ unset key
|
|||
set grid
|
||||
set xlabel "frequency, rad/s"
|
||||
|
||||
set terminal wxt size 920, 260 enhanced font 'Verdana,8'
|
||||
|
||||
set multiplot layout 1,3 rowsfirst
|
||||
set ylabel "Magnitude, dB"
|
||||
set yrange [-100:5]
|
||||
plot 'dat/cheby1_ap_test_mag.txt' with lines
|
||||
|
||||
set ylabel "Phase response, rad"
|
||||
unset yrange
|
||||
plot 'dat/cheby1_ap_test_phi.txt' with lines
|
||||
|
||||
set ylabel "Groupdelay, sec"
|
||||
unset yrange
|
||||
plot 'dat/cheby1_ap_test_tau.txt' with lines
|
||||
|
||||
unset multiplot
|
||||
|
||||
set terminal pngcairo size 920, 260 enhanced font 'Verdana,8'
|
||||
set output 'img/cheby1_ap_test.png'
|
||||
|
||||
|
@ -37,3 +20,5 @@ unset yrange
|
|||
plot 'dat/cheby1_ap_test_tau.txt' with lines
|
||||
|
||||
unset multiplot
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
set terminal wxt 0 size 560,480 enhanced font 'Verdana,8' position 0,0
|
||||
set terminal pngcairo size 560,480 enhanced font 'Verdana,8'
|
||||
set output 'img/fourier_series_pimp.png'
|
||||
unset key
|
||||
set grid
|
||||
set lmargin 8
|
||||
|
@ -18,14 +19,3 @@ plot[-10*pi:10*pi] 'dat/fourier_series_pimp_phi.txt' with impulses lt 1 ,\
|
|||
unset multiplot
|
||||
|
||||
|
||||
set terminal pngcairo size 560,480 enhanced font 'Verdana,8'
|
||||
set output 'img/fourier_series_pimp.png'
|
||||
set multiplot layout 2,1 rowsfirst
|
||||
#
|
||||
plot[-10*pi:10*pi] 'dat/fourier_series_pimp_mag.txt' with impulses lt 1 ,\
|
||||
'dat/fourier_series_pimp_mag.txt' with points pt 7 ps 0.5 lt 1
|
||||
#
|
||||
plot[-10*pi:10*pi] 'dat/fourier_series_pimp_phi.txt' with impulses lt 1 ,\
|
||||
'dat/fourier_series_pimp_phi.txt' with points pt 7 ps 0.5 lt 1
|
||||
|
||||
unset multiplot
|
||||
|
|
|
@ -1,41 +1,5 @@
|
|||
### Start multiplot (2x2 layout)
|
||||
|
||||
set terminal wxt 0 size 800,640 enhanced font 'Verdana,8' position 0,0
|
||||
unset key
|
||||
set multiplot layout 4,2 rowsfirst
|
||||
#
|
||||
plot 'dat/fourier_series_pimp0.txt' with lines,\
|
||||
'dat/fourier_series_pimp_rec_5.txt' with lines
|
||||
#
|
||||
plot 'dat/fourier_series_saw0.txt' with lines,\
|
||||
'dat/fourier_series_saw_rec_5.txt' with lines
|
||||
#
|
||||
plot 'dat/fourier_series_pimp0.txt' with lines,\
|
||||
'dat/fourier_series_pimp_rec_9.txt' with lines
|
||||
|
||||
#
|
||||
plot 'dat/fourier_series_saw0.txt' with lines,\
|
||||
'dat/fourier_series_saw_rec_9.txt' with lines
|
||||
#
|
||||
plot 'dat/fourier_series_pimp0.txt' with lines,\
|
||||
'dat/fourier_series_pimp_rec_21.txt' with lines
|
||||
|
||||
#
|
||||
plot 'dat/fourier_series_saw0.txt' with lines,\
|
||||
'dat/fourier_series_saw_rec_21.txt' with lines
|
||||
#
|
||||
plot 'dat/fourier_series_pimp0.txt' with lines,\
|
||||
'dat/fourier_series_pimp_rec_61.txt' with lines
|
||||
|
||||
#
|
||||
plot 'dat/fourier_series_saw0.txt' with lines,\
|
||||
'dat/fourier_series_saw_rec_61.txt' with lines
|
||||
|
||||
unset multiplot
|
||||
|
||||
|
||||
|
||||
|
||||
set terminal pngcairo size 800,640 enhanced font 'Verdana,8'
|
||||
set output 'img/fourier_series_rec.png'
|
||||
unset key
|
||||
|
@ -67,4 +31,7 @@ plot 'dat/fourier_series_pimp0.txt' with lines,\
|
|||
#
|
||||
plot 'dat/fourier_series_saw0.txt' with lines,\
|
||||
'dat/fourier_series_saw_rec_61.txt' with lines
|
||||
|
||||
unset multiplot
|
||||
|
||||
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
set terminal wxt 0 size 560,480 enhanced font 'Verdana,8' position 0,0
|
||||
set terminal pngcairo size 560,480 enhanced font 'Verdana,8'
|
||||
set output 'img/fourier_series_pimp.png'
|
||||
unset key
|
||||
set grid
|
||||
set lmargin 8
|
||||
|
@ -21,20 +22,3 @@ plot[-4*pi:4*pi] 'dat/fourier_transform_ex_gauss_freq_0.5.txt' with lines,\
|
|||
unset multiplot
|
||||
|
||||
|
||||
set terminal pngcairo size 560,480 enhanced font 'Verdana,8'
|
||||
set output 'img/fourier_series_pimp.png'
|
||||
set multiplot layout 2,1 rowsfirst
|
||||
#
|
||||
set xlabel 't, c'
|
||||
set ylabel 's(t)'
|
||||
plot[-10:10] 'dat/fourier_transform_ex_gauss_time_0.5.txt' with lines,\
|
||||
'dat/fourier_transform_ex_gauss_time_1.0.txt' with lines,\
|
||||
'dat/fourier_transform_ex_gauss_time_2.0.txt' with lines
|
||||
#
|
||||
set xlabel 'w, рад/c'
|
||||
set ylabel 'S(w)'
|
||||
plot[-4*pi:4*pi] 'dat/fourier_transform_ex_gauss_freq_0.5.txt' with lines,\
|
||||
'dat/fourier_transform_ex_gauss_freq_1.0.txt' with lines,\
|
||||
'dat/fourier_transform_ex_gauss_freq_2.0.txt' with lines
|
||||
|
||||
unset multiplot
|
||||
|
|
|
@ -3,7 +3,7 @@ set xlabel "x"
|
|||
|
||||
set lmargin at screen 0.10
|
||||
|
||||
set terminal wxt size 560,280 enhanced font 'Verdana,8'
|
||||
set terminal pngcairo size 560,280 enhanced font 'Verdana,8'
|
||||
set output 'img/sinc_test.png'
|
||||
set ylabel "sinc(x,a)"
|
||||
set yrange [-0.25:1.1]
|
||||
|
@ -11,6 +11,3 @@ plot 'dat/sinc_test_1.0.txt' with lines title "a = 1.0", \
|
|||
'dat/sinc_test_pi.txt' with lines title "a = pi", \
|
||||
'dat/sinc_test_2pi.txt' with lines title "a = 2pi"
|
||||
|
||||
set terminal pngcairo size 560,280 enhanced font 'Verdana,8'
|
||||
set output 'img/sinc_test.png'
|
||||
replot
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
set grid
|
||||
set xlabel "x"
|
||||
|
||||
set lmargin at screen 0.10
|
||||
set key left top
|
||||
set terminal pngcairo size 560,280 enhanced font 'Verdana,8'
|
||||
set output 'img/sine_int.png'
|
||||
set ylabel "Si(x), sinc(x)"
|
||||
set yrange [-2:2]
|
||||
plot 'dat/dat0.txt' with lines title "Si(x)", \
|
||||
'dat/dat1.txt' with lines title "sinc(x)"
|
||||
|
|
@ -0,0 +1,95 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
#define N 800
|
||||
#define K 19
|
||||
void scale_vector(double* x, int n, double a)
|
||||
{
|
||||
int k;
|
||||
for(k = 0; k < n; k++)
|
||||
x[k] *= a;
|
||||
}
|
||||
|
||||
|
||||
void magphi(double* x, int n, double* mag, double* phi)
|
||||
{
|
||||
int k;
|
||||
for(k = 0; k < n/2; k++)
|
||||
{
|
||||
mag[k] = fabs(x[k]);
|
||||
phi[k] = x[k] < 0.0 ? 1.0 : 0.0;
|
||||
}
|
||||
|
||||
for(k = n/2; k < n; k++)
|
||||
{
|
||||
mag[k] = fabs(x[k]);
|
||||
phi[k] = x[k] < 0.0 ? -1.0 : 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
|
||||
double w[N];
|
||||
double S[N];
|
||||
|
||||
double mag[N];
|
||||
double phi[N];
|
||||
|
||||
|
||||
double wn[K];
|
||||
double Sn[K];
|
||||
|
||||
int n;
|
||||
|
||||
void* handle;
|
||||
handle = dspl_load();
|
||||
if(!handle)
|
||||
{
|
||||
printf("cannot to load libdspl!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
linspace(-8.0, 8.0, N, DSPL_SYMMETRIC, w);
|
||||
linspace(-8.0, 8.0, K, DSPL_SYMMETRIC, wn);
|
||||
|
||||
sinc(w, N, M_PI*0.5, S);
|
||||
scale_vector(S, N, 2);
|
||||
|
||||
sinc(wn, K, M_PI*0.5, Sn);
|
||||
scale_vector(Sn, K, 2);
|
||||
|
||||
writetxt(w+10, S+10, N - 20, "dat/pimp_env.txt");
|
||||
writetxt(wn+1, Sn+1, K - 2, "dat/pimp_spec.txt");
|
||||
|
||||
magphi(S, N, mag, phi);
|
||||
writetxt(w+10, mag+10, N - 20, "dat/pimp_mag_env.txt");
|
||||
writetxt(w+10, mag+10, N - 20, "dat/pimp_mag_env_shift.txt");
|
||||
writetxt(w+10, phi+10, N - 20, "dat/pimp_phi_env.txt");
|
||||
|
||||
magphi(Sn, K, mag, phi);
|
||||
|
||||
writetxt(wn+1, mag+1, K-2, "dat/pimp_mag_spec.txt");
|
||||
writetxt(wn+1, mag+1, K-2, "dat/pimp_mag_spec_shift.txt");
|
||||
writetxt(wn+1, phi+1, K-2, "dat/pimp_phi_spec.txt");
|
||||
|
||||
|
||||
magphi(S, N, mag, phi);
|
||||
for(n = 0; n < N; n++)
|
||||
phi[n] -= w[n]/M_PI;
|
||||
writetxt(w+10, phi+10, N - 20, "dat/pimp_phi_env_shift.txt");
|
||||
|
||||
|
||||
magphi(Sn, K, mag, phi);
|
||||
for(n = 0; n < K; n++)
|
||||
phi[n] -= wn[n]/M_PI;
|
||||
writetxt(wn+1, phi+1, K - 2, "dat/pimp_phi_spec_shift.txt");
|
||||
|
||||
// remember to free the resource
|
||||
dspl_free(handle);
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <math.h>
|
||||
#include "dspl.h"
|
||||
|
||||
#define N 1024
|
||||
#define K 8
|
||||
#define DT 0.01
|
||||
#define M 20
|
||||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
double t[N*K], s[N*K], z[N*K];
|
||||
double w[N*K], S[N*K], Z[N*K];
|
||||
|
||||
double amp[M] = {0.098, -0.160, -0.134, 0.259, 0.248,
|
||||
-0.525, 0.124, -0.080, 0.179, 0.160,
|
||||
0.071, -0.055, -0.119, 0.061, 0.297,
|
||||
0.023, -0.347, 0.085, 0.046, 0.022};
|
||||
|
||||
double mu[M] = {478.0, 552.0, 672.0, 189.0, 268.0,
|
||||
504.0, 824.0, 482.0, 471.0, 643.0,
|
||||
685.0, 163.0, 870.0, 424.0, 662.0,
|
||||
611.0, 377.0, 549.0, 824.0, 731.0};
|
||||
|
||||
double sigma[M] = {527.0, 1399.0, 1499.0, 543.0, 523.0,
|
||||
1465.0, 1175.0, 1535.0, 604.0, 1074.0,
|
||||
890.0, 616.0, 563.0, 1201.0, 1884.0,
|
||||
1745.0, 1465.0, 1885.0, 1767.0, 1635.0};
|
||||
|
||||
|
||||
|
||||
complex_t SC[N*K];
|
||||
int k, m;
|
||||
double ms;
|
||||
void* handle;
|
||||
fft_t pfft;
|
||||
|
||||
handle = dspl_load();
|
||||
if(!handle)
|
||||
{
|
||||
printf("cannot to load libdspl!\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
linspace(0, (double)(N*K), N*K, DSPL_PERIODIC, t);
|
||||
memset(z, 0, N*K*sizeof(double));
|
||||
ms = 0.0;
|
||||
for(k = 0; k < N; k++)
|
||||
{
|
||||
for(m =0; m < M; m++)
|
||||
{
|
||||
s[k] += amp[m] * exp(-(t[k]-mu[m])*(t[k]-mu[m]) / sigma[m]);
|
||||
}
|
||||
s[k] += 2.0 * exp(-(t[k]-(double)N * 0.5)*(t[k]-(double)N * 0.5) / 150.0);
|
||||
|
||||
}
|
||||
|
||||
for(k = 503; k < 523; k++)
|
||||
z[k] = 1.8;
|
||||
|
||||
for(k = 0; k < N; k++)
|
||||
t[k] *= DT;
|
||||
|
||||
|
||||
writetxt(t, s, N, "dat/dat_s.txt");
|
||||
writetxt(t, z, N, "dat/dat_z.txt");
|
||||
|
||||
memset(&pfft, 0, sizeof(fft_t));
|
||||
fft_create(&pfft, N*K);
|
||||
fft(s, N*K, &pfft, SC);
|
||||
|
||||
for(k = 0; k < N*K; k++)
|
||||
{
|
||||
S[k] = ABS(SC[k])*DT;
|
||||
w[k] = -M_PI/DT + M_2PI/DT/(double)(N*K) * (double)k;
|
||||
}
|
||||
fft_shift(S, N*K, S);
|
||||
|
||||
fft(z, N*K, &pfft, SC);
|
||||
|
||||
for(k = 0; k < N*K; k++)
|
||||
{
|
||||
Z[k] = ABS(SC[k])*DT;
|
||||
}
|
||||
fft_shift(Z, N*K, Z);
|
||||
|
||||
|
||||
writetxt(w, S, N*K, "dat/spec_s.txt");
|
||||
writetxt(w, Z, N*K, "dat/spec_z.txt");
|
||||
|
||||
dspl_free(handle);
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "dspl.h"
|
||||
|
||||
#define N 400
|
||||
|
||||
int main()
|
||||
{
|
||||
void* handle; // DSPL handle
|
||||
handle = dspl_load(); // Load DSPL function
|
||||
|
||||
double x[N], y[N];
|
||||
|
||||
linspace(-6*M_PI, 6*M_PI, N, DSPL_PERIODIC, x);
|
||||
|
||||
sine_int(x, N, y);
|
||||
writetxt(x, y, N, "dat/dat0.txt");
|
||||
|
||||
sinc(x, N, 1.0, y);
|
||||
writetxt(x, y, N, "dat/dat1.txt");
|
||||
|
||||
dspl_free(handle); // free dspl handle
|
||||
|
||||
return system("gnuplot gnuplot/sine_int.plt");
|
||||
}
|
Ładowanie…
Reference in New Issue