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;
--- a/src/EM.h	Mon Apr 07 17:07:36 2014 +0100
+++ b/src/EM.h	Mon Apr 07 17:34:19 2014 +0100
@@ -58,6 +58,7 @@
     int m_highest;
 
     void normalise(V &column);
+    void normaliseSources(Grid &grid);
     void expectation(const V &column);
     void maximisation(const V &column);