source: tests/src/test-fft.c @ 6427e6d

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

use local comments in test-fft.c

  • Property mode set to 100644
File size: 2.0 KB
Line 
1#include <stdlib.h>
2#include <math.h>
3#include <complex.h>
4#include <aubio.h>
5
6#define NEW_ARRAY(_t,_n)                (_t*)malloc((_n)*sizeof(_t))
7
8
9int main(){
10        uint_t i,j;
11        uint_t win_s      = 1024;                       // window size
12        uint_t channels   = 1;                          // number of channel
13        fvec_t * in       = new_fvec (win_s, channels); // input buffer
14        cvec_t * fftgrain = new_cvec (win_s, channels); // fft norm and phase
15        fvec_t * out      = new_fvec (win_s, channels); // output buffer
16 
17        // allocate fft and other memory space
18        aubio_fft_t * fft      = new_aubio_fft(win_s);    // fft interface
19        smpl_t * w             = NEW_ARRAY(smpl_t,win_s); // window
20        // complex spectral data
21        fft_data_t ** spec     = NEW_ARRAY(fft_data_t*,channels); 
22        for (i=0; i < channels; i++)
23                spec[i] = NEW_ARRAY(fft_data_t,win_s);
24        // initialize the window (see mathutils.c)
25        aubio_window(w,win_s,aubio_win_hanningz);
26 
27        // fill input with some data
28        in->data[0][win_s/2] = 1;
29 
30        // execute stft
31        for (i=0; i < channels; i++) {
32                aubio_fft_do (fft,in->data[i],spec[i],win_s);
33                // put norm and phase into fftgrain
34                aubio_fft_getnorm(fftgrain->norm[i], spec[i], win_s/2+1);
35                aubio_fft_getphas(fftgrain->phas[i], spec[i], win_s/2+1);
36        }
37 
38        // execute inverse fourier transform
39        for (i=0; i < channels; i++) {
40                for (j=0; j<win_s/2+1; j++) {
41                        spec[i][j]  = cexp(I*aubio_unwrap2pi(fftgrain->phas[i][j]));
42                        spec[i][j] *= fftgrain->norm[i][j];
43                }
44                aubio_fft_rdo(fft,spec[i],out->data[i],win_s);
45        }
46
47        del_fvec(in);
48        del_fvec(out);
49        del_cvec(fftgrain);
50        free(w);
51        del_aubio_fft(fft);
52        for (i=0; i < channels; i++)
53                free(spec[i]);
54        free(spec); 
55        aubio_cleanup();
56        return 0;
57}
Note: See TracBrowser for help on using the repository browser.