diff dsp/mfcc/MFCC.h @ 255:9edaa3ce62e8

* 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 Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 18 Jan 2008 13:24:12 +0000
parents c3600d3cfe5c
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;
 };