cannam@26: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@25: cannam@26: /* cannam@26: QM DSP Library cannam@25: cannam@26: Centre for Digital Music, Queen Mary, University of London. cannam@26: This file copyright 2005 Nicolas Chetry, copyright 2008 QMUL. cannam@26: All rights reserved. cannam@26: */ cannam@25: cannam@26: #ifndef MFCC_H cannam@26: #define MFCC_H cannam@26: cannam@26: #include "base/Window.h" cannam@26: cannam@26: struct MFCCConfig { cannam@26: int FS; cannam@26: int fftsize; cannam@26: int nceps; cannam@26: bool want_c0; cannam@26: }; cannam@26: cannam@26: class MFCC cannam@26: { cannam@26: public: cannam@26: MFCC(MFCCConfig config); cannam@26: virtual ~MFCC(); cannam@26: cannam@26: int process(int length, double *inframe, double *outceps); cannam@26: cannam@26: int getfftlength() const { return fftSize; } cannam@26: cannam@26: private: cannam@26: /* Filter bank parameters */ cannam@26: double lowestFrequency; cannam@26: int linearFilters; cannam@26: double linearSpacing; cannam@26: int logFilters; cannam@26: double logSpacing; cannam@26: cannam@26: /* FFT length */ cannam@26: int fftSize; cannam@26: cannam@26: int totalFilters; cannam@26: cannam@26: /* Misc. */ cannam@26: int samplingRate; cannam@26: int nceps; cannam@26: cannam@26: /* MFCC vector */ cannam@26: double *ceps; cannam@26: cannam@26: double **mfccDCTMatrix; cannam@26: double **mfccFilterWeights; cannam@26: cannam@26: /* The analysis window */ cannam@26: Window *window; cannam@26: cannam@26: /* For the FFT */ cannam@26: double* imagIn; // always zero cannam@26: double* realOut; cannam@26: double* imagOut; cannam@26: cannam@26: /* Set if user want C0 */ cannam@26: int WANT_C0; cannam@26: }; cannam@26: cannam@25: cannam@25: #endif cannam@25: