source: src/temporal/filter.h @ c9b99fd

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

src/temporal: switch to mono

  • Property mode set to 100644
File size: 4.5 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#ifndef FILTER_H
22#define FILTER_H
23
24/** \file
25
26  Digital filter
27
28  This object stores a digital filter of order \f$n\f$.
29  It contains the following data:
30    - \f$ n*1 b_i \f$ feedforward coefficients
31    - \f$ n*1 a_i \f$ feedback coefficients
32    - \f$ n*c x_i \f$ input signal
33    - \f$ n*c y_i \f$ output signal
34
35  For convenience, the samplerate of the input signal is also stored in the
36  object.
37
38  Feedforward and feedback parameters can be modified using
39  aubio_filter_get_feedback() and aubio_filter_get_feedforward().
40
41  The function aubio_filter_do_outplace() computes the following output signal
42  \f$ y[n] \f$ from the input signal \f$ x[n] \f$:
43 
44  \f{eqnarray*}{
45     y[n] = b_0 x[n] & + & b_1 x[n-1] + b_2 x[n-2] + ... + b_P x[n-P] \\
46                     & - & a_1 y[n-1] - a_2 y[n-2] - ... - a_P y[n-P] \\
47  \f}
48
49  The function aubio_filter_do() executes the same computation but modifies
50  directly the input signal (in-place).
51
52  The function aubio_filter_do_filtfilt() version runs the filter twice, first
53  forward then backward, to compensate with the phase shifting of the forward
54  operation.
55
56  Some convenience functions are provided:
57    - new_aubio_filter_a_weighting() and aubio_filter_set_a_weighting(),
58    - new_aubio_filter_c_weighting() and aubio_filter_set_c_weighting().
59    - new_aubio_filter_biquad() and aubio_filter_set_biquad().
60 
61*/
62
63#ifdef __cplusplus
64extern "C" {
65#endif
66
67/** Digital filter
68
69*/
70typedef struct _aubio_filter_t aubio_filter_t;
71
72/** filter input vector (in-place)
73
74  \param f filter object as returned by new_aubio_filter()
75  \param in input vector to filter
76
77*/
78void aubio_filter_do (aubio_filter_t * f, fvec_t * in);
79
80/** filter input vector (out-of-place)
81
82  \param f filter object as returned by new_aubio_filter()
83  \param in input vector to filter
84  \param out output vector to store filtered input
85
86*/
87void aubio_filter_do_outplace (aubio_filter_t * f, fvec_t * in, fvec_t * out);
88
89/** filter input vector forward and backward
90
91  \param f ::aubio_filter_t object as returned by new_aubio_filter()
92  \param in ::fvec_t input vector to filter
93  \param tmp memory space to use for computation
94
95*/
96void aubio_filter_do_filtfilt (aubio_filter_t * f, fvec_t * in, fvec_t * tmp);
97
98/** returns a pointer to feedback coefficients \f$ a_i \f$
99
100  \param f filter object to get parameters from
101
102  \return a pointer to the \f$ a_0 ... a_i ... a_P \f$ coefficients
103
104*/
105lvec_t *aubio_filter_get_feedback (aubio_filter_t * f);
106
107/** returns a pointer to feedforward coefficients \f$ b_i \f$
108
109  \param f filter object to get coefficients from
110
111  \return a pointer to the \f$ b_0 ... b_i ... b_P \f$ coefficients
112
113*/
114lvec_t *aubio_filter_get_feedforward (aubio_filter_t * f);
115
116/** get order of the filter
117
118  \param f filter to get order from
119
120  \return the order of the filter
121
122*/
123uint_t aubio_filter_get_order (aubio_filter_t * f);
124
125/** get sampling rate of the filter
126
127  \param f filter to get sampling rate from
128
129  \return the sampling rate of the filter, in Hz
130
131*/
132uint_t aubio_filter_get_samplerate (aubio_filter_t * f);
133
134/** get sampling rate of the filter
135
136  \param f filter to get sampling rate from
137  \param samplerate sample rate to set the filter to
138
139  \return the sampling rate of the filter, in Hz
140
141*/
142uint_t aubio_filter_set_samplerate (aubio_filter_t * f, uint_t samplerate);
143
144/** reset filter memory
145
146  \param f filter object as returned by new_aubio_filter()
147
148*/
149void aubio_filter_do_reset (aubio_filter_t * f);
150
151/** create new filter object
152
153  This function creates a new ::aubio_filter_t object, given the order of the
154  filter.
155
156  \param order order of the filter (number of coefficients)
157
158  \return the newly created filter object
159
160*/
161aubio_filter_t *new_aubio_filter (uint_t order);
162
163/** delete a filter object
164 
165  \param f filter object to delete
166
167*/
168void del_aubio_filter (aubio_filter_t * f);
169
170#ifdef __cplusplus
171}
172#endif
173
174#endif /*FILTER_H*/
Note: See TracBrowser for help on using the repository browser.