annotate dsp/chromagram/ConstantQ.h @ 465:50a97c8d52ed

Apply fix from daschuer/mixxx:957aed58 : Use double precision for FS
author Chris Cannam <cannam@all-day-breakfast.com>
date Wed, 29 May 2019 13:55:26 +0100
parents d5014ab8b0e5
children fdaa63607c15
rev   line source
c@225 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
c@225 2
c@225 3 /*
c@225 4 QM DSP Library
c@225 5
c@225 6 Centre for Digital Music, Queen Mary, University of London.
c@309 7 This file 2005-2006 Christian Landone.
c@309 8
c@309 9 This program is free software; you can redistribute it and/or
c@309 10 modify it under the terms of the GNU General Public License as
c@309 11 published by the Free Software Foundation; either version 2 of the
c@309 12 License, or (at your option) any later version. See the file
c@309 13 COPYING included with this distribution for more information.
c@225 14 */
c@225 15
c@225 16 #ifndef CONSTANTQ_H
c@225 17 #define CONSTANTQ_H
c@225 18
c@225 19 #include <vector>
c@241 20 #include "maths/MathAliases.h"
c@241 21 #include "maths/MathUtilities.h"
c@225 22
cannam@465 23 struct CQConfig {
cannam@465 24 double FS; // samplerate
c@245 25 double min; // minimum frequency
c@245 26 double max; // maximum frequency
c@245 27 unsigned int BPO; // bins per octave
c@245 28 double CQThresh; // threshold
c@225 29 };
c@225 30
c@225 31 class ConstantQ {
c@225 32
c@225 33 //public functions incl. sparsekernel so can keep out of loop in main
c@225 34 public:
c@257 35 void process( const double* FFTRe, const double* FFTIm,
c@257 36 double* CQRe, double* CQIm );
c@225 37
c@225 38 ConstantQ( CQConfig Config );
c@225 39 ~ConstantQ();
c@225 40
c@257 41 double* process( const double* FFTData );
c@225 42
c@225 43 void sparsekernel();
c@225 44
c@225 45 double hamming(int len, int n) {
c@225 46 double out = 0.54 - 0.46*cos(2*PI*n/len);
c@225 47 return(out);
c@225 48 }
c@225 49
c@225 50 int getnumwin() { return m_numWin;}
c@225 51 double getQ() { return m_dQ;}
c@225 52 int getK() {return m_uK ;}
c@225 53 int getfftlength() { return m_FFTLength;}
c@225 54 int gethop() { return m_hop;}
c@225 55
c@225 56 private:
c@225 57 void initialise( CQConfig Config );
c@225 58 void deInitialise();
c@225 59
c@225 60 double* m_CQdata;
cannam@465 61 double m_FS;
c@225 62 double m_FMin;
c@225 63 double m_FMax;
c@225 64 double m_dQ;
c@225 65 double m_CQThresh;
c@225 66 unsigned int m_numWin;
c@225 67 unsigned int m_hop;
c@225 68 unsigned int m_BPO;
c@225 69 unsigned int m_FFTLength;
c@225 70 unsigned int m_uK;
c@276 71
c@276 72 struct SparseKernel {
c@276 73 std::vector<unsigned> is;
c@276 74 std::vector<unsigned> js;
c@276 75 std::vector<double> imag;
c@276 76 std::vector<double> real;
c@276 77 };
c@276 78
c@276 79 SparseKernel *m_sparseKernel;
c@225 80 };
c@225 81
c@225 82
c@225 83 #endif//CONSTANTQ_H
c@225 84