move libc aliases from mathutils.h to to aubio_priv.h
[aubio.git] / src / biquad.h
1 /*
2          Copyright (C) 2003 Paul Brossier
3
4          This program is free software; you can redistribute it and/or modify
5          it under the terms of the GNU General Public License as published by
6          the Free Software Foundation; either version 2 of the License, or
7          (at your option) any later version.
8
9          This program is distributed in the hope that it will be useful,
10          but WITHOUT ANY WARRANTY; without even the implied warranty of
11          MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12          GNU General Public License for more details.
13
14          You should have received a copy of the GNU General Public License
15          along with this program; if not, write to the Free Software
16          Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 #ifndef BIQUAD_H
21 #define BIQUAD_H
22
23 /** \file 
24
25   Second order Infinite Impulse Response filter
26
27   This file implements a normalised biquad filter (second order IIR):
28  
29   \f$ y[n] = b_1 x[n] + b_2 x[n-1] + b_3 x[n-2] - a_2 y[n-1] - a_3 y[n-2] \f$
30
31   The filtfilt version runs the filter twice, forward and backward, to
32   compensate the phase shifting of the forward operation.
33
34 */
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 /** biquad filter object */
41 typedef struct _aubio_biquad_t aubio_biquad_t;
42
43 /** filter input vector
44
45   \param b biquad object as returned by new_aubio_biquad
46   \param in input vector to filter
47
48 */
49 void aubio_biquad_do(aubio_biquad_t * b, fvec_t * in);
50 /** filter input vector forward and backward
51
52   \param b biquad object as returned by new_aubio_biquad
53   \param in input vector to filter
54   \param tmp memory space to use for computation
55
56 */
57 void aubio_biquad_do_filtfilt(aubio_biquad_t * b, fvec_t * in, fvec_t * tmp);
58 /** create new biquad filter
59
60   \param b1 forward filter coefficient
61   \param b2 forward filter coefficient
62   \param b3 forward filter coefficient
63   \param a2 feedback filter coefficient
64   \param a3 feedback filter coefficient
65
66 */
67 aubio_biquad_t * new_aubio_biquad(lsmp_t b1, lsmp_t b2, lsmp_t b3, lsmp_t a2, lsmp_t a3);
68
69 /** delete biquad filter 
70  
71   \param b biquad object to delete 
72
73 */
74 void del_aubio_biquad(aubio_biquad_t * b);
75
76 #ifdef __cplusplus
77 }
78 #endif
79
80 #endif /*BIQUAD_H*/