diff dsp/tonal/TonalEstimator.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 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_