annotate dsp/rateconversion/Decimator.h @ 298:255e431ae3d4

* Key detector: when returning key strengths, use the peak value of the three underlying chromagram correlations (from 36-bin chromagram) corresponding to each key, instead of the mean. Rationale: This is the same method as used when returning the key value, and it's nice to have the same results in both returned value and plot. The peak performed better than the sum with a simple test set of triads, so it seems reasonable to change the plot to match the key output rather than the other way around. * FFT: kiss_fftr returns only the non-conjugate bins, synthesise the rest rather than leaving them (perhaps dangerously) undefined. Fixes an uninitialised data error in chromagram that could cause garbage results from key detector. * Constant Q: remove precalculated values again, I reckon they're not proving such a good tradeoff.
author Chris Cannam <c.cannam@qmul.ac.uk>
date Fri, 05 Jun 2009 15:12:39 +0000
parents 9c403afdd9e9
children e5907ae6de17
rev   line source
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 QM DSP Library
c@225 4
c@225 5 Centre for Digital Music, Queen Mary, University of London.
c@225 6 This file copyright 2005-2006 Christian Landone.
c@225 7 All rights reserved.
c@225 8 */
c@225 9
c@225 10 #ifndef DECIMATOR_H
c@225 11 #define DECIMATOR_H
c@225 12
c@225 13 class Decimator
c@225 14 {
c@225 15 public:
c@247 16 void process( const double* src, double* dst );
c@280 17 void process( const float* src, float* dst );
c@225 18
c@279 19 /**
c@279 20 * Construct a Decimator to operate on input blocks of length
c@279 21 * inLength, with decimation factor decFactor. inLength should be
c@279 22 * a multiple of decFactor. Output blocks will be of length
c@279 23 * inLength / decFactor.
c@279 24 *
c@279 25 * decFactor must be a power of two. The highest supported factor
c@279 26 * is obtained through getHighestSupportedFactor(); for higher
c@279 27 * factors, you will need to chain more than one decimator.
c@279 28 */
c@225 29 Decimator( unsigned int inLength, unsigned int decFactor );
c@225 30 virtual ~Decimator();
c@225 31
c@247 32 int getFactor() const { return m_decFactor; }
c@247 33 static int getHighestSupportedFactor() { return 8; }
c@247 34
c@225 35 private:
c@225 36 void resetFilter();
c@225 37 void deInitialise();
c@225 38 void initialise( unsigned int inLength, unsigned int decFactor );
c@280 39 void doAntiAlias( const double* src, double* dst, unsigned int length );
c@280 40 void doAntiAlias( const float* src, double* dst, unsigned int length );
c@225 41
c@225 42 unsigned int m_inputLength;
c@225 43 unsigned int m_outputLength;
c@225 44 unsigned int m_decFactor;
c@225 45
c@225 46 double Input;
c@225 47 double Output ;
c@225 48
c@225 49 double o1,o2,o3,o4,o5,o6,o7;
c@225 50
c@225 51 double a[ 9 ];
c@225 52 double b[ 9 ];
c@225 53
c@225 54 double* decBuffer;
c@225 55 };
c@225 56
c@225 57 #endif //