Mercurial > hg > qm-dsp
diff dsp/tonal/TonalEstimator.h @ 0:d7116e3183f8
* Queen Mary C++ DSP library
author | cannam |
---|---|
date | Wed, 05 Apr 2006 17:35:59 +0000 |
parents | |
children | ba4076cb1be1 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dsp/tonal/TonalEstimator.h Wed Apr 05 17:35:59 2006 +0000 @@ -0,0 +1,94 @@ +/* -*- 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 2006 Martin Gasser. + All rights reserved. +*/ + +#ifndef _TONALESTIMATOR_ +#define _TONALESTIMATOR_ + + +#include <valarray> +#include <numeric> +#include <algorithm> +#include <iostream> + +class ChromaVector : public std::valarray<double> +{ +public: + ChromaVector(size_t uSize = 12) : std::valarray<double>() + { resize(uSize, 0.0f); } + + virtual ~ChromaVector() {}; + + void printDebug() + { + for (int i = 0; i < size(); i++) + { + std::cout << (*this)[i] << ";"; + } + + std::cout << std::endl; + } + + void normalizeL1() + { + // normalize the chroma vector (L1 norm) + double dSum = 0.0; + + for (size_t i = 0; i < 12; (dSum += std::abs((*this)[i++]))); + for (size_t i = 0; i < 12; dSum > 0.0000001?((*this)[i] /= dSum):(*this)[i]=0.0, i++); + + } + +}; + +class TCSVector : public std::valarray<double> +{ +public: + TCSVector() : std::valarray<double>() + { resize(6, 0.0f); } + + virtual ~TCSVector() {}; + + void printDebug() + { + for (int i = 0; i < size(); i++) + { + std::cout << (*this)[i] << ";"; + } + + std::cout << std::endl; + } + + double magnitude() const + { + double dMag = 0.0; + + for (size_t i = 0; i < 6; i++) + { + dMag += std::pow((*this)[i], 2.0); + } + + return std::sqrt(dMag); + } + +}; + + + +class TonalEstimator +{ +public: + TonalEstimator(); + virtual ~TonalEstimator(); + TCSVector transform2TCS(const ChromaVector& rVector); +protected: + std::valarray< std::valarray<double> > m_Basis; +}; + +#endif // _TONALESTIMATOR_