cannam@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@0: /* cannam@0: QM DSP Library cannam@0: cannam@0: Centre for Digital Music, Queen Mary, University of London. cannam@0: This file copyright 2005-2006 Christian Landone. cannam@0: All rights reserved. cannam@0: */ cannam@0: cannam@0: #ifndef DECIMATOR_H cannam@0: #define DECIMATOR_H cannam@0: cannam@0: class Decimator cannam@0: { cannam@0: public: cannam@22: void process( const double* src, double* dst ); cannam@22: void doAntiAlias( const double* src, double* dst, unsigned int length ); cannam@0: cannam@54: /** cannam@54: * Construct a Decimator to operate on input blocks of length cannam@54: * inLength, with decimation factor decFactor. inLength should be cannam@54: * a multiple of decFactor. Output blocks will be of length cannam@54: * inLength / decFactor. cannam@54: * cannam@54: * decFactor must be a power of two. The highest supported factor cannam@54: * is obtained through getHighestSupportedFactor(); for higher cannam@54: * factors, you will need to chain more than one decimator. cannam@54: */ cannam@0: Decimator( unsigned int inLength, unsigned int decFactor ); cannam@0: virtual ~Decimator(); cannam@0: cannam@22: int getFactor() const { return m_decFactor; } cannam@22: static int getHighestSupportedFactor() { return 8; } cannam@22: cannam@0: private: cannam@0: void resetFilter(); cannam@0: void deInitialise(); cannam@0: void initialise( unsigned int inLength, unsigned int decFactor ); cannam@0: cannam@0: unsigned int m_inputLength; cannam@0: unsigned int m_outputLength; cannam@0: unsigned int m_decFactor; cannam@0: cannam@0: double Input; cannam@0: double Output ; cannam@0: cannam@0: double o1,o2,o3,o4,o5,o6,o7; cannam@0: cannam@0: double a[ 9 ]; cannam@0: double b[ 9 ]; cannam@0: cannam@0: double* decBuffer; cannam@0: }; cannam@0: cannam@0: #endif //