1 /*
2  * signalprocessing.h
3  *
4  * (c) 2018 Luka Marohnić
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 #ifndef __SIGNALPROCESSING_H
20 #define __SIGNALPROCESSING_H
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24 #include "first.h"
25 #include "gen.h"
26 #include "unary.h"
27 
28 #ifndef NO_NAMESPACE_GIAC
29 namespace giac {
30 #endif // ndef NO_NAMESPACE_GIAC
31 
32 enum filter_type {
33     _LOWPASS_FILTER,
34     _HIGHPASS_FILTER
35 };
36 
37 bool is_sound_data(const gen &g,int &nc,int &bd,int &sr,int &len);
38 vecteur decode_chdata(const vecteur &data,int bd,int start=0,int len=-1);
39 vecteur encode_chdata(const vecteur &data,int bd,double ratio,GIAC_CONTEXT);
40 gen filter(const vecteur &args,filter_type typ,GIAC_CONTEXT);
41 
42 gen _createwav(const gen &g,GIAC_CONTEXT);
43 gen _stereo2mono(const gen &g,GIAC_CONTEXT);
44 gen _plotwav(const gen &g,GIAC_CONTEXT);
45 gen _plotspectrum(const gen &g,GIAC_CONTEXT);
46 gen _channels(const gen &g,GIAC_CONTEXT);
47 gen _bit_depth(const gen &g,GIAC_CONTEXT);
48 gen _samplerate(const gen &g,GIAC_CONTEXT);
49 gen _duration(const gen &g,GIAC_CONTEXT);
50 gen _channel_data(const gen &g,GIAC_CONTEXT);
51 gen _cross_correlation(const gen &g,GIAC_CONTEXT);
52 gen _auto_correlation(const gen &g,GIAC_CONTEXT);
53 gen _lowpass(const gen &g,GIAC_CONTEXT);
54 gen _highpass(const gen &g,GIAC_CONTEXT);
55 gen _moving_average(const gen &g,GIAC_CONTEXT);
56 gen _resample(const gen &g,GIAC_CONTEXT);
57 gen _convolution(const gen &g,GIAC_CONTEXT);
58 gen _threshold(const gen &g,GIAC_CONTEXT);
59 gen _bartlett_hann_window(const gen &g,GIAC_CONTEXT);
60 gen _blackman_harris_window(const gen &g,GIAC_CONTEXT);
61 gen _blackman_window(const gen &g,GIAC_CONTEXT);
62 gen _bohman_window(const gen &g,GIAC_CONTEXT);
63 gen _cosine_window(const gen &g,GIAC_CONTEXT);
64 gen _gaussian_window(const gen &g,GIAC_CONTEXT);
65 gen _hamming_window(const gen &g,GIAC_CONTEXT);
66 gen _hann_poisson_window(const gen &g,GIAC_CONTEXT);
67 gen _hann_window(const gen &g,GIAC_CONTEXT);
68 gen _parzen_window(const gen &g,GIAC_CONTEXT);
69 gen _poisson_window(const gen &g,GIAC_CONTEXT);
70 gen _riemann_window(const gen &g,GIAC_CONTEXT);
71 gen _triangle_window(const gen &g,GIAC_CONTEXT);
72 gen _tukey_window(const gen &g,GIAC_CONTEXT);
73 gen _welch_window(const gen &g,GIAC_CONTEXT);
74 gen _fourier(const gen &g,GIAC_CONTEXT);
75 gen _ifourier(const gen &g,GIAC_CONTEXT);
76 gen _addtable(const gen &g,GIAC_CONTEXT);
77 gen _rect(const gen &g,GIAC_CONTEXT);
78 gen _boxcar(const gen &g,GIAC_CONTEXT);
79 gen _tri(const gen &g,GIAC_CONTEXT);
80 gen _sinc(const gen &g,GIAC_CONTEXT);
81 
82 extern const unary_function_ptr * const at_createwav;
83 extern const unary_function_ptr * const at_plotwav;
84 extern const unary_function_ptr * const at_plotspectrum;
85 extern const unary_function_ptr * const at_channels;
86 extern const unary_function_ptr * const at_samplerate;
87 extern const unary_function_ptr * const at_bit_depth;
88 extern const unary_function_ptr * const at_duration;
89 extern const unary_function_ptr * const at_channel_data;
90 extern const unary_function_ptr * const at_cross_correlation;
91 extern const unary_function_ptr * const at_auto_correlation;
92 extern const unary_function_ptr * const at_lowpass;
93 extern const unary_function_ptr * const at_highpass;
94 extern const unary_function_ptr * const at_convolution;
95 extern const unary_function_ptr * const at_threshold;
96 extern const unary_function_ptr * const at_bartlett_hann_window;
97 extern const unary_function_ptr * const at_blackman_harris_window;
98 extern const unary_function_ptr * const at_blackman_window;
99 extern const unary_function_ptr * const at_bohman_window;
100 extern const unary_function_ptr * const at_cosine_window;
101 extern const unary_function_ptr * const at_gaussian_window;
102 extern const unary_function_ptr * const at_hamming_window;
103 extern const unary_function_ptr * const at_hann_poisson_window;
104 extern const unary_function_ptr * const at_hann_window;
105 extern const unary_function_ptr * const at_parzen_window;
106 extern const unary_function_ptr * const at_poisson_window;
107 extern const unary_function_ptr * const at_riemann_window;
108 extern const unary_function_ptr * const at_triangle_window;
109 extern const unary_function_ptr * const at_tukey_window;
110 extern const unary_function_ptr * const at_welch_window;
111 extern const unary_function_ptr * const at_fourier;
112 extern const unary_function_ptr * const at_ifourier;
113 extern const unary_function_ptr * const at_addtable;
114 extern const unary_function_ptr * const at_rect;
115 extern const unary_function_ptr * const at_boxcar;
116 extern const unary_function_ptr * const at_tri;
117 extern const unary_function_ptr * const at_sinc;
118 
119 #ifndef NO_NAMESPACE_GIAC
120 } // namespace giac
121 #endif // ndef NO_NAMESPACE_GIAC
122 #endif // __SIGNALPROCESSING_H
123