Mercurial > hg > qm-dsp
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_ |