andrew@33: /* andrew@33: * BayesianArrayStructure.h andrew@33: * midiCannamReader andrew@33: * andrew@33: * Created by Andrew on 17/07/2011. andrew@33: * Copyright 2011 QMUL. All rights reserved. andrew@33: * andrew@33: */ andrew@33: #ifndef BAYESIAN_ARRAY_STRUCTURE andrew@33: #define BAYESIAN_ARRAY_STRUCTURE andrew@33: andrew@33: andrew@33: #include "ofMain.h" andrew@33: //#include "DynamicBayesianArray.h" andrew@33: #include "DynamicVector.h" andrew@33: andrew@33: class BayesianArrayStructure { andrew@33: andrew@33: public: andrew@33: // BayesianArrayStructure(); andrew@33: BayesianArrayStructure(); andrew@33: BayesianArrayStructure(int length); andrew@33: andrew@33: void calculatePosterior(); andrew@33: void drawArrays(); andrew@33: void drawArraysRelativeToTimeframe(const double& startTimeMillis, const double& endTimeMillis); andrew@33: andrew@33: void drawTempoArrays(); andrew@33: andrew@33: void resetSize(int length); andrew@33: void resetArrays(); andrew@33: void simpleExample(); andrew@33: void setStartPlaying(); andrew@33: void zeroArrays(); andrew@33: andrew@33: double screenWidth; andrew@33: andrew@33: void copyPriorToPosterior(); andrew@33: // DynamicBayesianArray bayesArray; andrew@33: andrew@33: double lastEventTime; andrew@33: double likelihoodNoise; andrew@33: double speedLikelihoodNoise; andrew@33: andrew@33: //DynamicVector tmpPrior; andrew@33: DynamicVector tmpPosteriorForStorage; andrew@33: DynamicVector prior; andrew@33: DynamicVector posterior; andrew@33: DynamicVector likelihood; andrew@33: andrew@33: DynamicVector relativeSpeedPrior; andrew@33: DynamicVector relativeSpeedLikelihood; andrew@33: DynamicVector relativeSpeedPosterior; andrew@33: DynamicVector acceleration; andrew@33: andrew@33: double tmpBestEstimate; andrew@46: // void updateTmpBestEstimate(const double& timeDifference); DELETE andrew@33: andrew@33: int updateCounter; andrew@33: andrew@33: void setPositionDistributionScalar(double f); andrew@33: andrew@33: void resetSpeedToOne(); andrew@33: void addGaussianNoiseToSpeedPosterior(const double& std_dev); andrew@33: void addTriangularNoiseToSpeedPosterior(const double& std_dev); andrew@33: andrew@33: double bestEstimate; andrew@33: void updateBestEstimate(const double& timeDifference); andrew@33: double lastBestEstimateUpdateTime; andrew@34: double speedEstimate, speedEstimateIndex; andrew@46: double getSpeedEstimateIndex(); andrew@33: andrew@33: double speedDecayWidth, speedDecayAmount; andrew@33: void decaySpeedDistribution(double timeDifference); andrew@33: andrew@33: void resetSpeedSize(int length); andrew@33: void setRelativeSpeedScalar(double f); andrew@33: void setSpeedPrior(double f); andrew@46: //void calculateNewPriorOffset(const double& timeDifference); andrew@33: void setNewDistributionOffsets(const double& newOffset); andrew@33: andrew@33: void setLikelihoodToConstant(); andrew@33: void updateTempoLikelihood(const double& speedRatio, const double& matchFactor); andrew@33: void updateTempoDistribution(); andrew@33: andrew@33: void calculateTempoUpdate(); andrew@33: andrew@33: void crossUpdateArrays(DynamicVector& position, DynamicVector& speed, double timeDifference); andrew@33: void complexCrossUpdate(const double& timeDifferenceInPositionVectorUnits); andrew@33: void translateByMaximumSpeed(const double& timeDifferenceInPositionVectorUnits); andrew@33: double crossUpdateTimeThreshold;//time after which we do complex update of multiple speeds andrew@33: andrew@33: double speedPriorValue; andrew@33: int priorWidth; andrew@33: bool* realTimeMode; andrew@33: bool usingIntegratedTempoEstimate; andrew@33: double relativeSpeedLikelihoodStdDev; andrew@50: bool useConstantTempoDistribution; andrew@52: andrew@52: bool drawLikelihood; andrew@52: bool drawPrior; andrew@52: bool drawPosterior; andrew@33: }; andrew@33: #endif