Mercurial > hg > silvet
changeset 53:9e2d1f6cd43a
Fix incorrect normalisation of source activation matrix
author | Chris Cannam |
---|---|
date | Mon, 07 Apr 2014 17:34:19 +0100 |
parents | 782ca0d9ff3e |
children | a54df67e607e 4fa3ea96eb65 |
files | src/EM.cpp src/EM.h |
diffstat | 2 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/EM.cpp Mon Apr 07 17:07:36 2014 +0100 +++ b/src/EM.cpp Mon Apr 07 17:34:19 2014 +0100 @@ -47,7 +47,6 @@ } m_sources = Grid(m_instruments); - for (int i = 0; i < m_instruments; ++i) { m_sources[i] = V(m_notes); for (int n = 0; n < m_notes; ++n) { @@ -83,6 +82,24 @@ } void +EM::normaliseSources(Grid &sources) +{ + V denominators(sources[0].size()); + + for (int i = 0; i < (int)sources.size(); ++i) { + for (int j = 0; j < (int)sources[i].size(); ++j) { + denominators[j] += sources[i][j]; + } + } + + for (int i = 0; i < (int)sources.size(); ++i) { + for (int j = 0; j < (int)sources[i].size(); ++j) { + sources[i][j] /= denominators[j]; + } + } +} + +void EM::iterate(V column) { normalise(column); @@ -155,8 +172,8 @@ newSources[i][n] = pow(newSources[i][n], m_sourceSparsity); } } - normalise(newSources[i]); } + normaliseSources(newSources); m_pitches = newPitches; m_sources = newSources;