annotate maths/KLDivergence.cpp @ 31:dfe38135e4c7

* Add cosine distance and the self-similarity matrix used for SB rhythmic similarity * Pull out SB timbral similarity KL divergence into its own file
author cannam
date Fri, 18 Jan 2008 14:40:20 +0000
parents
children 499d438b52ba
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@31 7 This file copyright 2008 QMUL
cannam@31 8 All rights reserved.
cannam@31 9 */
cannam@31 10
cannam@31 11 #include "KLDivergence.h"
cannam@31 12
cannam@31 13 double KLDivergence::distance(const vector<double> &m1,
cannam@31 14 const vector<double> &v1,
cannam@31 15 const vector<double> &m2,
cannam@31 16 const vector<double> &v2)
cannam@31 17 {
cannam@31 18 int sz = m1.size();
cannam@31 19
cannam@31 20 double d = -2.0 * sz;
cannam@31 21
cannam@31 22 for (int k = 0; k < sz; ++k) {
cannam@31 23 d += v1[k] / v2[k] + v2[k] / v1[k];
cannam@31 24 d += (m1[k] - m2[k]) * (1.0 / v1[k] + 1.0 / v2[k]) * (m1[k] - m2[k]);
cannam@31 25 }
cannam@31 26
cannam@31 27 d /= 2.0;
cannam@31 28
cannam@31 29 return d;
cannam@31 30 }