comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:d7116e3183f8
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2
3 /*
4 QM DSP Library
5
6 Centre for Digital Music, Queen Mary, University of London.
7 This file copyright 2006 Martin Gasser.
8 All rights reserved.
9 */
10
11 #ifndef _TONALESTIMATOR_
12 #define _TONALESTIMATOR_
13
14
15 #include <valarray>
16 #include <numeric>
17 #include <algorithm>
18 #include <iostream>
19
20 class ChromaVector : public std::valarray<double>
21 {
22 public:
23 ChromaVector(size_t uSize = 12) : std::valarray<double>()
24 { resize(uSize, 0.0f); }
25
26 virtual ~ChromaVector() {};
27
28 void printDebug()
29 {
30 for (int i = 0; i < size(); i++)
31 {
32 std::cout << (*this)[i] << ";";
33 }
34
35 std::cout << std::endl;
36 }
37
38 void normalizeL1()
39 {
40 // normalize the chroma vector (L1 norm)
41 double dSum = 0.0;
42
43 for (size_t i = 0; i < 12; (dSum += std::abs((*this)[i++])));
44 for (size_t i = 0; i < 12; dSum > 0.0000001?((*this)[i] /= dSum):(*this)[i]=0.0, i++);
45
46 }
47
48 };
49
50 class TCSVector : public std::valarray<double>
51 {
52 public:
53 TCSVector() : std::valarray<double>()
54 { resize(6, 0.0f); }
55
56 virtual ~TCSVector() {};
57
58 void printDebug()
59 {
60 for (int i = 0; i < size(); i++)
61 {
62 std::cout << (*this)[i] << ";";
63 }
64
65 std::cout << std::endl;
66 }
67
68 double magnitude() const
69 {
70 double dMag = 0.0;
71
72 for (size_t i = 0; i < 6; i++)
73 {
74 dMag += std::pow((*this)[i], 2.0);
75 }
76
77 return std::sqrt(dMag);
78 }
79
80 };
81
82
83
84 class TonalEstimator
85 {
86 public:
87 TonalEstimator();
88 virtual ~TonalEstimator();
89 TCSVector transform2TCS(const ChromaVector& rVector);
90 protected:
91 std::valarray< std::valarray<double> > m_Basis;
92 };
93
94 #endif // _TONALESTIMATOR_