diff yeti/silvet.yeti @ 20:982aa1197a7e

Getting there, slowly, sort of, with EM
author Chris Cannam
date Thu, 27 Mar 2014 11:52:07 +0000
parents f1f8c84339d0
children 8e61ec97b34e
line wrap: on
line diff
--- a/yeti/silvet.yeti	Wed Mar 26 18:49:12 2014 +0000
+++ b/yeti/silvet.yeti	Thu Mar 27 11:52:07 2014 +0000
@@ -66,19 +66,30 @@
 
 col = head (drop 35 columns);
 
-\() (plot.plot [ Vector col ]);
+\() (plot.plot [ Caption "Source frequency distribution", Vector col ]);
 
-oneIteration em1data col =
+sourceGrid d =
+    mat.fromColumns (map do k: d.sources[k] done (sort (keys d.sources)));
+
+\() (plot.plot [ Caption "Source distribution beforehand", Grid (sourceGrid em1data)]);
+
+oneIteration em1data col n =
    (q = em1.performExpectation em1data col;
-    \() (plot.plot [ Vector col, Vector q ]);
+//    \() (plot.plot [ Caption "Frequency distribution and output of E-step for iteration \(n)", Vector col, Vector q ]);
     newdata = em1.performMaximisation em1data col q;
-    \() (plot.plot [ Vector (em1data.pitches), Vector (newdata.pitches) ]);
+    if (n % 2 == 0) then
+        \() (plot.plot [ Caption "Pitch distribution before and after M-step update for iteration \(n)", Vector (em1data.pitches), Vector (newdata.pitches) ]);
+        \() (plot.plot [ Caption "Source distribution after M-step update for iteration \(n)", Grid (sourceGrid newdata) ]);
+    fi;
     newdata);
 
-em1data = oneIteration em1data col;
-em1data = oneIteration em1data col;
-em1data = oneIteration em1data col;
+iterations = 6;
 
+var d = em1data;
+
+for [1..iterations] do i:
+    d := oneIteration d col i;
+done;    
 
 ();