annotate maths/KLDivergence.h @ 56:a0f987c06bec
* Make it possible to retrieve beat spectral difference function from
bar detector
* Avoid crashes when bar detector is run with very short input
author |
cannam |
date |
Fri, 27 Feb 2009 10:23:08 +0000 |
parents |
499d438b52ba |
children |
e5907ae6de17 |
rev |
line source |
cannam@31
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
cannam@31
|
2
|
cannam@31
|
3 /*
|
cannam@31
|
4 QM DSP Library
|
cannam@31
|
5
|
cannam@31
|
6 Centre for Digital Music, Queen Mary, University of London.
|
cannam@33
|
7 This file copyright 2008 QMUL.
|
cannam@31
|
8 All rights reserved.
|
cannam@31
|
9 */
|
cannam@31
|
10
|
cannam@31
|
11 #ifndef KLDIVERGENCE_H
|
cannam@31
|
12 #define KLDIVERGENCE_H
|
cannam@31
|
13
|
cannam@31
|
14 #include <vector>
|
cannam@31
|
15
|
cannam@31
|
16 using std::vector;
|
cannam@31
|
17
|
cannam@31
|
18 /**
|
cannam@33
|
19 * Helper methods for calculating Kullback-Leibler divergences.
|
cannam@31
|
20 */
|
cannam@31
|
21 class KLDivergence
|
cannam@31
|
22 {
|
cannam@31
|
23 public:
|
cannam@31
|
24 KLDivergence() { }
|
cannam@31
|
25 ~KLDivergence() { }
|
cannam@31
|
26
|
cannam@33
|
27 /**
|
cannam@33
|
28 * Calculate a symmetrised Kullback-Leibler divergence of Gaussian
|
cannam@33
|
29 * models based on mean and variance vectors. All input vectors
|
cannam@33
|
30 * must be of equal size.
|
cannam@33
|
31 */
|
cannam@33
|
32 double distanceGaussian(const vector<double> &means1,
|
cannam@33
|
33 const vector<double> &variances1,
|
cannam@33
|
34 const vector<double> &means2,
|
cannam@33
|
35 const vector<double> &variances2);
|
cannam@33
|
36
|
cannam@33
|
37 /**
|
cannam@33
|
38 * Calculate a Kullback-Leibler divergence of two probability
|
cannam@33
|
39 * distributions. Input vectors must be of equal size. If
|
cannam@33
|
40 * symmetrised is true, the result will be the symmetrised
|
cannam@33
|
41 * distance (equal to KL(d1, d2) + KL(d2, d1)).
|
cannam@33
|
42 */
|
cannam@33
|
43 double distanceDistribution(const vector<double> &d1,
|
cannam@33
|
44 const vector<double> &d2,
|
cannam@33
|
45 bool symmetrised);
|
cannam@31
|
46 };
|
cannam@31
|
47
|
cannam@31
|
48 #endif
|
cannam@31
|
49
|