source: src/temporal/filter.h @ b849106

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

src/spectral/filter.c, src/temporal/filterbank_mel.c: move samplerate to the end

  • 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$ for \f$c\f$ channels.
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 
60*/
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66/** Digital filter
67
68*/
69typedef struct _aubio_filter_t aubio_filter_t;
70
71/** filter input vector (in-place)
72
73  \param f filter object as returned by new_aubio_filter()
74  \param in input vector to filter
75
76*/
77void aubio_filter_do (aubio_filter_t * f, fvec_t * in);
78
79/** filter input vector (out-of-place)
80
81  \param f filter object as returned by new_aubio_filter()
82  \param in input vector to filter
83  \param out output vector to store filtered input
84
85*/
86void aubio_filter_do_outplace (aubio_filter_t * f, fvec_t * in, fvec_t * out);
87
88/** filter input vector forward and backward
89
90  \param f ::aubio_filter_t object as returned by new_aubio_filter()
91  \param in ::fvec_t input vector to filter
92  \param tmp memory space to use for computation
93
94*/
95void aubio_filter_do_filtfilt (aubio_filter_t * f, fvec_t * in, fvec_t * tmp);
96
97/** returns a pointer to feedback coefficients \f$ a_i \f$
98
99  \param f filter object to get parameters from
100
101  \return a pointer to the \f$ a_0 ... a_i ... a_P \f$ coefficients
102
103*/
104lvec_t *aubio_filter_get_feedback (aubio_filter_t * f);
105
106/** returns a pointer to feedforward coefficients \f$ b_i \f$
107
108  \param f filter object to get coefficients from
109
110  \return a pointer to the \f$ b_0 ... b_i ... b_P \f$ coefficients
111
112*/
113lvec_t *aubio_filter_get_feedforward (aubio_filter_t * f);
114
115/** get order of the filter
116
117  \param f filter to get order from
118
119  \return the order of the filter
120
121*/
122uint_t aubio_filter_get_order (aubio_filter_t * f);
123
124/** get sampling rate of the filter
125
126  \param f filter to get sampling rate from
127
128  \return the sampling rate of the filter, in Hz
129
130*/
131uint_t aubio_filter_get_samplerate (aubio_filter_t * f);
132
133/** get sampling rate of the filter
134
135  \param f filter to get sampling rate from
136  \param samplerate sample rate to set the filter to
137
138  \return the sampling rate of the filter, in Hz
139
140*/
141uint_t aubio_filter_set_samplerate (aubio_filter_t * f, uint_t samplerate);
142
143/** create new filter object
144
145  This function creates a new ::aubio_filter_t object, given an order
146  and a specific number of channels.
147
148  \param samplerate signal sampling rate
149  \param order order of the filter (number of coefficients)
150  \param channels number of channels to allocate
151
152  \return the newly created filter object
153
154*/
155aubio_filter_t *new_aubio_filter (uint_t order, uint_t channels);
156
157/** delete a filter object
158 
159  \param f filter object to delete
160
161*/
162void del_aubio_filter (aubio_filter_t * f);
163
164#ifdef __cplusplus
165}
166#endif
167
168#endif /*FILTER_H*/
Note: See TracBrowser for help on using the repository browser.