source: src/temporal/filter.h @ e5e693e

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

src/temporal/filter.h: 80 characters maximum per line

  • Property mode set to 100644
File size: 4.2 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/** create new filter object
134
135  This function creates a new ::aubio_filter_t object, given an order
136  and a specific number of channels.
137
138  \param samplerate signal sampling rate
139  \param order order of the filter (number of coefficients)
140  \param channels number of channels to allocate
141
142  \return the newly created filter object
143
144*/
145aubio_filter_t *new_aubio_filter (uint_t samplerate, uint_t order,
146    uint_t channels);
147
148/** delete a filter object
149 
150  \param f filter object to delete
151
152*/
153void del_aubio_filter (aubio_filter_t * f);
154
155#ifdef __cplusplus
156}
157#endif
158
159#endif /*FILTER_H*/
Note: See TracBrowser for help on using the repository browser.