# HG changeset patch # User Chris Cannam # Date 1430225633 -3600 # Node ID 5b1a1bbd6e7fc8934ec5c1e26e4fe61d8a8ddfa2 # Parent aa57e80b6af876365537a2d5a814e689b0cbb541 Make decimator quality selectable diff -r aa57e80b6af8 -r 5b1a1bbd6e7f cq/CQParameters.h --- a/cq/CQParameters.h Tue Apr 28 11:08:11 2015 +0100 +++ b/cq/CQParameters.h Tue Apr 28 13:53:53 2015 +0100 @@ -48,6 +48,11 @@ Hann, }; + enum DecimatorType { + BetterDecimator, + FasterDecimator + }; + /** * Construct a set of parameters with the given input signal * sample rate, frequency range, and number of bins per @@ -63,10 +68,11 @@ minFrequency(_minFrequency), maxFrequency(_maxFrequency), binsPerOctave(_binsPerOctave), - q(1.0), // Q scaling factor - atomHopFactor(0.25), // hop size of shortest temporal atom - threshold(0.0005), // sparsity threshold for resulting kernel - window(SqrtBlackmanHarris) // window shape + q(1.0), // Q scaling factor + atomHopFactor(0.25), // hop size of shortest temporal atom + threshold(0.0005), // sparsity threshold for resulting kernel + window(SqrtBlackmanHarris), // window shape + decimator(BetterDecimator) // decimator quality setting { } /** @@ -114,6 +120,11 @@ * Window shape to use for the Constant-Q kernel atoms. */ WindowType window; + + /** + * Quality setting for the sample rate decimator. + */ + DecimatorType decimator; }; #endif diff -r aa57e80b6af8 -r 5b1a1bbd6e7f src/ConstantQ.cpp --- a/src/ConstantQ.cpp Tue Apr 28 11:08:11 2015 +0100 +++ b/src/ConstantQ.cpp Tue Apr 28 13:53:53 2015 +0100 @@ -122,8 +122,15 @@ int factor = pow(2, i); - Resampler *r = new Resampler - (sourceRate, sourceRate / factor, 50, 0.05); + Resampler *r; + + if (m_inparams.decimator == CQParameters::BetterDecimator) { + r = new Resampler + (sourceRate, sourceRate / factor, 50, 0.05); + } else { + r = new Resampler + (sourceRate, sourceRate / factor, 25, 0.3); + } #ifdef DEBUG_CQ cerr << "forward: octave " << i << ": resample from " << sourceRate << " to " << sourceRate / factor << endl; diff -r aa57e80b6af8 -r 5b1a1bbd6e7f src/dsp/Resampler.cpp --- a/src/dsp/Resampler.cpp Tue Apr 28 11:08:11 2015 +0100 +++ b/src/dsp/Resampler.cpp Tue Apr 28 13:53:53 2015 +0100 @@ -318,9 +318,7 @@ int Resampler::process(const double *src, double *dst, int n) { - for (int i = 0; i < n; ++i) { - m_buffer.push_back(src[i]); - } + m_buffer.insert(m_buffer.end(), src, src + n); int maxout = int(ceil(double(n) * m_targetRate / m_sourceRate)); int outidx = 0;