Mercurial > hg > qm-dsp
diff dsp/onsets/DetectionFunction.h @ 225:49844bc8a895
* Queen Mary C++ DSP library
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Wed, 05 Apr 2006 17:35:59 +0000 |
parents | |
children | c539af5259da |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dsp/onsets/DetectionFunction.h Wed Apr 05 17:35:59 2006 +0000 @@ -0,0 +1,72 @@ +/* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ + +/* + QM DSP Library + + Centre for Digital Music, Queen Mary, University of London. + This file copyright 2005-2006 Christian Landone. + All rights reserved. +*/ + +#ifndef DETECTIONFUNCTION_H +#define DETECTIONFUNCTION_H + +#include "dsp/maths/MathUtilities.h" +#include "dsp/maths/MathAliases.h" +#include "dsp/phasevocoder/PhaseVocoder.h" +#include "base/Window.h" + +#define DF_HFC (1) +#define DF_SPECDIFF (2) +#define DF_PHASEDEV (3) +#define DF_COMPLEXSD (4) + +struct DFConfig{ + double stepSecs; // DF step in seconds + unsigned int stepSize; // DF step in samples + unsigned int frameLength; // DF analysis window - usually 2*step + int DFType; // type of detection function ( see defines ) +}; + +class DetectionFunction +{ +public: + double* getSpectrumMagnitude(); + DetectionFunction( DFConfig Config ); + virtual ~DetectionFunction(); + double process( double* TDomain ); + +private: + double HFC( unsigned int length, double* src); + double specDiff( unsigned int length, double* src); + double phaseDev(unsigned int length, double *srcMagnitude, double *srcPhase); + double complexSD(unsigned int length, double *srcMagnitude, double *srcPhase); + +private: + void initialise( DFConfig Config ); + void deInitialise(); + + int m_DFType; + unsigned int m_dataLength; + unsigned int m_halfLength; + + double* magHistory; + double* phaseHistory; + double* phaseHistoryOld; + + double* m_DFWindowedFrame; // Array for windowed analysis frame + double* m_magnitude; // Magnitude of analysis frame ( frequency domain ) + double* m_thetaAngle;// Phase of analysis frame ( frequency domain ) + + + vector < ComplexData > meas ; + + ComplexData j; + + Window<double> *m_window; + + PhaseVocoder* m_phaseVoc; // Phase Vocoder + +}; + +#endif