cannam@31: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ cannam@31: cannam@31: /* cannam@31: QM DSP Library cannam@31: cannam@31: Centre for Digital Music, Queen Mary, University of London. cannam@31: This file copyright 2008 QMUL cannam@31: All rights reserved. cannam@31: */ cannam@31: cannam@31: #include "KLDivergence.h" cannam@31: cannam@31: double KLDivergence::distance(const vector &m1, cannam@31: const vector &v1, cannam@31: const vector &m2, cannam@31: const vector &v2) cannam@31: { cannam@31: int sz = m1.size(); cannam@31: cannam@31: double d = -2.0 * sz; cannam@31: cannam@31: for (int k = 0; k < sz; ++k) { cannam@31: d += v1[k] / v2[k] + v2[k] / v1[k]; cannam@31: d += (m1[k] - m2[k]) * (1.0 / v1[k] + 1.0 / v2[k]) * (m1[k] - m2[k]); cannam@31: } cannam@31: cannam@31: d /= 2.0; cannam@31: cannam@31: return d; cannam@31: }