changeset 157:9ec0f27e07b9 powertable

sequence_sqrt() and sequence_average() functions for common patterns (handling L2Norm and Power vectors respectively)
author mas01cr
date Thu, 01 Nov 2007 14:56:22 +0000
parents d241a22593bb
children c47839762aa8
files audioDB.cpp audioDB.h
diffstat 2 files changed, 30 insertions(+), 58 deletions(-) [+]
line wrap: on
line diff
--- a/audioDB.cpp	Thu Nov 01 14:43:19 2007 +0000
+++ b/audioDB.cpp	Thu Nov 01 14:56:22 2007 +0000
@@ -1650,6 +1650,22 @@
   }
 }
 
+void audioDB::sequence_sqrt(double *buffer, int length, int seqlen) {
+  int w = length - seqlen + 1;
+  while(w--) {
+    *buffer = sqrt(*buffer);
+    buffer++;
+  }
+}
+
+void audioDB::sequence_average(double *buffer, int length, int seqlen) {
+  int w = length - seqlen + 1;
+  while(w--) {
+    *buffer /= seqlen;
+    buffer++;
+  }
+}
+
 // k nearest-neighbor (k-NN) search between query and target tracks
 // efficient implementation based on matched filter
 // assumes normed shingles
@@ -1687,7 +1703,6 @@
   // Make norm measurements relative to sequenceLength
   unsigned w = sequenceLength-1;
   unsigned i,j;
-  double* ps;
 
   // Copy the L2 norm values to core to avoid disk random access later on
   memcpy(sNorm, l2normTable, dbVectors*sizeof(double));
@@ -1709,24 +1724,11 @@
   for(i=0; i<dbH->numFiles; i++){
     if(trackTable[i]>=sequenceLength) {
       sequence_sum(snPtr, trackTable[i], sequenceLength);
+      sequence_sqrt(snPtr, trackTable[i], sequenceLength);
+
       if (usingPower) {
 	sequence_sum(spPtr, trackTable[i], sequenceLength);
-      }
-
-      ps = snPtr;
-      w=trackTable[i]-sequenceLength+1;
-      while(w--){
-	*ps=sqrt(*ps);
-	ps++;
-      }
-
-      if (usingPower) {
-	ps = spPtr;
-	w = trackTable[i] - sequenceLength + 1;
-	while(w--) {
-	  *ps = *ps / sequenceLength;
-	  ps++;
-	}
+        sequence_average(spPtr, trackTable[i], sequenceLength);
       }
     }
     snPtr += trackTable[i];
@@ -1736,6 +1738,8 @@
   }
   
   sequence_sum(qnPtr, numVectors, sequenceLength);
+  sequence_sqrt(qnPtr, numVectors, sequenceLength);
+
   if (usingPower) {
     qPower = new double[numVectors];
     qpPtr = qPower;
@@ -1751,19 +1755,7 @@
     }
 
     sequence_sum(qpPtr, numVectors, sequenceLength);
-    ps = qpPtr;
-    w = numVectors - sequenceLength + 1;
-    while(w--) {
-      *ps = *ps / sequenceLength;
-      ps++;
-    }
-  }
-
-  ps = qnPtr;
-  w = numVectors - sequenceLength + 1;
-  while(w--) {
-    *ps = sqrt(*ps);
-    ps++;
+    sequence_average(qpPtr, numVectors, sequenceLength);
   }
 
   if(verbosity>1) {
@@ -2176,7 +2168,6 @@
   // Make norm measurements relative to sequenceLength
   unsigned w = sequenceLength-1;
   unsigned i,j;
-  double* ps;
 
   // Copy the L2 norm values to core to avoid disk random access later on
   memcpy(sNorm, l2normTable, dbVectors*sizeof(double));
@@ -2198,23 +2189,10 @@
   for(i=0; i<dbH->numFiles; i++){
     if(trackTable[i]>=sequenceLength) {
       sequence_sum(snPtr, trackTable[i], sequenceLength);
+      sequence_sqrt(snPtr, trackTable[i], sequenceLength);
       if (usingPower) {
         sequence_sum(spPtr, trackTable[i], sequenceLength);
-      }
-
-      ps = snPtr;
-      w=trackTable[i]-sequenceLength+1;
-      while(w--){
-	*ps=sqrt(*ps);
-	ps++;
-      }
-      if (usingPower) {
-        ps = spPtr;
-        w = trackTable[i] - sequenceLength + 1;
-        while(w--) {
-          *ps = *ps / sequenceLength;
-          ps++;
-        }
+        sequence_average(spPtr, trackTable[i], sequenceLength);
       }
     }
     snPtr += trackTable[i];
@@ -2224,6 +2202,8 @@
   }
   
   sequence_sum(qnPtr, numVectors, sequenceLength);
+  sequence_sqrt(qnPtr, numVectors, sequenceLength);
+
   if (usingPower) {
     qPower = new double[numVectors];
     qpPtr = qPower;
@@ -2239,18 +2219,7 @@
     }
 
     sequence_sum(qpPtr, numVectors, sequenceLength);
-    ps = qpPtr;
-    w = numVectors - sequenceLength + 1;
-    while(w--) {
-      *ps = *ps / sequenceLength;
-      ps++;
-    }
-  }
-
-  ps = qnPtr;
-  w = numVectors - sequenceLength + 1;
-  while(w--){
-    *ps=sqrt(*ps);
+    sequence_average(qpPtr, numVectors, sequenceLength);
   }
 
   if(verbosity>1) {
--- a/audioDB.h	Thu Nov 01 14:43:19 2007 +0000
+++ b/audioDB.h	Thu Nov 01 14:56:22 2007 +0000
@@ -180,6 +180,9 @@
   void pointQuery(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
   void trackPointQuery(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
   void sequence_sum(double *buffer, int length, int seqlen);
+  void sequence_sqrt(double *buffer, int length, int seqlen);
+  void sequence_average(double *buffer, int length, int seqlen);
+
   void trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);
   void trackSequenceQueryRad(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0);