source: src/mathutils.h @ 7351545

feature/autosinkfeature/cnnfeature/cnn_orgfeature/constantqfeature/crepefeature/crepe_orgfeature/pitchshiftfeature/pydocstringsfeature/timestretchfix/ffmpeg5pitchshiftsamplertimestretchyinfft+
Last change on this file since 7351545 was 1a74ac3, checked in by Paul Brossier <piem@piem.org>, 14 years ago

src/mathutils.c: fix aubio_db_spl, thanks to Eric, closes #15

  • Property mode set to 100644
File size: 6.8 KB
Line 
1/*
2  Copyright (C) 2003-2009 Paul Brossier <piem@aubio.org>
3
4  This file is part of aubio.
5
6  aubio 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  aubio 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 aubio.  If not, see <http://www.gnu.org/licenses/>.
18
19*/
20
21/** @file
22 *  various math functions
23 */
24
25#ifndef MATHUTILS_H
26#define MATHUTILS_H
27
28#include "fvec.h"
29#include "musicutils.h"
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35/** compute the mean of a vector
36
37  \param s vector to compute mean from
38
39  \return the mean of v
40
41*/
42smpl_t fvec_mean (fvec_t * s);
43
44/** find the max of a vector
45
46  \param s vector to get the max from
47
48  \return the value of the minimum of v
49
50*/
51smpl_t fvec_max (fvec_t * s);
52
53/** find the min of a vector
54
55  \param s vector to get the min from
56
57  \return the value of the maximum of v
58
59*/
60smpl_t fvec_min (fvec_t * s);
61
62/** find the index of the min of a vector
63
64  \param s vector to get the index from
65
66  \return the index of the minimum element of v
67
68*/
69uint_t fvec_min_elem (fvec_t * s);
70
71/** find the index of the max of a vector
72
73  \param s vector to get the index from
74
75  \return the index of the maximum element of v
76
77*/
78uint_t fvec_max_elem (fvec_t * s);
79
80/** swap the left and right halves of a vector
81 
82  This function swaps the left part of the signal with the right part of the
83signal. Therefore
84
85  \f$ a[0], a[1], ..., a[\frac{N}{2}], a[\frac{N}{2}+1], ..., a[N-1], a[N] \f$
86 
87  becomes
88 
89  \f$ a[\frac{N}{2}+1], ..., a[N-1], a[N], a[0], a[1], ..., a[\frac{N}{2}] \f$
90
91  This operation, known as 'fftshift' in the Matlab Signal Processing Toolbox,
92can be used before computing the FFT to simplify the phase relationship of the
93resulting spectrum. See Amalia de Götzen's paper referred to above.
94 
95*/
96void fvec_shift (fvec_t * v);
97
98/** compute the sum of all elements of a vector
99
100  \param v vector to compute the sum of
101
102  \return the sum of v
103
104*/
105smpl_t fvec_sum (fvec_t * v);
106
107/** compute the energy of a vector
108
109  This function compute the sum of the squared elements of a vector, normalised
110  by its length.
111 
112  \param v vector to get the energy from
113
114  \return the energy of v
115 
116*/
117smpl_t fvec_local_energy (fvec_t * v);
118
119/** compute the High Frequency Content of a vector
120
121  The High Frequency Content is defined as \f$ \sum_0^{N-1} (k+1) v[k] \f$.
122 
123  \param v vector to get the energy from
124
125  \return the HFC of v
126 
127*/
128smpl_t fvec_local_hfc (fvec_t * v);
129
130/** computes the p-norm of a vector
131 
132  Computes the p-norm of a vector for \f$ p = \alpha \f$
133
134  \f$ L^p = ||x||_p = (|x_1|^p + |x_2|^p + ... + |x_n|^p ) ^ \frac{1}{p} \f$
135 
136  If p = 1, the result is the Manhattan distance.
137
138  If p = 2, the result is the Euclidean distance.
139
140  As p tends towards large values, \f$ L^p \f$ tends towards the maximum of the
141input vector.
142
143  References:
144 
145    - <a href="http://en.wikipedia.org/wiki/Lp_space">\f$L^p\f$ space</a> on
146  Wikipedia
147
148  \param v vector to compute norm from
149  \param p order of the computed norm
150
151  \return the p-norm of v
152 
153*/
154smpl_t fvec_alpha_norm (fvec_t * v, smpl_t p);
155
156/**  alpha normalisation
157
158  This function divides all elements of a vector by the p-norm as computed by
159fvec_alpha_norm().
160
161  \param v vector to compute norm from
162  \param p order of the computed norm
163
164*/
165void fvec_alpha_normalise (fvec_t * v, smpl_t p);
166
167/** add a constant to each elements of a vector
168
169  \param v vector to add constant to
170  \param c constant to add to v
171
172*/
173void fvec_add (fvec_t * v, smpl_t c);
174
175/** remove the minimum value of the vector to each elements
176 
177  \param v vector to remove minimum from
178
179*/
180void fvec_min_removal (fvec_t * v);
181
182/** compute moving median theshold of a vector
183
184  This function computes the moving median threshold value of at the given
185position of a vector, taking the median amongs post elements before and up to
186pre elements after pos.
187 
188  \param v input vector
189  \param tmp temporary vector of length post+1+pre
190  \param post length of causal part to take before pos
191  \param pre length of anti-causal part to take after pos
192  \param pos index to compute threshold for
193
194  \return moving median threshold value
195
196*/
197smpl_t fvec_moving_thres (fvec_t * v, fvec_t * tmp, uint_t post, uint_t pre,
198    uint_t pos);
199
200/** apply adaptive threshold to a vector
201
202  For each points at position p of an input vector, this function remove the
203moving median threshold computed at p.
204
205  \param v input vector
206  \param tmp temporary vector of length post+1+pre
207  \param post length of causal part to take before pos
208  \param pre length of anti-causal part to take after pos
209
210*/
211void fvec_adapt_thres (fvec_t * v, fvec_t * tmp, uint_t post, uint_t pre);
212
213/** returns the median of a vector
214
215  The QuickSelect routine is based on the algorithm described in "Numerical
216recipes in C", Second Edition, Cambridge University Press, 1992, Section 8.5,
217ISBN 0-521-43108-5
218
219  This implementation of the QuickSelect routine is based on Nicolas
220Devillard's implementation, available at http://ndevilla.free.fr/median/median/
221and in the Public Domain.
222
223  \param v vector to get median from
224
225  \return the median of v
226 
227*/
228smpl_t fvec_median (fvec_t * v);
229
230/** finds exact peak index by quadratic interpolation*/
231smpl_t fvec_quadint (fvec_t * x, uint_t pos);
232
233/** Quadratic interpolation using Lagrange polynomial.
234 
235  Inspired from ``Comparison of interpolation algorithms in real-time sound
236processing'', Vladimir Arnost,
237 
238  \param s0,s1,s2 are 3 consecutive samples of a curve
239  \param pf is the floating point index [0;2]
240 
241  \return s0 + (pf/2.)*((pf-3.)*s0-2.*(pf-2.)*s1+(pf-1.)*s2);
242
243*/
244smpl_t aubio_quadfrac (smpl_t s0, smpl_t s1, smpl_t s2, smpl_t pf);
245
246/** return 1 if v[p] is a peak and positive, 0 otherwise
247
248  This function returns 1 if a peak is found at index p in the vector v. The
249peak is defined as follows:
250
251  - v[p] is positive
252  - v[p-1] < v[p]
253  - v[p] > v[p+1]
254
255  \param v input vector
256  \param p position of supposed for peak
257
258  \return 1 if a peak is found, 0 otherwise
259
260*/
261uint_t fvec_peakpick (fvec_t * v, uint_t p);
262
263/** return 1 if a is a power of 2, 0 otherwise */
264uint_t aubio_is_power_of_two(uint_t a);
265
266/** return the next power of power of 2 greater than a */
267uint_t aubio_next_power_of_two(uint_t a);
268
269/** compute normalised autocorrelation function
270
271  \param input vector to compute autocorrelation from
272  \param output vector to store autocorrelation function to
273
274*/
275void aubio_autocorr (fvec_t * input, fvec_t * output);
276
277#ifdef __cplusplus
278}
279#endif
280
281#endif
282
Note: See TracBrowser for help on using the repository browser.