view src/DynamicBayesianArray.h @ 1:1a32ce016bb9

Changed bestEstimate timing to work via time sent from Max not the elapsed time. This had caused some problems, but this version now working surprisingly well on MIDI files with variable timing.
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Thu, 18 Aug 2011 23:27:42 +0100
parents b299a65a3ad0
children c7107e5c8f03
line wrap: on
line source
/*
 *  DynamicBayesianArray.h
 *  midiCannamReader
 *
 *  Created by Andrew on 17/07/2011.
 *  Copyright 2011 QMUL. All rights reserved.
 *
 */

/*
 *  DynamicBayesianArray.cpp
 *  bayesianTest5
 *
 *  Created by Andrew Robertson on 08/05/2010.
 *  Copyright 2010 __MyCompanyName__. All rights reserved.
 *
 */

/*
 *  DynamicBayesianArray.h
 *  bayesianTest5
 *
 *  Created by Andrew Robertson on 08/05/2010.
 *  Copyright 2010 __MyCompanyName__. All rights reserved.
 *
 */

#include "ofMain.h"

#include "DynamicVector.h"

#ifndef	_DYNAMIC_BAYESIAN_ARRAY
#define _DYNAMIC_BAYESIAN_ARRAY

#define ARRAY_SIZE 240


class DynamicBayesianArray{
	
public:
	
	DynamicBayesianArray();
	void initialiseArray();
	
//	void setGaussianLikelihoodForBeats(float mean, float StdDev);		
	void setGaussianLikelihood(float mean, float StdDev);	
	void setGaussianPrior(float mean, float StdDev);
	void setGaussianPosterior(float mean, float StdDev);
	
	void calculatePosterior();
	void renormalisePosterior();
	void resetMaximumPosterior();//resets the max index
	void decayPosteriorWithGaussianNoise();
	void translateDistribution(int translationIndex);
	void setDecayNoiseGaussian(float mean, float StdDev);
	double calculateStandardDeviation();
	
	int arraySize;
	
	
	float getMaximum(float *ptr, int length);
	void renormaliseArray(float *ptr, int length);
	void resetPrior();
	void decayPosterior();
	float* getMaximumEstimate(float *ptr, int length);
	double getIntegratedEstimateIndex();
	
//	void drawArray(const int& minIndex, const int& maxIndex);
	void drawFloatArray(float* arrayToDraw, const int& minIndex, const int& maxIndex);
	void drawDoubleArray(double* arrayToDraw, const int& minIndex, const int& maxIndex);		

	
	typedef std::vector<double> DoubleVector;
//	typedef std::vector<IntVector> DoubleMatrix;
	
	
//	DynamicVector prior;
//	DynamicVector posterior;
//	DynamicVector likelihood;
	
	DynamicVector testVector;	
//	DynamicVector prior;
	
	float prior [ARRAY_SIZE];
	float posterior [ARRAY_SIZE];
	float likelihood [ARRAY_SIZE];	
	float tempPosteriorArray[ARRAY_SIZE];
	
	float decayNoiseArray[ARRAY_SIZE];
	float decayNoiseStdDev, decayNoiseAmount;
	
	float likelihoodMean, likelihoodStdDev, likelihoodNoise;
	float maximumTest, posteriorDecayRate, maximumValue;
	float eighthNoteProportion, earlySixteenthNoteProportion, lateSixteenthNoteProportion ;
	float maximumEstimate, maximumIndex, integratedEstimate;
	double standardDeviation;
	
private:
};

#endif