Mercurial > hg > qm-dsp
changeset 32:8bb764969d50
* Add windowing to Chromagram input
* Add window option to MFCC config
author | cannam |
---|---|
date | Fri, 18 Jan 2008 17:57:40 +0000 |
parents | dfe38135e4c7 |
children | 499d438b52ba |
files | dsp/chromagram/Chromagram.cpp dsp/chromagram/Chromagram.h dsp/chromagram/ConstantQ.cpp dsp/chromagram/ConstantQ.h dsp/mfcc/MFCC.cpp dsp/mfcc/MFCC.h dsp/rhythm/BeatSpectrum.h |
diffstat | 7 files changed, 37 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/dsp/chromagram/Chromagram.cpp Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/chromagram/Chromagram.cpp Fri Jan 18 17:57:40 2008 +0000 @@ -59,6 +59,9 @@ m_CQRe = new double[ m_uK ]; m_CQIm = new double[ m_uK ]; + m_window = 0; + m_windowbuf = 0; + // Generate CQ Kernel m_ConstantQ->sparsekernel(); return 1; @@ -71,6 +74,9 @@ int Chromagram::deInitialise() { + delete[] m_windowbuf; + delete m_window; + delete [] m_chromadata; delete m_FFT; @@ -111,15 +117,25 @@ } -double* Chromagram::process( double *data ) +double* Chromagram::process( const double *data ) { + if (!m_window) { + m_window = new Window<double>(HammingWindow, m_frameSize); + m_windowbuf = new double[m_frameSize]; + } + + for (int i = 0; i < m_frameSize; ++i) { + m_windowbuf[i] = data[i]; + } + m_window->cut(m_windowbuf); + // FFT of current frame - m_FFT->process( m_frameSize, 0, data, NULL, m_FFTRe, m_FFTIm ); + m_FFT->process(m_frameSize, 0, m_windowbuf, NULL, m_FFTRe, m_FFTIm); return process(m_FFTRe, m_FFTIm); } -double* Chromagram::process( double *real, double *imag ) +double* Chromagram::process( const double *real, const double *imag ) { // initialise chromadata to 0 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0;
--- a/dsp/chromagram/Chromagram.h Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/chromagram/Chromagram.h Fri Jan 18 17:57:40 2008 +0000 @@ -12,6 +12,7 @@ #define CHROMAGRAM_H #include "dsp/transforms/FFT.h" +#include "base/Window.h" #include "ConstantQ.h" struct ChromaConfig{ @@ -30,8 +31,8 @@ Chromagram( ChromaConfig Config ); ~Chromagram(); - double* process( double *data ); // time domain - double* process( double *real, double *imag ); // frequency domain + double* process( const double *data ); // time domain + double* process( const double *real, const double *imag ); // frequency domain void unityNormalise( double* src ); // Complex arithmetic @@ -45,6 +46,9 @@ private: int initialise( ChromaConfig Config ); int deInitialise(); + + Window<double> *m_window; + double *m_windowbuf; double* m_chromadata; double m_FMin;
--- a/dsp/chromagram/ConstantQ.cpp Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/chromagram/ConstantQ.cpp Fri Jan 18 17:57:40 2008 +0000 @@ -129,7 +129,7 @@ } //----------------------------------------------------------------------------- -double* ConstantQ::process( double* fftdata ) +double* ConstantQ::process( const double* fftdata ) { for (unsigned row=0; row<2*m_uK; row++) { @@ -188,7 +188,8 @@ delete [] m_CQdata; } -void ConstantQ::process(double *FFTRe, double* FFTIm, double *CQRe, double *CQIm) +void ConstantQ::process(const double *FFTRe, const double* FFTIm, + double *CQRe, double *CQIm) { for (unsigned row=0; row<m_uK; row++) {
--- a/dsp/chromagram/ConstantQ.h Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/chromagram/ConstantQ.h Fri Jan 18 17:57:40 2008 +0000 @@ -27,12 +27,13 @@ //public functions incl. sparsekernel so can keep out of loop in main public: - void process( double* FFTRe, double* FFTIm, double* CQRe, double* CQIm ); + void process( const double* FFTRe, const double* FFTIm, + double* CQRe, double* CQIm ); ConstantQ( CQConfig Config ); ~ConstantQ(); - double* process( double* FFTData ); + double* process( const double* FFTData ); void sparsekernel();
--- a/dsp/mfcc/MFCC.cpp Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/mfcc/MFCC.cpp Fri Jan 18 17:57:40 2008 +0000 @@ -141,7 +141,7 @@ } /* The analysis window */ - window = new Window<double>(HammingWindow, fftSize); + window = new Window<double>(config.window, fftSize); /* Allocate memory for the FFT */ imagIn = (double*)calloc(fftSize, sizeof(double));
--- a/dsp/mfcc/MFCC.h Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/mfcc/MFCC.h Fri Jan 18 17:57:40 2008 +0000 @@ -19,8 +19,10 @@ int nceps; double logpower; bool want_c0; + WindowType window; MFCCConfig(int _FS) : - FS(_FS), fftsize(2048), nceps(19), logpower(1.0), want_c0(true) { } + FS(_FS), fftsize(2048), nceps(19), + logpower(1.0), want_c0(true), window(HammingWindow) { } }; class MFCC
--- a/dsp/rhythm/BeatSpectrum.h Fri Jan 18 14:40:20 2008 +0000 +++ b/dsp/rhythm/BeatSpectrum.h Fri Jan 18 17:57:40 2008 +0000 @@ -23,8 +23,8 @@ class BeatSpectrum { public: - BeatSpectrum(); - ~BeatSpectrum(); + BeatSpectrum() { } + ~BeatSpectrum() { } std::vector<double> process(const std::vector<std::vector<double> > &inmatrix);