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
|
cannam@489
|
16 #ifndef QM_DSP_CONSTANTQ_H
|
cannam@489
|
17 #define QM_DSP_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
|
cannam@483
|
31 class ConstantQ
|
cannam@483
|
32 {
|
c@225
|
33 public:
|
cannam@495
|
34 ConstantQ(CQConfig config);
|
c@225
|
35 ~ConstantQ();
|
c@225
|
36
|
cannam@495
|
37 void process(const double* FFTRe, const double* FFTIm,
|
cannam@495
|
38 double* CQRe, double* CQIm);
|
cannam@495
|
39
|
cannam@495
|
40 double* process(const double* FFTData);
|
c@225
|
41
|
c@225
|
42 void sparsekernel();
|
c@225
|
43
|
cannam@495
|
44 double getQ() { return m_dQ; }
|
cannam@495
|
45 int getK() { return m_uK; }
|
cannam@495
|
46 int getFFTLength() { return m_FFTLength; }
|
cannam@495
|
47 int getHop() { return m_hop; }
|
c@225
|
48
|
c@225
|
49 private:
|
cannam@495
|
50 void initialise(CQConfig config);
|
c@225
|
51 void deInitialise();
|
cannam@483
|
52
|
c@225
|
53 double* m_CQdata;
|
cannam@465
|
54 double m_FS;
|
c@225
|
55 double m_FMin;
|
c@225
|
56 double m_FMax;
|
c@225
|
57 double m_dQ;
|
c@225
|
58 double m_CQThresh;
|
cannam@495
|
59 int m_hop;
|
cannam@495
|
60 int m_BPO;
|
cannam@495
|
61 int m_FFTLength;
|
cannam@495
|
62 int m_uK;
|
c@276
|
63
|
c@276
|
64 struct SparseKernel {
|
cannam@495
|
65 std::vector<int> is;
|
cannam@495
|
66 std::vector<int> js;
|
c@276
|
67 std::vector<double> imag;
|
c@276
|
68 std::vector<double> real;
|
c@276
|
69 };
|
c@276
|
70
|
c@276
|
71 SparseKernel *m_sparseKernel;
|
c@225
|
72 };
|
c@225
|
73
|
c@225
|
74
|
c@225
|
75 #endif//CONSTANTQ_H
|
c@225
|
76
|