Mercurial > hg > qm-dsp
diff dsp/mfcc/MFCC.h @ 30:a251fb0de594
* Make MFCC able to accept already-FFT'd input, and simplify API a bit
* Add log power value to MFCC, restore windowing, and avoid some heap allocs
* In HMM, bail out of iteration if loglik hits NaN
author | cannam |
---|---|
date | Fri, 18 Jan 2008 13:24:12 +0000 |
parents | d096a79fa772 |
children | 8bb764969d50 |
line wrap: on
line diff
--- a/dsp/mfcc/MFCC.h Wed Jan 16 18:02:31 2008 +0000 +++ b/dsp/mfcc/MFCC.h Fri Jan 18 13:24:12 2008 +0000 @@ -17,7 +17,10 @@ int FS; int fftsize; int nceps; + double logpower; bool want_c0; + MFCCConfig(int _FS) : + FS(_FS), fftsize(2048), nceps(19), logpower(1.0), want_c0(true) { } }; class MFCC @@ -26,7 +29,20 @@ MFCC(MFCCConfig config); virtual ~MFCC(); - int process(int length, double *inframe, double *outceps); + /** + * Process time-domain input data. inframe must contain + * getfftlength() samples. outceps must contain space for nceps + * values, plus one if want_c0 is specified. + */ + int process(const double *inframe, double *outceps); + + /** + * Process time-domain input data. real and imag must contain + * getfftlength()/2+1 elements (i.e. the conjugate half of the FFT + * is not expected). outceps must contain space for nceps values, + * plus one if want_c0 is specified. + */ + int process(const double *real, const double *imag, double *outceps); int getfftlength() const { return fftSize; } @@ -42,6 +58,7 @@ int fftSize; int totalFilters; + double logPower; /* Misc. */ int samplingRate; @@ -57,10 +74,12 @@ Window<double> *window; /* For the FFT */ - double* imagIn; // always zero - double* realOut; - double* imagOut; - + double *imagIn; // always zero + double *realOut; + double *imagOut; + double *fftMag; + double *earMag; + /* Set if user want C0 */ int WANT_C0; };