diff src/timeWarp.h @ 5:0d51e93bfe74

some work in improving the efficiency of doing chroma and onset analysis ahs been made - don't need to recalculate the chroma comparison each time
author Andrew N Robertson <andrew.robertson@eecs.qmul.ac.uk>
date Wed, 20 Jul 2011 12:06:45 +0100
parents f40577e6b30d
children 166bece5922c
line wrap: on
line diff
--- a/src/timeWarp.h	Wed Jun 08 17:35:56 2011 +0100
+++ b/src/timeWarp.h	Wed Jul 20 12:06:45 2011 +0100
@@ -73,50 +73,74 @@
 	
 	void createCombinedMatrix(DoubleMatrix myChromaMatrix, DoubleVector energyVector, DoubleMatrix* chromaEnergyMatrix);
 
+	double getChromaSimilarity(int x, int y, DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix);
+	
+	void calculateChromaSimilarityMatrix(DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix, DoubleMatrix* simMatrix);
+	
 	void calculateSimilarityMatrix();
 
-	
+	int findMinimumOfMatrixColumn(DoubleMatrix d, int column);
 	
 	
 	//new addition
-	void calculateSimilarityMatrixWithPointers(DoubleMatrix firstChromaMatrix, DoubleMatrix secondChromaMatrix, DoubleMatrix* simMatrix);
-	DoubleMatrix superAlignmentMeasureMatrix;	//for the onset + chromagram alignment
-	DoubleVector superMinimumAlignmentPath;	
+	void calculateSimilarityMatrixWithPointers(DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix, DoubleMatrix* simMatrix);
+
+	void calculateJointSimilarityMatrix(DoubleVector* energyVectorOne, DoubleVector* energyVectorTwo, DoubleMatrix* chromaSimilarityMatrix, DoubleMatrix* simMatrix);
+	
+	void calculatePartJointSimilarityMatrix(DoubleVector* firstEnergyVector, DoubleVector* secondEnergyVector, DoubleMatrix* chromaSimMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX);
+
+	
+	double getJointChromaAndEnergyDistance(DoubleVector* energyVectorOne, DoubleMatrix* firstChromaMatrix, DoubleVector* energyVectorTwo, DoubleMatrix* secondChromaMatrix, int energyIndexX, int energyIndexY, double energyProportion, double chromaProportion);
+	
+	DoubleMatrix chromaSimilarityMatrix;
+//	DoubleMatrix superAlignmentMeasureMatrix;	//for the onset + chromagram alignment
+//	DoubleVector superMinimumAlignmentPath;	
 	//end new additions
 	
 	int findStartWidthFrame();	  
 
 	
 
-
+	int conversionFactor; 
 	
 	void calculateAlignmentMatrix(DoubleMatrix firstMatrix, DoubleMatrix secondMatrix, DoubleMatrix *alignmentMatrix);
 	double getDistance(int i, int j);
 
-	double getRestrictedMinimum(int i, int j, float newValue, int minX, int minY);
-	bool extendRestrictedAlignmentUp(int startX, int startY, int endIndexY, DoubleMatrix *alignmentMatrix);
-	bool extendRestrictedAlignmentAlong(int startX, int startY, int endIndexX, DoubleMatrix* alignmentMatrix);
 	
 	double getMinimum(int i, int j, float newValue);
 	bool extendAlignmentUp(int endIndexY, DoubleMatrix *alignmentMatrix);
 	bool extendAlignmentAlong(int endIndexX, DoubleMatrix *alignmentMatrix);
-	void calculateMinimumAlignmentPath(DoubleMatrix alignmentMatrix);
-	void extendForwardAlignmentPath(int endX);
+	void calculateMinimumAlignmentPath(DoubleMatrix* alignmentMatrix, IntMatrix* backPath, bool pickMinimumFlag);//writes the backwards laignment path to *backPath
+
 	
-	
-	bool findPreviousMinimumInBackwardsPath();
-	bool testForNewAlignmentMinimum(double *previousMinimum, int i, int j);	
+	bool findPreviousMinimumInBackwardsPath(DoubleMatrix* alignmentMatrix, IntMatrix* backPath);
+	bool testForNewAlignmentMinimum(double *previousMinimum, int i, int j, DoubleMatrix* alignmentMatrix);	
 	
 	int findMinimumOfVector(DoubleVector *d);
+		
+	void extendForwardAlignmentPath(int endX, IntMatrix* backPath, int anchorPointX, int anchorPointY);//specify forwards path to extend?
+	void addNewForwardsPath(int indexX, IntMatrix* backPath, int anchorPointX, int anchorPointY);
+
+	int getMinimumIndexOfColumnFromMatrix(int i, DoubleMatrix* matrix);
 	
 	
-	void addNewForwardsPath(int indexX);
+//PART ALIGNMENT FUNCTIONS
+	void calculatePartSimilarityMatrix(DoubleMatrix* firstChromaMatrix, DoubleMatrix* secondChromaMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX);
+	void calculatePartAlignmentMatrix(int endIndexX, int endIndexY, DoubleMatrix* alignmentMatrix, DoubleMatrix* simMatrix);
 
-	void calculatePartSimilarityMatrix(DoubleMatrix firstChromaMatrix, DoubleMatrix secondChromaMatrix, DoubleMatrix* simMatrix, int startX, int startY, int endX);
 	
-//	void calculatePartAlignmentMatrix(int startIndexX, int startIndexY, int endIndexX, int endIndexY, DoubleMatrix* alignmentMatrix);
+	double getDistanceFromMatrix(int i, int j, DoubleMatrix* simMatrix);
+	double getMinimumFromMatrix(int i, int j, float newValue, DoubleMatrix* alignMatrix);
+	
 	void calculatePartMinimumAlignmentPath(int startX, int startY, int endX, int endY, DoubleMatrix alignmentMatrix);
-		bool findPreviousMinimumInPartBackwardsPath();
+//	bool findPreviousMinimumInPartBackwardsPath(DoubleMatrix* alignmentMatrix);
+	double getRestrictedMinimum(int i, int j, float newValue, int minX, int minY);
+	bool extendRestrictedAlignmentUp(int endIndexY, DoubleMatrix *alignmentMatrix, DoubleMatrix* simMatrix);
+	bool extendRestrictedAlignmentAlong(int endIndexX, DoubleMatrix* alignmentMatrix, DoubleMatrix* simMatrix);
+	
+	
+	void printBackwardsPath(int startIndex, int endIndex, IntMatrix* backPath);
+	void copyForwardsPathToBackwardsPath();
 	
 	float diagonalPenalty;