aubio  0.4.0~beta1
 All Data Structures Files Functions Variables Typedefs Macros
fft.h
Go to the documentation of this file.
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 
23  Fast Fourier Transform
24 
25  \example src/spectral/test-fft.c
26 
27 */
28 
29 #ifndef FFT_H_
30 #define FFT_H_
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 /** FFT object
37 
38  This object computes forward and backward FFTs, using the complex type to
39  store the results. The phase vocoder or aubio_mfft_t objects should be
40  preferred to using directly aubio_fft_t. The FFT are computed using FFTW3
41  (although support for another library could be added).
42 
43 */
44 typedef struct _aubio_fft_t aubio_fft_t;
45 
46 /** create new FFT computation object
47 
48  \param size length of the FFT
49 
50 */
52 /** delete FFT object
53 
54  \param s fft object as returned by new_aubio_fft
55 
56 */
57 void del_aubio_fft(aubio_fft_t * s);
58 
59 /** compute forward FFT
60 
61  \param s fft object as returned by new_aubio_fft
62  \param input input signal
63  \param spectrum output spectrum
64 
65 */
66 void aubio_fft_do (aubio_fft_t *s, fvec_t * input, cvec_t * spectrum);
67 /** compute backward (inverse) FFT
68 
69  \param s fft object as returned by new_aubio_fft
70  \param spectrum input spectrum
71  \param output output signal
72 
73 */
74 void aubio_fft_rdo (aubio_fft_t *s, cvec_t * spectrum, fvec_t * output);
75 
76 /** compute forward FFT
77 
78  \param s fft object as returned by new_aubio_fft
79  \param input real input signal
80  \param compspec complex output fft real/imag
81 
82 */
83 void aubio_fft_do_complex (aubio_fft_t *s, fvec_t * input, fvec_t * compspec);
84 /** compute backward (inverse) FFT from real/imag
85 
86  \param s fft object as returned by new_aubio_fft
87  \param compspec real/imag input fft array
88  \param output real output array
89 
90 */
91 void aubio_fft_rdo_complex (aubio_fft_t *s, fvec_t * compspec, fvec_t * output);
92 
93 /** convert real/imag spectrum to norm/phas spectrum
94 
95  \param compspec real/imag input fft array
96  \param spectrum cvec norm/phas output array
97 
98 */
99 void aubio_fft_get_spectrum(fvec_t * compspec, cvec_t * spectrum);
100 /** convert real/imag spectrum to norm/phas spectrum
101 
102  \param compspec real/imag input fft array
103  \param spectrum cvec norm/phas output array
104 
105 */
106 void aubio_fft_get_realimag(cvec_t * spectrum, fvec_t * compspec);
107 
108 /** compute phas spectrum from real/imag parts
109 
110  \param compspec real/imag input fft array
111  \param spectrum cvec norm/phas output array
112 
113 */
114 void aubio_fft_get_phas(fvec_t * compspec, cvec_t * spectrum);
115 /** compute imaginary part from the norm/phas cvec
116 
117  \param spectrum norm/phas input array
118  \param compspec real/imag output fft array
119 
120 */
121 void aubio_fft_get_imag(cvec_t * spectrum, fvec_t * compspec);
122 
123 /** compute norm component from real/imag parts
124 
125  \param compspec real/imag input fft array
126  \param spectrum cvec norm/phas output array
127 
128 */
129 void aubio_fft_get_norm(fvec_t * compspec, cvec_t * spectrum);
130 /** compute real part from norm/phas components
131 
132  \param spectrum norm/phas input array
133  \param compspec real/imag output fft array
134 
135 */
136 void aubio_fft_get_real(cvec_t * spectrum, fvec_t * compspec);
137 
138 #ifdef __cplusplus
139 }
140 #endif
141 
142 #endif // FFT_H_