added sine_int function and documntation

plt files changed (gnuplot will produce only png images)
pull/6/merge
Dsplib 2019-02-06 23:57:53 +03:00
rodzic 0e646be5df
commit b0b23ce5a7
18 zmienionych plików z 561 dodań i 203 usunięć

Wyświetl plik

@ -25,22 +25,12 @@ $generatedby &#160;<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">
&copy; Бахурин Сергей 2015 - 2018. Все права защищены.
&copy; Бахурин Сергей 2015 - 2019. Все права защищены.
Любое копирование материалов сайте без разрешения автора запрещено.
</div>
</div>
</div>
</div> <!-- div id="wrapper" -->
</body>
</html>

Wyświetl plik

@ -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
В данной группе приведены возможные коды ошибок, возвращаемые функциями библиотеки в процессе
работы.
*/

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

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

Wyświetl plik

@ -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");
}