Mercurial > hg > qm-dsp
view dsp/tonal/TonalEstimator.h @ 84:e5907ae6de17
* Add GPL and README; some tidying
author | Chris Cannam |
---|---|
date | Mon, 13 Dec 2010 14:55:28 +0000 |
parents | 769da847732b |
children | e4a57215ddee |
line wrap: on
line source
/* -*- 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. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. See the file COPYING included with this distribution for more information. */ #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++) ; } void clear() { for (size_t i = 0; i < 12; ++i) (*this)[i] = 0.0; } }; 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_