libdspl-2.0
Библиотека алгоритмов цифровой обработки сигналов
dspl.c
1 /*
2 * Copyright (c) 2015-2022 Sergey Bakhurin
3 * Digital Signal Processing Library [http://dsplib.org]
4 *
5 * This file is part of libdspl-2.0.
6 *
7 * is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * DSPL is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public License
18 * along with Foobar. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 
22 
23 
24 #ifdef WIN_OS
25 #include <windows.h>
26 #endif /* WIN_OS */
27 
28 #ifdef LINUX_OS
29 #include <dlfcn.h>
30 #endif /* LINUX_OS */
31 
32 
33 #include <stdio.h>
34 #include "dspl.h"
35 
36 
37 #ifndef BUILD_LIB
38 
39 p_acos_cmplx acos_cmplx ;
40 p_addlog addlog ;
41 p_array_scale_lin array_scale_lin ;
42 p_asin_cmplx asin_cmplx ;
43 
44 p_butter_ap butter_ap ;
45 p_bessel_i0 bessel_i0 ;
46 p_bilinear bilinear ;
47 p_butter_ap_zp butter_ap_zp ;
48 
49 p_cheby_poly1 cheby_poly1 ;
50 p_cheby_poly2 cheby_poly2 ;
51 p_cheby1_ap cheby1_ap ;
52 p_cheby1_ap_zp cheby1_ap_zp ;
53 p_cheby2_ap cheby2_ap ;
54 p_cheby2_ap_wp1 cheby2_ap_wp1 ;
55 p_cheby2_ap_zp cheby2_ap_zp ;
56 p_cmplx2re cmplx2re ;
57 p_concat concat ;
58 p_conv conv ;
59 p_conv_cmplx conv_cmplx ;
60 p_conv_fft conv_fft ;
61 p_conv_fft_cmplx conv_fft_cmplx ;
62 p_cos_cmplx cos_cmplx ;
63 
64 p_decimate decimate ;
65 p_decimate_cmplx decimate_cmplx ;
66 p_dft dft ;
67 p_dft_cmplx dft_cmplx ;
68 p_dmod dmod ;
69 p_dspl_info dspl_info ;
70 
71 p_ellip_acd ellip_acd ;
72 p_ellip_acd_cmplx ellip_acd_cmplx ;
73 p_ellip_ap ellip_ap ;
74 p_ellip_ap_zp ellip_ap_zp ;
75 p_ellip_asn ellip_asn ;
76 p_ellip_asn_cmplx ellip_asn_cmplx ;
77 p_ellip_cd ellip_cd ;
78 p_ellip_cd_cmplx ellip_cd_cmplx ;
79 p_ellip_landen ellip_landen ;
80 p_ellip_modulareq ellip_modulareq ;
81 p_ellip_rat ellip_rat ;
82 p_ellip_sn ellip_sn ;
83 p_ellip_sn_cmplx ellip_sn_cmplx ;
84 
85 p_farrow_lagrange farrow_lagrange ;
86 p_farrow_spline farrow_spline ;
87 p_fft fft ;
88 p_fft_abs fft_abs ;
89 p_fft_abs_cmplx fft_abs_cmplx ;
90 p_fft_cmplx fft_cmplx ;
91 p_fft_create fft_create ;
92 p_fft_free fft_free ;
93 p_fft_mag fft_mag ;
94 p_fft_mag_cmplx fft_mag_cmplx ;
95 p_fft_shift fft_shift ;
96 p_fft_shift_cmplx fft_shift_cmplx ;
97 p_filter_freq_resp filter_freq_resp ;
98 p_filter_iir filter_iir ;
99 p_filter_ws1 filter_ws1 ;
100 p_filter_zp2ab filter_zp2ab ;
101 p_find_max_abs find_max_abs ;
102 p_find_nearest find_nearest ;
103 p_fir_linphase fir_linphase ;
104 p_flipip flipip ;
105 p_flipip_cmplx flipip_cmplx ;
106 p_fourier_integral_cmplx fourier_integral_cmplx ;
107 p_fourier_series_dec fourier_series_dec ;
108 p_fourier_series_dec_cmplx fourier_series_dec_cmplx ;
109 p_fourier_series_rec fourier_series_rec ;
110 p_freqs freqs ;
111 p_freqs_cmplx freqs_cmplx ;
112 p_freqs2time freqs2time ;
113 p_freqz freqz ;
114 
115 p_gnuplot_close gnuplot_close ;
116 p_gnuplot_cmd gnuplot_cmd ;
117 p_gnuplot_create gnuplot_create ;
118 p_gnuplot_open gnuplot_open ;
119 p_goertzel goertzel ;
120 p_goertzel_cmplx goertzel_cmplx ;
121 p_group_delay group_delay ;
122 
123 p_histogram histogram ;
124 p_histogram_norm histogram_norm ;
125 
126 p_idft_cmplx idft_cmplx ;
127 p_ifft_cmplx ifft_cmplx ;
128 p_iir iir ;
129 
130 p_linspace linspace ;
131 p_log_cmplx log_cmplx ;
132 p_logspace logspace ;
133 p_low2bp low2bp ;
134 p_low2bs low2bs ;
135 p_low2high low2high ;
136 p_low2low low2low ;
137 
138 p_matrix_eig_cmplx matrix_eig_cmplx ;
139 p_matrix_eye matrix_eye ;
140 p_matrix_eye_cmplx matrix_eye_cmplx ;
141 p_matrix_mul matrix_mul ;
142 p_matrix_pinv matrix_pinv ;
143 p_matrix_print matrix_print ;
144 p_matrix_print_cmplx matrix_print_cmplx ;
145 p_matrix_svd matrix_svd ;
146 p_matrix_transpose matrix_transpose ;
147 p_matrix_transpose_cmplx matrix_transpose_cmplx ;
148 p_matrix_transpose_hermite matrix_transpose_hermite ;
149 p_mean mean ;
150 p_mean_cmplx mean_cmplx ;
151 p_minmax minmax ;
152 
153 p_ones ones ;
154 
155 p_phase_delay phase_delay ;
156 p_poly_z2a_cmplx poly_z2a_cmplx ;
157 p_polyroots polyroots ;
158 p_polyval polyval ;
159 p_polyval_cmplx polyval_cmplx ;
160 p_psd_bartlett psd_bartlett ;
161 p_psd_bartlett_cmplx psd_bartlett_cmplx ;
162 p_psd_periodogram psd_periodogram ;
163 p_psd_periodogram_cmplx psd_periodogram_cmplx ;
164 p_psd_welch psd_welch ;
165 p_psd_welch_cmplx psd_welch_cmplx ;
166 
167 p_randb randb ;
168 p_randb2 randb2 ;
169 p_randi randi ;
170 p_randn randn ;
171 p_randn_cmplx randn_cmplx ;
172 p_random_init random_init ;
173 p_randu randu ;
174 p_ratcompos ratcompos ;
175 p_re2cmplx re2cmplx ;
176 p_readbin readbin ;
177 
178 p_signal_pimp signal_pimp ;
179 p_signal_saw signal_saw ;
180 p_sin_cmplx sin_cmplx ;
181 p_sinc sinc ;
182 p_sine_int sine_int ;
183 p_sqrt_cmplx sqrt_cmplx ;
184 p_stat_std stat_std ;
185 p_stat_std_cmplx stat_std_cmplx ;
186 p_sum sum ;
187 p_sum_sqr sum_sqr ;
188 
189 p_trapint trapint ;
190 p_trapint_cmplx trapint_cmplx ;
191 
192 p_unwrap unwrap ;
193 
194 p_vector_dot vector_dot ;
195 p_verif verif ;
196 p_verif_data_gen verif_data_gen ;
197 p_verif_cmplx verif_cmplx ;
198 p_verif_str verif_str ;
199 p_verif_str_cmplx verif_str_cmplx ;
200 
201 p_window window ;
202 p_writebin writebin ;
203 p_writetxt writetxt ;
204 p_writetxt_3d writetxt_3d ;
205 p_writetxt_3dline writetxt_3dline ;
206 p_writetxt_cmplx writetxt_cmplx ;
207 p_writetxt_cmplx_im writetxt_cmplx_im ;
208 p_writetxt_cmplx_re writetxt_cmplx_re ;
209 p_writetxt_int writetxt_int ;
210 
211 p_xcorr xcorr ;
212 p_xcorr_cmplx xcorr_cmplx ;
213 
214 
215 #ifdef WIN_OS
216 #define LOAD_FUNC(fn) \
217  fname = #fn;\
218  fn = (p_##fn)GetProcAddress(handle, fname);\
219  if(! fn) goto exit_label;
220 #endif
221 
222 
223 
224 #ifdef LINUX_OS
225 #define LOAD_FUNC(fn) \
226  fname = #fn;\
227  fn = (p_##fn)dlsym(handle, fname);\
228  if ((error = dlerror()) != NULL) goto exit_label
229 #endif
230 
231 
232 void* dspl_load()
233 {
234  char* fname;
235  #ifdef WIN_OS
236  HINSTANCE handle;
237  handle = LoadLibrary(TEXT("libdspl.dll"));
238  if (!handle)
239  {
240  printf("libdspl.dll loading ERROR!\n");
241  return NULL;
242  }
243  #endif /* WIN_OS */
244 
245 
246  #ifdef LINUX_OS
247  char* error;
248  void *handle;
249  /* open the *.so */
250  handle = dlopen ("./libdspl.so", RTLD_LAZY);
251  if (!handle)
252  {
253  printf("libdspl.so loading ERROR!\n");
254  return NULL;
255  }
256  #endif /* LINUX_OS */
257 
258  LOAD_FUNC(acos_cmplx);
259  LOAD_FUNC(addlog);
260  LOAD_FUNC(array_scale_lin);
261  LOAD_FUNC(asin_cmplx);
262 
263  LOAD_FUNC(bessel_i0);
264  LOAD_FUNC(bilinear);
265  LOAD_FUNC(butter_ap);
266  LOAD_FUNC(butter_ap_zp);
267 
268  LOAD_FUNC(cheby_poly1);
269  LOAD_FUNC(cheby_poly2);
270  LOAD_FUNC(cheby1_ap);
271  LOAD_FUNC(cheby1_ap_zp);
272  LOAD_FUNC(cheby2_ap);
273  LOAD_FUNC(cheby2_ap_wp1);
274  LOAD_FUNC(cheby2_ap_zp);
275  LOAD_FUNC(cmplx2re);
276  LOAD_FUNC(concat);
277  LOAD_FUNC(conv);
278  LOAD_FUNC(conv_cmplx);
279  LOAD_FUNC(conv_fft);
280  LOAD_FUNC(conv_fft_cmplx);
281  LOAD_FUNC(cos_cmplx);
282 
283  LOAD_FUNC(decimate);
284  LOAD_FUNC(decimate_cmplx);
285  LOAD_FUNC(dft);
286  LOAD_FUNC(dft_cmplx);
287  LOAD_FUNC(dmod);
288  LOAD_FUNC(dspl_info);
289 
290  LOAD_FUNC(ellip_acd);
291  LOAD_FUNC(ellip_acd_cmplx);
292  LOAD_FUNC(ellip_ap);
293  LOAD_FUNC(ellip_ap_zp);
294  LOAD_FUNC(ellip_asn);
295  LOAD_FUNC(ellip_asn_cmplx);
296  LOAD_FUNC(ellip_cd);
297  LOAD_FUNC(ellip_cd_cmplx);
298  LOAD_FUNC(ellip_landen);
299  LOAD_FUNC(ellip_modulareq);
300  LOAD_FUNC(ellip_rat);
301  LOAD_FUNC(ellip_sn);
302  LOAD_FUNC(ellip_sn_cmplx);
303 
304  LOAD_FUNC(farrow_lagrange);
305  LOAD_FUNC(farrow_spline);
306  LOAD_FUNC(fft);
307  LOAD_FUNC(fft_cmplx);
308  LOAD_FUNC(fft_create);
309  LOAD_FUNC(fft_free);
310  LOAD_FUNC(fft_mag);
311  LOAD_FUNC(fft_mag_cmplx);
312  LOAD_FUNC(fft_shift);
313  LOAD_FUNC(fft_shift_cmplx);
314  LOAD_FUNC(filter_freq_resp);
315  LOAD_FUNC(filter_iir);
316  LOAD_FUNC(filter_ws1);
317  LOAD_FUNC(filter_zp2ab);
318  LOAD_FUNC(find_max_abs);
319  LOAD_FUNC(find_nearest);
320  LOAD_FUNC(fir_linphase);
321  LOAD_FUNC(flipip);
322  LOAD_FUNC(flipip_cmplx);
323  LOAD_FUNC(fourier_integral_cmplx);
324  LOAD_FUNC(fourier_series_dec);
325  LOAD_FUNC(fourier_series_dec_cmplx);
326  LOAD_FUNC(fourier_series_rec);
327  LOAD_FUNC(freqz);
328  LOAD_FUNC(freqs);
329  LOAD_FUNC(freqs_cmplx);
330  LOAD_FUNC(freqs2time);
331 
332  LOAD_FUNC(gnuplot_close);
333  LOAD_FUNC(gnuplot_cmd);
334  LOAD_FUNC(gnuplot_create);
335  LOAD_FUNC(gnuplot_open);
336  LOAD_FUNC(goertzel);
337  LOAD_FUNC(goertzel_cmplx);
338  LOAD_FUNC(group_delay);
339 
340  LOAD_FUNC(histogram);
341  LOAD_FUNC(histogram_norm);
342 
343  LOAD_FUNC(idft_cmplx);
344  LOAD_FUNC(ifft_cmplx);
345  LOAD_FUNC(iir);
346 
347  LOAD_FUNC(linspace);
348  LOAD_FUNC(log_cmplx);
349  LOAD_FUNC(logspace);
350  LOAD_FUNC(low2bp);
351  LOAD_FUNC(low2bs);
352  LOAD_FUNC(low2high);
353  LOAD_FUNC(low2low);
354 
355  LOAD_FUNC(matrix_eig_cmplx);
356  LOAD_FUNC(matrix_eye);
357  LOAD_FUNC(matrix_eye_cmplx);
358  LOAD_FUNC(matrix_mul);
359  LOAD_FUNC(matrix_pinv);
360  LOAD_FUNC(matrix_print);
361  LOAD_FUNC(matrix_print_cmplx);
362  LOAD_FUNC(matrix_svd);
363  LOAD_FUNC(matrix_transpose);
364  LOAD_FUNC(matrix_transpose_cmplx);
365  LOAD_FUNC(matrix_transpose_hermite);
366  LOAD_FUNC(mean);
367  LOAD_FUNC(mean_cmplx);
368  LOAD_FUNC(minmax);
369 
370  LOAD_FUNC(ones);
371 
372  LOAD_FUNC(phase_delay);
373  LOAD_FUNC(poly_z2a_cmplx);
374  LOAD_FUNC(polyroots);
375  LOAD_FUNC(polyval);
376  LOAD_FUNC(polyval_cmplx);
377  LOAD_FUNC(psd_bartlett);
378  LOAD_FUNC(psd_bartlett_cmplx);
379  LOAD_FUNC(psd_periodogram);
380  LOAD_FUNC(psd_periodogram_cmplx);
381  LOAD_FUNC(psd_welch);
382  LOAD_FUNC(psd_welch_cmplx);
383 
384  LOAD_FUNC(randi);
385  LOAD_FUNC(randb);
386  LOAD_FUNC(randb2);
387  LOAD_FUNC(randn);
388  LOAD_FUNC(randn_cmplx);
389  LOAD_FUNC(random_init);
390  LOAD_FUNC(randu);
391  LOAD_FUNC(ratcompos);
392  LOAD_FUNC(re2cmplx);
393  LOAD_FUNC(readbin);
394 
395  LOAD_FUNC(signal_pimp);
396  LOAD_FUNC(signal_saw);
397  LOAD_FUNC(sin_cmplx);
398  LOAD_FUNC(sinc);
399  LOAD_FUNC(sine_int);
400  LOAD_FUNC(sqrt_cmplx);
401  LOAD_FUNC(stat_std);
402  LOAD_FUNC(stat_std_cmplx);
403  LOAD_FUNC(sum);
404  LOAD_FUNC(sum_sqr);
405 
406  LOAD_FUNC(trapint);
407  LOAD_FUNC(trapint_cmplx);
408 
409  LOAD_FUNC(unwrap);
410 
411  LOAD_FUNC(vector_dot);
412  LOAD_FUNC(verif);
413  LOAD_FUNC(verif_data_gen);
414  LOAD_FUNC(verif_cmplx);
415  LOAD_FUNC(verif_str);
416  LOAD_FUNC(verif_str_cmplx);
417 
418  LOAD_FUNC(window);
419  LOAD_FUNC(writebin);
420  LOAD_FUNC(writetxt);
421  LOAD_FUNC(writetxt_3d);
422  LOAD_FUNC(writetxt_3dline);
423  LOAD_FUNC(writetxt_cmplx);
424  LOAD_FUNC(writetxt_cmplx_im);
425  LOAD_FUNC(writetxt_cmplx_re);
426  LOAD_FUNC(writetxt_int);
427 
428  LOAD_FUNC(xcorr);
429  LOAD_FUNC(xcorr_cmplx);
430 
431 
432  #ifdef WIN_OS
433  return (void*)handle;
434  exit_label:
435  printf("function %s loading ERROR!\n", fname);
436  if(handle)
437  FreeLibrary(handle);
438  return NULL;
439  #endif /* WIN_OS */
440 
441 
442  #ifdef LINUX_OS
443  return handle;
444  exit_label:
445  printf("function %s loading ERROR!\n", fname);
446  if(handle)
447  dlclose(handle);
448  return NULL;
449  #endif /* LINUX_OS */
450 }
451 
452 
453 
454 void dspl_free(void* handle)
455 {
456  #ifdef WIN_OS
457  FreeLibrary((HINSTANCE)handle);
458  #endif /* WIN_OS */
459 
460  #ifdef LINUX_OS
461  dlclose(handle);
462  #endif /* LINUX_OS */
463 }
464 
465 #endif /* BUILD_LIB */
int conv_fft(double *a, int na, double *b, int nb, fft_t *pfft, int nfft, double *c)
Линейная свертка двух вещественных векторов с использованием алгоритмов быстрого преобразования Фурье
Definition: conv_fft.c:198
int window(double *w, int n, int win_type, double param)
Расчет функции оконного взвешивания
Definition: win.c:329
int ellip_ap_zp(int ord, double rp, double rs, complex_t *z, int *nz, complex_t *p, int *np)
Расчет массивов нулей и полюсов передаточной функции аналогового нормированного эллиптического ФНЧ.
Definition: ellip_ap_zp.c:213
int sine_int(double *x, int n, double *si)
Функция интегрального синуса
Definition: sine_int.c:114
int cheby1_ap(double rp, int ord, double *b, double *a)
Расчет передаточной характеристики аналогового нормированного ФНЧ Чебышёва первого рода.
Definition: cheby1_ap.c:179
int flipip_cmplx(complex_t *x, int n)
Функция отражения комплексного вектора x
Definition: flipip_cmplx.c:132
int ellip_cd(double *u, int n, double k, double *y)
Эллиптическая функция Якоби вещественного аргумента
Definition: ellip_cd.c:125
int butter_ap_zp(int ord, double rp, complex_t *z, int *nz, complex_t *p, int *np)
Расчет массивов нулей и полюсов передаточной функции аналогового нормированного ФНЧ Баттерворта.
Definition: butter_ap_zp.c:207
int filter_iir(double *b, double *a, int ord, double *x, int n, double *y)
Фильтрация вещественного сигнала вещественным БИХ-фильтром
Definition: filter_iir.c:165
int ratcompos(double *b, double *a, int n, double *c, double *d, int p, double *beta, double *alpha)
Рациональная композиця
Definition: ratcompos.c:180
int fourier_series_rec(double *w, complex_t *s, int nw, double *t, int nt, complex_t *y)
Восстановление сигнала при усечении ряда Фурье
int group_delay(double *pb, double *pa, int ord, int flag, double *w, int n, double *tau)
Расчет группового времени запаздывания цифрового или аналогового фильтра.
Definition: group_delay.c:161
int low2low(double *b, double *a, int ord, double w0, double w1, double *beta, double *alpha)
Частотное преобразование ФНЧ-ФНЧ
Definition: low2low.c:147
int flipip(double *x, int n)
Функция отражения вещественного вектора x
Definition: flipip.c:133
int bilinear(double *bs, double *as, int ord, double *bz, double *az)
Билинейное преобразование передаточной характеристики аналогового фильтра , в передаточную характерис...
Definition: bilinear.c:209
int writetxt_int(int *x, int *y, int n, char *fn)
Сохранить целочисленные данные в текстовый файл
Definition: writetxt_int.c:113
int conv(double *a, int na, double *b, int nb, double *c)
Линейная свертка двух вещественных векторов
Definition: conv.c:157
int cheby_poly2(double *x, int n, int ord, double *y)
Многочлен Чебышева второго рода порядка ord
Definition: cheby_poly2.c:133
int log_cmplx(complex_t *x, int n, complex_t *y)
Натуральный логарифм комплексного аргумента x.
Definition: log_cmplx.c:139
int sum_sqr(double *x, int n, double *s)
Definition: sum_sqr.c:42
int polyval(double *a, int ord, double *x, int n, double *y)
Расчет вещественного полинома
Definition: polyval.c:77
int acos_cmplx(complex_t *x, int n, complex_t *y)
Арккосинус комплексного аргумента x.
Definition: acos_cmplx.c:141
int idft_cmplx(complex_t *x, int n, complex_t *y)
Обратное дискретное преобразование Фурье комплексного спектра.
Definition: idft_cmplx.c:161
int writebin(void *x, int n, int m, int dtype, char *fn)
Сохранить данные в бинарный файл
Definition: writebin.c:227
int polyval_cmplx(complex_t *a, int ord, complex_t *x, int n, complex_t *y)
Расчет комплексного полинома
Definition: polyval_cmplx.c:80
int fft_shift(double *x, int n, double *y)
Перестановка спектральных отсчетов дискретного преобразования Фурье
Definition: fft_shift.c:93
int psd_welch_cmplx(complex_t *x, int n, int win_type, double win_param, int nfft, int noverlap, fft_t *pfft, double fs, int flag, double *ppsd, double *pfrq)
Непараметрическая оценка спектральной плотности мощности (СПМ) комплексного сигнала методом Уэлча.
void gnuplot_close(void *h)
Закрыть хэндл GNUPLOT.
Definition: gnuplot_close.c:80
int randn(double *x, int n, double mu, double sigma, random_t *prnd)
Генерация вектора нормально распределенных псевдослучайных чисел.
Definition: randn.c:89
int iir(double rp, double rs, int ord, double w0, double w1, int type, double *b, double *a)
Функция расчета коэффициентов передаточной характеристики цифрового фильтра БИХ.
Definition: iir.c:245
int low2high(double *b, double *a, int ord, double w0, double w1, double *beta, double *alpha)
Частотное преобразование ФНЧ-ФВЧ
Definition: low2high.c:146
int fft_create(fft_t *pfft, int n)
Заполнение структуры fft_t для алгоритма БПФ
Definition: fft_create.c:159
int fft_cmplx(complex_t *x, int n, fft_t *pfft, complex_t *y)
Быстрое преобразование Фурье комплексного сигнала
Definition: fft_cmplx.c:177
int fourier_series_dec(double *t, double *s, int nt, double period, int nw, double *w, complex_t *y)
Расчет коэффициентов разложения в ряд Фурье
int ifft_cmplx(complex_t *x, int n, fft_t *pfft, complex_t *y)
Обратное быстрое преобразование Фурье
Definition: ifft_cmplx.c:177
int stat_std(double *x, int n, double *s)
Выборочная оценка стандартного отклонения вещественного вектора x
Definition: stat_std.c:116
int conv_fft_cmplx(complex_t *a, int na, complex_t *b, int nb, fft_t *pfft, int nfft, complex_t *c)
Линейная свертка двух комплексных векторов с использованием алгоритмов быстрого преобразования Фурье
int psd_bartlett_cmplx(complex_t *x, int n, int nfft, fft_t *pfft, double fs, int flag, double *ppsd, double *pfrq)
Непараметрическая оценка спектральной плотности мощности (СПМ) комплексного сигнала методом Бартлетта...
int logspace(double x0, double x1, int n, int type, double *x)
Функция заполняет массив значениями логарифмической шкале
Definition: logspace.c:178
int ellip_acd(double *w, int n, double k, double *u)
Обратная эллиптическая функция Якоби вещественного аргумента
Definition: ellip_acd.c:102
void fft_free(fft_t *pfft)
Очистить структуру fft_t алгоритма БПФ
Definition: fft_free.c:61
int psd_periodogram_cmplx(complex_t *x, int n, int win_type, double win_param, fft_t *pfft, double fs, int flag, double *ppsd, double *pfrq)
Непараметрическая оценка спектральной плотности мощности (СПМ) комплексного сигнала методом модифицир...
int polyroots(double *a, int ord, complex_t *r, int *info)
Расчет корней вещественного полинома
Definition: polyroots.c:157
int psd_welch(double *x, int n, int win_type, double win_param, int nfft, int noverlap, fft_t *pfft, double fs, int flag, double *ppsd, double *pfrq)
Непараметрическая оценка спектральной плотности мощности (СПМ) вещественного сигнала методом Уэлча.
Definition: psd_welch.c:156
int psd_bartlett(double *x, int n, int nfft, fft_t *pfft, double fs, int flag, double *ppsd, double *pfrq)
Непараметрическая оценка спектральной плотности мощности (СПМ) вещественного сигнала методом Бартлетт...
Definition: psd_bartlett.c:144
int filter_zp2ab(complex_t *z, int nz, complex_t *p, int np, int ord, double *b, double *a)
Функция пересчета нулей и полюсов аналогового фильтра в коэффициенты передаточной характеристики .
Definition: filter_zp2ab.c:166
void * dspl_load()
Произвести динамическую линковку и загрузить функции libdspl-2.0.
int ellip_sn_cmplx(complex_t *u, int n, double k, complex_t *y)
Эллиптическая функция Якоби комплексного аргумента
int ellip_sn(double *u, int n, double k, double *y)
Эллиптическая функция Якоби вещественного аргумента
Definition: ellip_sn.c:127
int xcorr_cmplx(complex_t *x, int nx, complex_t *y, int ny, int flag, int nr, complex_t *r, double *t)
Оценка вектора взаимной корреляции для дискретных комплексных последовательностей x и y.
Definition: xcorr.c:445
int xcorr(double *x, int nx, double *y, int ny, int flag, int nr, double *r, double *t)
Оценка вектора взаимной корреляции для дискретных вещественных последовательностей x и y.
Definition: xcorr.c:212
void gnuplot_cmd(void *h, char *cmd)
Функция посылает команду cmd пакету GNUPLOT, для построения или оформления графика,...
Definition: gnuplot_cmd.c:82
int goertzel(double *x, int n, int *ind, int k, complex_t *y)
Алгоритм Гёрцеля для расчета отдельных спектральных отсчетов дискретного преобразования Фурье веществ...
Definition: goertzel.c:123
int randu(double *x, int n, random_t *prnd)
Генерация вектора равномерно-распределенных в интервале от 0 до 1 псевдослучайных чисел.
Definition: randu.c:103
int randi(int *x, int n, int start, int stop, random_t *prnd)
Генерация целочисленного вектора равномерно распределенных псевдослучайных чисел.
Definition: randi.c:86
int fft(double *x, int n, fft_t *pfft, complex_t *y)
Быстрое преобразование Фурье вещественного сигнала
Definition: fft.c:171
int writetxt_3d(double *x, int nx, double *y, int ny, double *z, char *fn)
Сохранить данные для построения 3D графика
Definition: writetxt_3d.c:211
int ellip_asn_cmplx(complex_t *w, int n, double k, complex_t *u)
Обратная эллиптическая функция Якоби комплексного аргумента
int butter_ap(double rp, int ord, double *b, double *a)
Расчет передаточной характеристики аналогового нормированного ФНЧ Баттерворта.
Definition: butter_ap.c:172
int cheby_poly1(double *x, int n, int ord, double *y)
Многочлен Чебышева первого рода порядка ord
Definition: cheby_poly1.c:136
int farrow_spline(double *s, int n, double p, double q, double frd, double **y, int *ny)
Передискретизация вещественного сигнала на основе сплайн интерполяции.
Definition: farrow_spline.c:84
int fir_linphase(int ord, double w0, double w1, int filter_type, int win_type, double win_param, double *h)
Расчет коэффициентов линейно-фазового КИХ-фильтра методом оконного взвешивания.
Definition: fir_linphase.c:321
int re2cmplx(double *x, int n, complex_t *y)
Преобразование массива вещественных данных в массив комплексных данных.
Definition: re2cmplx.c:120
int writetxt(double *x, double *y, int n, char *fn)
Сохранить вещественные данные в текстовый файл
Definition: writetxt.c:122
int random_init(random_t *prnd, int type, void *seed)
Инициализация датчиков псевдослучайных чисел.
Definition: random_init.c:120
int cmplx2re(complex_t *x, int n, double *re, double *im)
Преобразование массива комплексных данных в два массива вещественных данных, содержащих реальную и мн...
Definition: cmplx2re.c:130
int conv_cmplx(complex_t *a, int na, complex_t *b, int nb, complex_t *c)
Линейная свертка двух комплексных векторов
Definition: conv_cmplx.c:158
int freqz(double *b, double *a, int ord, double *w, int n, complex_t *h)
Расчет комплексного коэффициента передачи цифрового фильтра.
Definition: freqz.c:155
int matrix_eig_cmplx(complex_t *a, int n, complex_t *v, int *info)
Расчет собственных значений квадратной комплексной матрицы.
int ones(double *x, int n)
Функция заполнения вещественного массива единицами
Definition: ones.c:102
int randb(double *x, int n, random_t *prnd)
Генерация бинарного униполярного [0, 1] псевдослучайного вектора
Definition: randb.c:118
int cheby1_ap_zp(int ord, double rp, complex_t *z, int *nz, complex_t *p, int *np)
Расчет массивов нулей и полюсов передаточной функции аналогового нормированного ФНЧ Чебышёва первого...
Definition: cheby1_ap_zp.c:204
int filter_freq_resp(double *b, double *a, int ord, double *w, int n, int flag, double *mag, double *phi, double *tau)
Расчет амплитудно-частотной (АЧХ), фазочастотной характеристик (ФЧХ), а также группового времени запа...
void dspl_free(void *handle)
Очищает связанную ранее динамическую библиотеку DSPL-2.0.
int decimate(double *x, int n, int d, double *y, int *cnt)
Децимация вещественного вектора данных
Definition: decimate.c:140
int phase_delay(double *b, double *a, int ord, int flag, double *w, int n, double *tau)
Расчет фазовой задержки цифрового или аналогового фильтра.
Definition: phase_delay.c:162
int find_max_abs(double *a, int n, double *m, int *ind)
Поиск максимального по модулю элемента вещественного вектора a
Definition: find_max_abs.c:121
int ellip_ap(double rp, double rs, int ord, double *b, double *a)
Расчет передаточной характеристики аналогового нормированного эллиптического ФНЧ.
Definition: ellip_ap.c:191
int farrow_lagrange(double *s, int n, double p, double q, double frd, double **y, int *ny)
Передискретизация вещественного сигнала на основе полиномиальной Лагранжевой интерполяции.
int matrix_eye(double *a, int n, int m)
Генерирование единичной вещественной матрицы размерности n x m.
Definition: matrix_eye.c:80
int verif(double *x, double *y, size_t n, double eps, double *err)
Верификация вещественных массивов
Definition: verif.c:130
int sqrt_cmplx(complex_t *x, int n, complex_t *y)
Квадратный корень из комплексного вектора x (поэлементный).
Definition: sqrt_cmplx.c:136
int concat(void *a, size_t na, void *b, size_t nb, void *c)
Конкатенация двух массивов данных
Definition: concat.c:146
int sin_cmplx(complex_t *x, int n, complex_t *y)
Синус комплексного аргумента x.
Definition: sin_cmplx.c:136
int sum(double *x, int n, double *s)
Расчет суммы элеметов массива
Definition: sum.c:76
int freqs(double *b, double *a, int ord, double *w, int n, complex_t *h)
Расчет комплексного коэффициента передачи аналогового фильтра.
Definition: freqs.c:143
int array_scale_lin(double *x, int n, double xmin, double xmax, double dx, double h, double *y)
Линейное растяжение вектора данных x Функция производит преобразование значений , в значения ,...
int goertzel_cmplx(complex_t *x, int n, int *ind, int k, complex_t *y)
Алгоритм Гёрцеля для расчета отдельных спектральных отсчетов дискретного преобразования Фурье комплек...
int readbin(char *fn, void **x, int *pn, int *pm, int *dtype)
Считать данные из бинарного файла
Definition: readbin.c:318
int ellip_asn(double *w, int n, double k, double *u)
Обратная эллиптическая функция Якоби вещественного аргумента
Definition: ellip_asn.c:106
int linspace(double x0, double x1, int n, int type, double *x)
Функция заполняет массив линейно-нарастающими, равноотстоящими значениями от x0 до x1
Definition: linspace.c:169
int dft_cmplx(complex_t *x, int n, complex_t *y)
Дискретное преобразование Фурье комплексного сигнала.
Definition: dft_cmplx.c:161
int bessel_i0(double *x, int n, double *y)
Модифицированная функция Бесселя первого рода .
Definition: bessel_i0.c:116
int mean_cmplx(complex_t *x, int n, complex_t *m)
Выборочная оценка математического ожидания комплексного вектора x
Definition: mean_cmplx.c:108
int ellip_cd_cmplx(complex_t *u, int n, double k, complex_t *y)
Эллиптическая функция Якоби комплексного аргумента
int matrix_eye_cmplx(complex_t *a, int n, int m)
Генерирование единичной комплексной матрицы размерности n x m.
int psd_periodogram(double *x, int n, int win_type, double win_param, fft_t *pfft, double fs, int flag, double *ppsd, double *pfrq)
Непараметрическая оценка спектральной плотности мощности (СПМ) вещественного сигнала методом модифици...
int stat_std_cmplx(complex_t *x, int n, double *s)
Выборочная оценка стандартного отклонения комплексного вектора x
int asin_cmplx(complex_t *x, int n, complex_t *y)
Арксинус комплексного аргумента x.
Definition: asin_cmplx.c:138
int cos_cmplx(complex_t *x, int n, complex_t *y)
Косинус комплексного аргумента x.
Definition: cos_cmplx.c:136
int sinc(double *x, int n, double a, double *y)
Функция .
Definition: sinc.c:88
int ellip_acd_cmplx(complex_t *w, int n, double k, complex_t *u)
Обратная эллиптическая функция Якоби комплексного аргумента
int ellip_landen(double k, int n, double *y)
Расчет коэффициентов ряда полного эллиптического интеграла.
Definition: ellip_landen.c:175
int gnuplot_open(void **hplot)
Открыть пакет GNUPLOT.
Definition: gnuplot_open.c:103
int cheby2_ap_zp(int ord, double rs, complex_t *z, int *nz, complex_t *p, int *np)
Расчет массивов нулей и полюсов передаточной функции аналогового нормированного ФНЧ Чебышёва второго...
Definition: cheby2_ap_zp.c:216
int verif_cmplx(complex_t *x, complex_t *y, size_t n, double eps, double *err)
Верификация комплексных массивов
Definition: verif_cmplx.c:139
int dft(double *x, int n, complex_t *y)
Дискретное преобразование Фурье вещественного сигнала.
Definition: dft.c:161
int gnuplot_create(int argc, char *argv[], int w, int h, char *fn_png, void **hplot)
Создать график GNUPLOT.
int cheby2_ap(double rs, int ord, double *b, double *a)
Расчет передаточной характеристики аналогового нормированного ФНЧ Чебышёва второго рода.
Definition: cheby2_ap.c:182
int mean(double *x, int n, double *m)
Выборочная оценка математического ожидания вещественного вектора x
Definition: mean.c:105
int decimate_cmplx(complex_t *x, int n, int d, complex_t *y, int *cnt)
Децимация комплексного вектора данных
int matrix_mul(double *a, int na, int ma, double *b, int nb, int mb, double *c)
Произведение вещественных матриц.
Definition: matrix_mul.c:189
int randb2(double *x, int n, random_t *prnd)
Генерация бинарного биполярного [-1, 1] псевдослучайного вектора
Definition: randb2.c:116