Changeset e744416
 Timestamp:
 Nov 26, 2018, 5:21:30 PM (5 years ago)
 Branches:
 feature/autosink, feature/cnn, feature/cnn_org, feature/constantq, feature/crepe, feature/crepe_org, feature/pitchshift, feature/pydocstrings, feature/timestretch, fix/ffmpeg5, master
 Children:
 5ad5109
 Parents:
 d050d02
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

src/spectral/mfcc.c
rd050d02 re744416 32 32 #include "spectral/mfcc.h" 33 33 34 #ifdef HAVE_NOOPT35 #define HAVE_SLOW_DCT 136 #endif37 38 34 /** Internal structure for mfcc object */ 39 35 … … 46 42 aubio_filterbank_t *fb; /** filter bank */ 47 43 fvec_t *in_dct; /** input buffer for dct * [fb>n_filters] */ 48 #if defined(HAVE_SLOW_DCT) 49 fmat_t *dct_coeffs; /** DCT transform n_filters * n_coeffs */ 50 #else 51 aubio_dct_t *dct; 52 fvec_t *output; 53 #endif 44 aubio_dct_t *dct; /** dct object */ 45 fvec_t *output; /** dct output */ 54 46 smpl_t scale; 55 47 }; … … 63 55 /* allocate space for mfcc object */ 64 56 aubio_mfcc_t *mfcc = AUBIO_NEW (aubio_mfcc_t); 65 #if defined(HAVE_SLOW_DCT)66 smpl_t scaling;67 68 uint_t i, j;69 #endif70 57 71 58 mfcc>win_s = win_s; … … 85 72 mfcc>in_dct = new_fvec (n_filters); 86 73 87 #if defined(HAVE_SLOW_DCT)88 mfcc>dct_coeffs = new_fmat (n_coefs, n_filters);89 90 /* compute DCT transform dct_coeffs[j][i] as91 cos ( j * (i+.5) * PI / n_filters ) */92 scaling = 1. / SQRT (n_filters / 2.);93 for (i = 0; i < n_filters; i++) {94 for (j = 0; j < n_coefs; j++) {95 mfcc>dct_coeffs>data[j][i] =96 scaling * COS (j * (i + 0.5) * PI / n_filters);97 }98 mfcc>dct_coeffs>data[0][i] *= SQRT (2.) / 2.;99 }100 #else101 74 mfcc>dct = new_aubio_dct (n_filters); 102 75 mfcc>output = new_fvec (n_filters); 103 #endif104 76 105 77 mfcc>scale = 1.; … … 117 89 /* delete buffers */ 118 90 del_fvec (mf>in_dct); 119 #if defined(HAVE_SLOW_DCT)120 del_fmat (mf>dct_coeffs);121 #else122 91 del_aubio_dct (mf>dct); 123 92 del_fvec (mf>output); 124 #endif125 93 126 94 /* delete mfcc object */ … … 132 100 aubio_mfcc_do (aubio_mfcc_t * mf, const cvec_t * in, fvec_t * out) 133 101 { 134 #ifndef HAVE_SLOW_DCT135 102 fvec_t tmp; 136 #endif137 103 138 104 /* compute filterbank */ … … 145 111 146 112 /* compute mfccs */ 147 #if defined(HAVE_SLOW_DCT)148 fmat_vecmul(mf>dct_coeffs, mf>in_dct, out);149 #else150 113 aubio_dct_do(mf>dct, mf>in_dct, mf>output); 151 114 // copy only first n_coeffs elements … … 154 117 tmp.length = out>length; 155 118 fvec_copy(&tmp, out); 156 #endif157 119 158 120 return;
Note: See TracChangeset
for help on using the changeset viewer.