Mercurial > hg > constant-q-cpp
changeset 176:5b1a1bbd6e7f
Make decimator quality selectable
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Tue, 28 Apr 2015 13:53:53 +0100 |
parents | aa57e80b6af8 |
children | 7d4f4c51a4ad |
files | cq/CQParameters.h src/ConstantQ.cpp src/dsp/Resampler.cpp |
diffstat | 3 files changed, 25 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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;
--- 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;