# HG changeset patch # User Chris Cannam # Date 1396888600 -3600 # Node ID a54df67e607ea12f6f1307836cd8db317d0dd5b6 # Parent 22553e7b2a63e15fc11fa66cc3f0e556790c2168# Parent 9e2d1f6cd43a1b72ef95a0e9275867a26964b257 Merge from default branch diff -r 22553e7b2a63 -r a54df67e607e src/EM.cpp --- a/src/EM.cpp Mon Apr 07 17:07:51 2014 +0100 +++ b/src/EM.cpp Mon Apr 07 17:36:40 2014 +0100 @@ -96,6 +96,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); @@ -176,8 +194,8 @@ newSources[i][n] = pow(newSources[i][n], m_sourceSparsity); } } - normalise(newSources[i]); } + normaliseSources(newSources); m_pitches = newPitches; m_sources = newSources; diff -r 22553e7b2a63 -r a54df67e607e src/EM.h --- a/src/EM.h Mon Apr 07 17:07:51 2014 +0100 +++ b/src/EM.h Mon Apr 07 17:36:40 2014 +0100 @@ -60,6 +60,7 @@ int m_highestPitch; void normalise(V &column); + void normaliseSources(Grid &grid); void expectation(const V &column); void maximisation(const V &column);