Chris@12: Chris@12: program silvet; Chris@12: Chris@12: { prepareTimeFrequency } = load timefreq; Chris@13: { loadTemplates, extractRanges } = load templates; Chris@14: Chris@14: em = load em; Chris@19: em1 = load em_onecolumn; Chris@12: Chris@12: mat = load may.matrix; Chris@12: vec = load may.vector; Chris@14: plot = load may.plot; Chris@12: Chris@12: templates = loadTemplates (); Chris@12: Chris@13: ranges = extractRanges templates; Chris@13: Chris@13: eprintln "\nWe have \(length (keys templates)) instruments:"; Chris@13: for (sort (keys templates)) do k: Chris@14: eprintln " * \(k) \(mat.size templates[k]) range \(ranges[k].lowest) -> \(ranges[k].highest)"; Chris@13: done; Chris@12: eprintln ""; Chris@12: Chris@12: columns = prepareTimeFrequency "test.wav"; Chris@12: Chris@19: /* Chris@12: height = if empty? columns then 0 else vec.length (head columns) fi; Chris@12: Chris@13: chunkSize = { rows = height, columns = 100 }; Chris@13: Chris@14: emdata = em.initialise ranges templates 88 chunkSize; Chris@13: Chris@14: eprintln "initialised EM data: overall pitch range \(emdata.lowest) -> \(emdata.highest)"; Chris@13: Chris@12: chunkify cols = Chris@12: if empty? cols then [] Chris@12: else Chris@13: (mat.resizedTo chunkSize Chris@13: (mat.fromColumns (take chunkSize.columns cols))) Chris@13: :. \(chunkify (drop chunkSize.columns cols)); Chris@12: fi; Chris@12: Chris@12: chunks = chunkify columns; Chris@12: Chris@12: eprintln "we have \(length chunks) chunks of size \(mat.size (head chunks))"; Chris@12: Chris@14: eprintln "attempting one expectation phase..."; Chris@13: Chris@14: error = em.performExpectation emdata (head chunks); Chris@14: Chris@14: eprintln "done, result has dimension \(mat.size error)"; Chris@14: Chris@14: eprintln "attempting one maximisation phase..."; Chris@14: Chris@14: newP = em.performMaximisation emdata (head chunks) error; Chris@14: Chris@14: eprintln "done"; Chris@14: Chris@14: \() (plot.plot [ Grid (head chunks) ]); Chris@14: \() (plot.plot [ Grid error ]); Chris@14: Chris@14: \() (plot.plot [ Grid newP ]); Chris@19: */ Chris@19: Chris@19: em1data = em1.initialise ranges templates 88; Chris@19: Chris@19: col = head (drop 35 columns); Chris@19: Chris@19: \() (plot.plot [ Vector col ]); Chris@19: Chris@19: oneIteration em1data col = Chris@19: (q = em1.performExpectation em1data col; Chris@19: \() (plot.plot [ Vector col, Vector q ]); Chris@19: newdata = em1.performMaximisation em1data col q; Chris@19: \() (plot.plot [ Vector (em1data.pitches), Vector (newdata.pitches) ]); Chris@19: newdata); Chris@19: Chris@19: em1data = oneIteration em1data col; Chris@19: em1data = oneIteration em1data col; Chris@19: em1data = oneIteration em1data col; Chris@19: Chris@14: Chris@14: (); Chris@14: Chris@14: