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());
+	
 }