BeatSpectrum.cpp
Go to the documentation of this file.
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 2008 Kurt Jacobson and QMUL.
8 
9  This program is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License as
11  published by the Free Software Foundation; either version 2 of the
12  License, or (at your option) any later version. See the file
13  COPYING included with this distribution for more information.
14 */
15 
16 #include "BeatSpectrum.h"
17 
18 #include "maths/CosineDistance.h"
19 
20 using std::vector;
21 
22 vector<double> BeatSpectrum::process(const vector<vector<double> > &m)
23 {
24  int origin = 0;
25  int sz = m.size()/2;
26 
27  int i, j, k;
28 
29  vector<double> v(sz);
30  for (i = 0; i < sz; ++i) v[i] = 0.0;
31 
32  CosineDistance cd;
33 
34  for (i = origin; i < origin + sz; ++i) {
35 
36  k = 0;
37 
38  for (j = i + 1; j < i + sz + 1; ++j) {
39 
40  v[k++] += cd.distance(m[i], m[j]);
41  }
42  }
43 
44  // normalize
45 
46  double max = 0.0;
47 
48  for (i = 0; i < sz; ++i) {
49  if (v[i] > max) max = v[i];
50  }
51 
52  if (max > 0.0) {
53  for (i = 0; i < sz; ++i) {
54  v[i] /= max;
55  }
56  }
57 
58  return v;
59 }
60 
double distance(const std::vector< double > &v1, const std::vector< double > &v2)
std::vector< double > process(const std::vector< std::vector< double > > &inmatrix)