Mercurial > hg > qm-dsp
comparison dsp/chromagram/Chromagram.cpp @ 51:114e833c07ac
* Do not calculate CQ sparse kernel when chromagram is constructed: only
when it's actually used
* Pre-calculate CQ sparse kernels in the sizes required for the default
configurations of some of our transforms
author | cannam |
---|---|
date | Thu, 04 Dec 2008 11:59:29 +0000 |
parents | ad645e404d0c |
children | 6cb2b3cd5356 |
comparison
equal
deleted
inserted
replaced
50:980b1a3b9cbe | 51:114e833c07ac |
---|---|
13 #include "maths/MathUtilities.h" | 13 #include "maths/MathUtilities.h" |
14 #include "Chromagram.h" | 14 #include "Chromagram.h" |
15 | 15 |
16 //---------------------------------------------------------------------------- | 16 //---------------------------------------------------------------------------- |
17 | 17 |
18 Chromagram::Chromagram( ChromaConfig Config ) | 18 Chromagram::Chromagram( ChromaConfig Config ) : |
19 m_skGenerated(false) | |
19 { | 20 { |
20 initialise( Config ); | 21 initialise( Config ); |
21 } | 22 } |
22 | 23 |
23 int Chromagram::initialise( ChromaConfig Config ) | 24 int Chromagram::initialise( ChromaConfig Config ) |
60 m_CQIm = new double[ m_uK ]; | 61 m_CQIm = new double[ m_uK ]; |
61 | 62 |
62 m_window = 0; | 63 m_window = 0; |
63 m_windowbuf = 0; | 64 m_windowbuf = 0; |
64 | 65 |
65 // Generate CQ Kernel | |
66 m_ConstantQ->sparsekernel(); | |
67 return 1; | 66 return 1; |
68 } | 67 } |
69 | 68 |
70 Chromagram::~Chromagram() | 69 Chromagram::~Chromagram() |
71 { | 70 { |
117 } | 116 } |
118 | 117 |
119 | 118 |
120 double* Chromagram::process( const double *data ) | 119 double* Chromagram::process( const double *data ) |
121 { | 120 { |
121 if (!m_skGenerated) { | |
122 // Generate CQ Kernel | |
123 m_ConstantQ->sparsekernel(); | |
124 m_skGenerated = true; | |
125 } | |
126 | |
122 if (!m_window) { | 127 if (!m_window) { |
123 m_window = new Window<double>(HammingWindow, m_frameSize); | 128 m_window = new Window<double>(HammingWindow, m_frameSize); |
124 m_windowbuf = new double[m_frameSize]; | 129 m_windowbuf = new double[m_frameSize]; |
125 } | 130 } |
126 | 131 |
135 return process(m_FFTRe, m_FFTIm); | 140 return process(m_FFTRe, m_FFTIm); |
136 } | 141 } |
137 | 142 |
138 double* Chromagram::process( const double *real, const double *imag ) | 143 double* Chromagram::process( const double *real, const double *imag ) |
139 { | 144 { |
145 if (!m_skGenerated) { | |
146 // Generate CQ Kernel | |
147 m_ConstantQ->sparsekernel(); | |
148 m_skGenerated = true; | |
149 } | |
150 | |
140 // initialise chromadata to 0 | 151 // initialise chromadata to 0 |
141 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0; | 152 for (unsigned i = 0; i < m_BPO; i++) m_chromadata[i] = 0; |
142 | 153 |
143 double cmax = 0.0; | 154 double cmax = 0.0; |
144 double cval = 0; | 155 double cval = 0; |