Mercurial > hg > midi-score-follower
diff src/BayesianArrayStructure.cpp @ 18:c7107e5c8f03
added in a mode to use either integrated estimate or MAP estimate in tempo process. Decreased nooise param from 0.02 to 0.03 so observations given more weight
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Fri, 18 Nov 2011 11:56:32 +0000 |
parents | 3f103cf78148 |
children | 2e17f0fdeaef |
line wrap: on
line diff
--- a/src/BayesianArrayStructure.cpp Tue Nov 15 20:06:55 2011 +0000 +++ b/src/BayesianArrayStructure.cpp Fri Nov 18 11:56:32 2011 +0000 @@ -24,15 +24,9 @@ lastEventTime = 0;//ofGetElapsedTimeMillis(); - /* - tmpPrior.createVector(240); - tmpPrior.addGaussianShape(100, 40, 1); - tmpPrior.addGaussianShape(200, 10, 0.2); - tmpPrior.translateDistribution(20); - */ tmpBestEstimate = 0; crossUpdateTimeThreshold = 100; - priorWidth = 30; + priorWidth = 50; } BayesianArrayStructure::BayesianArrayStructure(int length){ @@ -43,6 +37,7 @@ posterior.createVector(length); lastEventTime = 0; + usingIntegratedTempoEstimate = false;//use max index } @@ -67,13 +62,8 @@ relativeSpeedPosterior.zero(); relativeSpeedLikelihood.zero(); - //relativeSpeedPosterior.addGaussianShape(40, 5, 0.6); relativeSpeedPosterior.addGaussianShape(100, 20, 0.8); -// relativeSpeedPosterior.addGaussianShape(50, 1, 0.8); - -// relativeSpeedPosterior.addToIndex(100, 1); - //relativeSpeedPosterior.addToIndex(50, 1); relativeSpeedPosterior.renormalise(); relativeSpeedPosterior.getMaximum(); @@ -82,8 +72,7 @@ prior.zero(); posterior.zero(); -// posterior.offset = - 200; -// posterior.addGaussianShape(200, 40, 1); + posterior.addToIndex(0, 1); posterior.renormalise(); @@ -130,21 +119,6 @@ } void BayesianArrayStructure::simpleExample(){ - //simple example - -// prior.addGaussianShape(50, 10, 1); -// prior.addGaussianShape(150, 30, 0.3); -// prior.addGaussianShape(250, 30, 0.2); - -// likelihood.addGaussianShape(90, 20, 0.6); -// likelihood.addConstant(0.02); -// posterior.doProduct(prior, likelihood); - -// relativeSpeedPosterior.addToIndex(100, 1); -// relativeSpeedPosterior.addToIndex(40, 0.7); - -// relativeSpeedPosterior.addGaussianShape(100, 2, 1); -// relativeSpeedPosterior.addGaussianShape(40, 2, 0.5); relativeSpeedPosterior.getMaximum(); relativeSpeedPrior.copyFromDynamicVector(relativeSpeedPosterior); } @@ -228,7 +202,13 @@ //if (*realTimeMode) timeDiff = ofGetElapsedTimeMillis() - lastBestEstimateUpdateTime; - double speedEstimate = relativeSpeedPosterior.getIntegratedEstimate(); + double speedEstimate; + if (usingIntegratedTempoEstimate) + speedEstimate = relativeSpeedPosterior.getIntegratedEstimate(); + else + speedEstimate = relativeSpeedPosterior.MAPestimate; + + speedEstimate = relativeSpeedPosterior.getIndexInRealTerms(speedEstimate); //relativeSpeedPosterior.getIndexInRealTerms(relativeSpeedPosterior.MAPestimate) bestEstimate = posterior.getIndexInRealTerms(posterior.MAPestimate) + timeDiff*speedEstimate; @@ -505,6 +485,11 @@ ofSetColor(155,255, 0); double fractionOfScreen = ((double)relativeSpeedPosterior.integratedEstimate / relativeSpeedPosterior.length); ofLine(screenWidth * fractionOfScreen, 0, screenWidth * fractionOfScreen, ofGetHeight()); + + ofSetColor(0,255, 255); + fractionOfScreen = ((double)relativeSpeedPosterior.MAPestimate / relativeSpeedPosterior.length); + ofLine(screenWidth * fractionOfScreen, 0, screenWidth * fractionOfScreen, ofGetHeight()); + }