Mercurial > hg > audiodb
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);