annotate dsp/mfcc/MFCC.h @ 46:4f1870dbab2c

* Add lots of debug output
author cannam
date Thu, 24 Jul 2008 16:09:25 +0000
parents 8bb764969d50
children 6cb2b3cd5356
rev   line source
cannam@26 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
cannam@25 2
cannam@26 3 /*
cannam@26 4 QM DSP Library
cannam@25 5
cannam@26 6 Centre for Digital Music, Queen Mary, University of London.
cannam@26 7 This file copyright 2005 Nicolas Chetry, copyright 2008 QMUL.
cannam@26 8 All rights reserved.
cannam@26 9 */
cannam@25 10
cannam@26 11 #ifndef MFCC_H
cannam@26 12 #define MFCC_H
cannam@26 13
cannam@26 14 #include "base/Window.h"
cannam@26 15
cannam@26 16 struct MFCCConfig {
cannam@26 17 int FS;
cannam@26 18 int fftsize;
cannam@26 19 int nceps;
cannam@30 20 double logpower;
cannam@26 21 bool want_c0;
cannam@32 22 WindowType window;
cannam@30 23 MFCCConfig(int _FS) :
cannam@32 24 FS(_FS), fftsize(2048), nceps(19),
cannam@32 25 logpower(1.0), want_c0(true), window(HammingWindow) { }
cannam@26 26 };
cannam@26 27
cannam@26 28 class MFCC
cannam@26 29 {
cannam@26 30 public:
cannam@26 31 MFCC(MFCCConfig config);
cannam@26 32 virtual ~MFCC();
cannam@26 33
cannam@30 34 /**
cannam@30 35 * Process time-domain input data. inframe must contain
cannam@30 36 * getfftlength() samples. outceps must contain space for nceps
cannam@30 37 * values, plus one if want_c0 is specified.
cannam@30 38 */
cannam@30 39 int process(const double *inframe, double *outceps);
cannam@30 40
cannam@30 41 /**
cannam@30 42 * Process time-domain input data. real and imag must contain
cannam@30 43 * getfftlength()/2+1 elements (i.e. the conjugate half of the FFT
cannam@30 44 * is not expected). outceps must contain space for nceps values,
cannam@30 45 * plus one if want_c0 is specified.
cannam@30 46 */
cannam@30 47 int process(const double *real, const double *imag, double *outceps);
cannam@26 48
cannam@26 49 int getfftlength() const { return fftSize; }
cannam@26 50
cannam@26 51 private:
cannam@26 52 /* Filter bank parameters */
cannam@26 53 double lowestFrequency;
cannam@26 54 int linearFilters;
cannam@26 55 double linearSpacing;
cannam@26 56 int logFilters;
cannam@26 57 double logSpacing;
cannam@26 58
cannam@26 59 /* FFT length */
cannam@26 60 int fftSize;
cannam@26 61
cannam@26 62 int totalFilters;
cannam@30 63 double logPower;
cannam@26 64
cannam@26 65 /* Misc. */
cannam@26 66 int samplingRate;
cannam@26 67 int nceps;
cannam@26 68
cannam@26 69 /* MFCC vector */
cannam@26 70 double *ceps;
cannam@26 71
cannam@26 72 double **mfccDCTMatrix;
cannam@26 73 double **mfccFilterWeights;
cannam@26 74
cannam@26 75 /* The analysis window */
cannam@26 76 Window<double> *window;
cannam@26 77
cannam@26 78 /* For the FFT */
cannam@30 79 double *imagIn; // always zero
cannam@30 80 double *realOut;
cannam@30 81 double *imagOut;
cannam@30 82 double *fftMag;
cannam@30 83 double *earMag;
cannam@30 84
cannam@26 85 /* Set if user want C0 */
cannam@26 86 int WANT_C0;
cannam@26 87 };
cannam@26 88
cannam@25 89
cannam@25 90 #endif
cannam@25 91