comparison dsp/chromagram/ConstantQ.cpp @ 20:8bdbda7fb893

* First cut at properly integrating the segmenter and making it work right
author cannam
date Wed, 09 Jan 2008 16:50:04 +0000
parents 07ac3de1e53b
children 2b74bd60c61f
comparison
equal deleted inserted replaced
19:d3a856b44c43 20:8bdbda7fb893
7 All rights reserved. 7 All rights reserved.
8 */ 8 */
9 9
10 #include "ConstantQ.h" 10 #include "ConstantQ.h"
11 #include "dsp/transforms/FFT.h" 11 #include "dsp/transforms/FFT.h"
12
13 #include <iostream>
12 14
13 //--------------------------------------------------------------------------- 15 //---------------------------------------------------------------------------
14 // nextpow2 returns the smallest integer n such that 2^n >= x. 16 // nextpow2 returns the smallest integer n such that 2^n >= x.
15 static double nextpow2(double x) { 17 static double nextpow2(double x) {
16 double y = ceil(log(x)/log(2.0)); 18 double y = ceil(log(x)/log(2.0));
166 m_CQThresh = Config.CQThresh;// ConstantQ threshold for kernel generation 168 m_CQThresh = Config.CQThresh;// ConstantQ threshold for kernel generation
167 169
168 m_dQ = 1/(pow(2,(1/(double)m_BPO))-1); // Work out Q value for Filter bank 170 m_dQ = 1/(pow(2,(1/(double)m_BPO))-1); // Work out Q value for Filter bank
169 m_uK = (unsigned int) ceil(m_BPO * log(m_FMax/m_FMin)/log(2.0)); // No. of constant Q bins 171 m_uK = (unsigned int) ceil(m_BPO * log(m_FMax/m_FMin)/log(2.0)); // No. of constant Q bins
170 172
173 std::cerr << "ConstantQ::initialise: rate = " << m_FS << ", fmin = " << m_FMin << ", fmax = " << m_FMax << ", bpo = " << m_BPO << ", K = " << m_uK << ", Q = " << m_dQ << std::endl;
174
171 // work out length of fft required for this constant Q Filter bank 175 // work out length of fft required for this constant Q Filter bank
172 m_FFTLength = (int) pow(2, nextpow2(ceil( m_dQ*m_FS/m_FMin ))); 176 m_FFTLength = (int) pow(2, nextpow2(ceil( m_dQ*m_FS/m_FMin )));
173 177
174 m_hop = m_FFTLength/8; // <------ hop size is window length divided by 32 178 m_hop = m_FFTLength/8; // <------ hop size is window length divided by 32
179
180 std::cerr << "ConstantQ::initialise: -> fft length = " << m_FFTLength << ", hop = " << m_hop << std::endl;
175 181
176 // allocate memory for cqdata 182 // allocate memory for cqdata
177 m_CQdata = new double [2*m_uK]; 183 m_CQdata = new double [2*m_uK];
178 } 184 }
179 185