diff options
Diffstat (limited to 'libs/qm-dsp/dsp/chromagram/ConstantQ.h')
-rw-r--r-- | libs/qm-dsp/dsp/chromagram/ConstantQ.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/libs/qm-dsp/dsp/chromagram/ConstantQ.h b/libs/qm-dsp/dsp/chromagram/ConstantQ.h new file mode 100644 index 0000000000..c06f60a9d0 --- /dev/null +++ b/libs/qm-dsp/dsp/chromagram/ConstantQ.h @@ -0,0 +1,84 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + QM DSP Library + + Centre for Digital Music, Queen Mary, University of London. + This file 2005-2006 Christian Landone. + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. See the file + COPYING included with this distribution for more information. +*/ + +#ifndef CONSTANTQ_H +#define CONSTANTQ_H + +#include <vector> +#include "maths/MathAliases.h" +#include "maths/MathUtilities.h" + +struct CQConfig{ + unsigned int FS; // samplerate + double min; // minimum frequency + double max; // maximum frequency + unsigned int BPO; // bins per octave + double CQThresh; // threshold +}; + +class ConstantQ { + +//public functions incl. sparsekernel so can keep out of loop in main +public: + void process( const double* FFTRe, const double* FFTIm, + double* CQRe, double* CQIm ); + + ConstantQ( CQConfig Config ); + ~ConstantQ(); + + double* process( const double* FFTData ); + + void sparsekernel(); + + double hamming(int len, int n) { + double out = 0.54 - 0.46*cos(2*PI*n/len); + return(out); + } + + int getnumwin() { return m_numWin;} + double getQ() { return m_dQ;} + int getK() {return m_uK ;} + int getfftlength() { return m_FFTLength;} + int gethop() { return m_hop;} + +private: + void initialise( CQConfig Config ); + void deInitialise(); + + double* m_CQdata; + unsigned int m_FS; + double m_FMin; + double m_FMax; + double m_dQ; + double m_CQThresh; + unsigned int m_numWin; + unsigned int m_hop; + unsigned int m_BPO; + unsigned int m_FFTLength; + unsigned int m_uK; + + struct SparseKernel { + std::vector<unsigned> is; + std::vector<unsigned> js; + std::vector<double> imag; + std::vector<double> real; + }; + + SparseKernel *m_sparseKernel; +}; + + +#endif//CONSTANTQ_H + |