annotate yeti/silvet.yeti @ 266:c9d2809cb86d norm

Adjust some polyphony levels. Doesn't seem to make much difference in tests, but seems reasonable in principle
author Chris Cannam
date Wed, 23 Jul 2014 15:52:44 +0100
parents cd9fd74931bb
children
rev   line source
Chris@12 1
Chris@12 2 program silvet;
Chris@12 3
Chris@12 4 { prepareTimeFrequency } = load timefreq;
Chris@13 5 { loadTemplates, extractRanges } = load templates;
Chris@14 6
Chris@14 7 em = load em;
Chris@12 8
Chris@12 9 mat = load may.matrix;
Chris@12 10 vec = load may.vector;
Chris@14 11 plot = load may.plot;
Chris@12 12
Chris@12 13 templates = loadTemplates ();
Chris@12 14
Chris@13 15 ranges = extractRanges templates;
Chris@13 16
Chris@13 17 eprintln "\nWe have \(length (keys templates)) instruments:";
Chris@13 18 for (sort (keys templates)) do k:
Chris@14 19 eprintln " * \(k) \(mat.size templates[k]) range \(ranges[k].lowest) -> \(ranges[k].highest)";
Chris@13 20 done;
Chris@12 21 eprintln "";
Chris@12 22
Chris@12 23 columns = prepareTimeFrequency "test.wav";
Chris@12 24
Chris@12 25 height = if empty? columns then 0 else vec.length (head columns) fi;
Chris@12 26
Chris@13 27 chunkSize = { rows = height, columns = 100 };
Chris@13 28
Chris@14 29 emdata = em.initialise ranges templates 88 chunkSize;
Chris@13 30
Chris@14 31 eprintln "initialised EM data: overall pitch range \(emdata.lowest) -> \(emdata.highest)";
Chris@13 32
Chris@12 33 chunkify cols =
Chris@12 34 if empty? cols then []
Chris@12 35 else
Chris@13 36 (mat.resizedTo chunkSize
Chris@13 37 (mat.fromColumns (take chunkSize.columns cols)))
Chris@13 38 :. \(chunkify (drop chunkSize.columns cols));
Chris@12 39 fi;
Chris@12 40
Chris@12 41 chunks = chunkify columns;
Chris@12 42
Chris@12 43 eprintln "we have \(length chunks) chunks of size \(mat.size (head chunks))";
Chris@12 44
Chris@26 45 oneIteration emdata chunk n =
Chris@28 46 (eprintln "E";
Chris@28 47 { estimate, q } = em.performExpectation emdata chunk;
Chris@28 48 eprintln "M";
Chris@26 49 newdata = em.performMaximisation emdata chunk q;
Chris@26 50 if (n % 6 == 0) then
Chris@26 51 \() (plot.plot [ Grid chunk ]);
Chris@26 52 \() (plot.plot [ Grid estimate ]);
Chris@26 53 fi;
Chris@26 54 newdata);
Chris@13 55
Chris@26 56 iterations = 6;
Chris@14 57
Chris@26 58 var d = emdata;
Chris@26 59 for [1..iterations] do i:
Chris@26 60 eprintln "iteration \(i)...";
Chris@26 61 d := oneIteration d (head chunks) i;
Chris@26 62 done;
Chris@14 63
Chris@28 64 eprintln "done, plotting pitch activation matrix";
Chris@28 65
Chris@28 66 \() (plot.plot [Grid d.pitches]);
Chris@28 67 \() (plot.plot [Contour d.pitches]);
Chris@14 68
Chris@14 69
Chris@14 70 ();
Chris@14 71
Chris@14 72