Mercurial > hg > midi-score-follower
diff hackday/BayesianArrayStructure.h @ 28:49a5b023df1e
Hackday files comitted - version as demo'd at London hackday
author | Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk> |
---|---|
date | Mon, 05 Dec 2011 07:00:47 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hackday/BayesianArrayStructure.h Mon Dec 05 07:00:47 2011 +0000 @@ -0,0 +1,99 @@ +/* + * BayesianArrayStructure.h + * midiCannamReader + * + * Created by Andrew on 17/07/2011. + * Copyright 2011 QMUL. All rights reserved. + * + */ +#ifndef BAYESIAN_ARRAY_STRUCTURE +#define BAYESIAN_ARRAY_STRUCTURE + + +#include "ofMain.h" +//#include "DynamicBayesianArray.h" +#include "DynamicVector.h" + +class BayesianArrayStructure { + +public: +// BayesianArrayStructure(); + BayesianArrayStructure(); + BayesianArrayStructure(int length); + + void calculatePosterior(); + void drawArrays(); + void drawArraysRelativeToTimeframe(const double& startTimeMillis, const double& endTimeMillis); + + void drawTempoArrays(); + + void resetSize(int length); + void resetArrays(); + void simpleExample(); + void setStartPlaying(); + void zeroArrays(); + + double screenWidth; + + void copyPriorToPosterior(); +// DynamicBayesianArray bayesArray; + + double lastEventTime; + double likelihoodNoise; + double speedLikelihoodNoise; + + //DynamicVector tmpPrior; + DynamicVector tmpPosteriorForStorage; + DynamicVector prior; + DynamicVector posterior; + DynamicVector likelihood; + + DynamicVector relativeSpeedPrior; + DynamicVector relativeSpeedLikelihood; + DynamicVector relativeSpeedPosterior; + DynamicVector acceleration; + + double tmpBestEstimate; + void updateTmpBestEstimate(const double& timeDifference); + + int updateCounter; + + void setPositionDistributionScalar(double f); + + void resetSpeedToOne(); + void addGaussianNoiseToSpeedPosterior(const double& std_dev); + void addTriangularNoiseToSpeedPosterior(const double& std_dev); + + double bestEstimate; + void updateBestEstimate(const double& timeDifference); + double lastBestEstimateUpdateTime; + double speedEstimate; + + double speedDecayWidth, speedDecayAmount; + void decaySpeedDistribution(double timeDifference); + + void resetSpeedSize(int length); + void setRelativeSpeedScalar(double f); + void setSpeedPrior(double f); + void calculateNewPriorOffset(const double& timeDifference); + void setNewDistributionOffsets(const double& newOffset); + + void setLikelihoodToConstant(); + void updateTempoLikelihood(const double& speedRatio, const double& matchFactor); + void updateTempoDistribution(); + + void calculateTempoUpdate(); + + void crossUpdateArrays(DynamicVector& position, DynamicVector& speed, double timeDifference); + void complexCrossUpdate(const double& timeDifferenceInPositionVectorUnits); + void translateByMaximumSpeed(const double& timeDifferenceInPositionVectorUnits); + double crossUpdateTimeThreshold;//time after which we do complex update of multiple speeds + + double speedPriorValue; + int priorWidth; + bool* realTimeMode; + bool usingIntegratedTempoEstimate; + double relativeSpeedLikelihoodStdDev; + +}; +#endif