Chris@35: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@35: Chris@42: /* Chris@42: Tipic Chris@42: Chris@42: Centre for Digital Music, Queen Mary, University of London. Chris@42: Chris@42: This program is free software; you can redistribute it and/or Chris@42: modify it under the terms of the GNU General Public License as Chris@42: published by the Free Software Foundation; either version 2 of the Chris@42: License, or (at your option) any later version. See the file Chris@42: COPYING included with this distribution for more information. Chris@42: */ Chris@42: Chris@35: #ifndef FEATURE_DOWNSAMPLE_H Chris@35: #define FEATURE_DOWNSAMPLE_H Chris@35: Chris@35: #include Chris@35: Chris@35: #include "Types.h" Chris@35: Chris@57: /** Chris@57: * Downsample a feature by a factor in time. Chris@57: * Chris@57: * This class retains internal history, so a single instance per Chris@57: * channel or feature type is required. It is also not thread-safe. Chris@57: */ Chris@35: class Filter; Chris@35: Chris@35: class FeatureDownsample Chris@35: { Chris@35: public: Chris@35: struct Parameters { Chris@35: int featureSize; Chris@35: int downsampleFactor; Chris@35: int windowLength; Chris@37: int normP; // 0 = no normalisation, 1 = L^1, 2 = L^2 Chris@37: double normThresh; Chris@35: Parameters() : Chris@35: featureSize(1), Chris@35: downsampleFactor(10), Chris@37: windowLength(41), Chris@37: normP(2), Chris@37: normThresh(1e-6) Chris@35: { } Chris@35: }; Chris@35: Chris@35: FeatureDownsample(Parameters params); Chris@35: ~FeatureDownsample(); Chris@35: Chris@35: void reset(); Chris@35: RealBlock process(const RealBlock &in); Chris@36: RealBlock getRemainingOutput(); Chris@35: Chris@35: private: Chris@35: Parameters m_params; Chris@35: std::vector m_filters; Chris@36: int m_toDrop; Chris@35: int m_toNext; Chris@36: int m_inCount; Chris@36: int m_outCount; Chris@35: }; Chris@35: Chris@35: #endif