Changeset f88a326 for src/fft.c


Ignore:
Timestamp:
May 28, 2005, 2:53:13 AM (19 years ago)
Author:
Paul Brossier <piem@altern.org>
Branches:
feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master, pitchshift, sampler, timestretch, yinfft+
Children:
946cad3
Parents:
f8714ee
Message:

added simplified mfft interface

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/fft.c

    rf8714ee rf88a326  
    7878void del_aubio_fft(aubio_fft_t * s) {
    7979        aubio_fft_free(s);
     80        AUBIO_FREE(s);
    8081}
    8182
     
    111112}
    112113
     114
     115/* new interface aubio_mfft */
     116struct _aubio_mfft_t {
     117        aubio_fft_t * fft;      /* fftw interface */
     118        fft_data_t ** spec;     /* complex spectral data */
     119        uint_t winsize;
     120        uint_t channels;
     121};
     122
     123aubio_mfft_t * new_aubio_mfft(uint_t winsize, uint_t channels){
     124        uint_t i;
     125        aubio_mfft_t * fft = AUBIO_NEW(aubio_mfft_t);
     126        fft->winsize       = winsize;
     127        fft->channels      = channels;
     128        fft->fft           = new_aubio_fft(winsize);
     129        fft->spec          = AUBIO_ARRAY(fft_data_t*,channels);
     130        for (i=0; i < channels; i++)
     131                fft->spec[i] = AUBIO_ARRAY(fft_data_t,winsize);
     132        return fft;
     133}
     134
     135/* execute stft */
     136void aubio_mfft_do (aubio_mfft_t * fft,fvec_t * in,cvec_t * fftgrain){
     137        uint_t i=0;
     138        /* execute stft */
     139        for (i=0; i < fft->channels; i++) {
     140                aubio_fft_do (fft->fft,in->data[i],fft->spec[i],fft->winsize);
     141                /* put norm and phase into fftgrain */
     142                aubio_fft_getnorm(fftgrain->norm[i], fft->spec[i], fft->winsize/2+1);
     143                aubio_fft_getphas(fftgrain->phas[i], fft->spec[i], fft->winsize/2+1);
     144        }
     145}
     146
     147/* execute inverse fourier transform */
     148void aubio_mfft_rdo(aubio_mfft_t * fft,cvec_t * fftgrain, fvec_t * out){
     149        uint_t i=0,j;
     150        for (i=0; i < fft->channels; i++) {
     151                for (j=0; j<fft->winsize/2+1; j++) {
     152                        fft->spec[i][j]  = CEXPC(I*unwrap2pi(fftgrain->phas[i][j]));
     153                        fft->spec[i][j] *= fftgrain->norm[i][j];
     154                }
     155                aubio_fft_rdo(fft->fft,fft->spec[i],out->data[i],fft->winsize);
     156        }
     157}
     158
     159void del_aubio_mfft(aubio_mfft_t * fft) {
     160        uint_t i;
     161        for (i=0; i < fft->channels; i++)
     162                AUBIO_FREE(fft->spec[i]);
     163        AUBIO_FREE(fft->spec);
     164        aubio_fft_free(fft->fft);
     165        AUBIO_FREE(fft);       
     166}
Note: See TracChangeset for help on using the changeset viewer.