# HG changeset patch # User mas01cr # Date 1196271962 0 # Node ID cb126d467344a30a97ab4c0cf582e86f9ae0027d # Parent 861e4bc9554784ad46f98839a87b2c49f0df3454 New initialize_arrays() helper routine for remaining queries. And so it begins... diff -r 861e4bc95547 -r cb126d467344 audioDB.h --- a/audioDB.h Wed Nov 28 17:22:42 2007 +0000 +++ b/audioDB.h Wed Nov 28 17:46:02 2007 +0000 @@ -195,6 +195,7 @@ void sequence_sqrt(double *buffer, int length, int seqlen); void sequence_average(double *buffer, int length, int seqlen); + void initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD); void trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0); void trackSequenceQueryRad(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse=0); diff -r 861e4bc95547 -r cb126d467344 query.cpp --- a/query.cpp Wed Nov 28 17:22:42 2007 +0000 +++ b/query.cpp Wed Nov 28 17:46:02 2007 +0000 @@ -77,6 +77,61 @@ } } +void audioDB::initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD) { + unsigned int j, k, l, w; + double *dp, *qp, *sp; + + const unsigned HOP_SIZE = sequenceHop; + const unsigned wL = sequenceLength; + + for(j = 0; j < numVectors; j++) { + // Sum products matrix + D[j] = new double[trackTable[track]]; + assert(D[j]); + // Matched filter matrix + DD[j]=new double[trackTable[track]]; + assert(DD[j]); + } + + // Dot product + for(j = 0; j < numVectors; j++) + for(k = 0; k < trackTable[track]; k++){ + qp = query + j * dbH->dim; + sp = data_buffer + k * dbH->dim; + DD[j][k] = 0.0; // Initialize matched filter array + dp = &D[j][k]; // point to correlation cell j,k + *dp = 0.0; // initialize correlation cell + l = dbH->dim; // size of vectors + while(l--) + *dp += *qp++ * *sp++; + } + + // Matched Filter + // HOP SIZE == 1 + double* spd; + if(HOP_SIZE == 1) { // HOP_SIZE = shingleHop + for(w = 0; w < wL; w++) + for(j = 0; j < numVectors - w; j++) { + sp = DD[j]; + spd = D[j+w] + w; + k = trackTable[track] - w; + while(k--) + *sp++ += *spd++; + } + } else { // HOP_SIZE != 1 + for(w = 0; w < wL; w++) + for(j = 0; j < numVectors - w; j += HOP_SIZE) { + sp = DD[j]; + spd = D[j+w]+w; + for(k = 0; k < trackTable[track] - w; k += HOP_SIZE) { + *sp += *spd; + sp += HOP_SIZE; + spd += HOP_SIZE; + } + } + } +} + void audioDB::trackSequenceQueryNN(const char* dbName, const char* inFile, adb__queryResponse *adbQueryResponse){ initTables(dbName, inFile); @@ -108,7 +163,6 @@ query = queryCopy; // Make norm measurements relative to sequenceLength - unsigned w = sequenceLength-1; unsigned i,j; // Copy the L2 norm values to core to avoid disk random access later on @@ -269,10 +323,6 @@ unsigned processedTracks = 0; unsigned successfulTracks=0; - double* qp; - double* sp; - double* dp; - // build track offset table off_t *trackOffsetTable = new off_t[dbH->numFiles]; unsigned cumTrack=0; @@ -336,59 +386,8 @@ read(dbfid, data_buffer, trackTable[track] * sizeof(double) * dbH->dim); - // Sum products matrix - for(j=0; jdim; - sp=data_buffer+k*dbH->dim; - DD[j][k]=0.0; // Initialize matched filter array - dp=&D[j][k]; // point to correlation cell j,k - *dp=0.0; // initialize correlation cell - l=dbH->dim; // size of vectors - while(l--) - *dp+=*qp++**sp++; - } - - // Matched Filter - // HOP SIZE == 1 - double* spd; - if(HOP_SIZE==1){ // HOP_SIZE = shingleHop - for(w=0; w3 && usingTimes) { std::cerr << "meanQdur=" << meanQdur << " meanDBdur=" << meanDBdur[track] << std::endl; std::cerr.flush(); @@ -599,7 +598,6 @@ query = queryCopy; // Make norm measurements relative to sequenceLength - unsigned w = sequenceLength-1; unsigned i,j; // Copy the L2 norm values to core to avoid disk random access later on @@ -677,7 +675,9 @@ unsigned sIndexes[pointNN]; - unsigned k,l,n,track,trackOffset=0, HOP_SIZE=sequenceHop, wL=sequenceLength; + unsigned k,l,n,track,trackOffset=0; + unsigned const HOP_SIZE=sequenceHop; + unsigned const wL=sequenceLength; double thisDist; for(k=0; knumFiles]; unsigned cumTrack=0; @@ -826,59 +822,8 @@ read(dbfid, data_buffer, trackTable[track] * sizeof(double) * dbH->dim); - // Sum products matrix - for(j=0; jdim; - sp=data_buffer+k*dbH->dim; - DD[j][k]=0.0; // Initialize matched filter array - dp=&D[j][k]; // point to correlation cell j,k - *dp=0.0; // initialize correlation cell - l=dbH->dim; // size of vectors - while(l--) - *dp+=*qp++**sp++; - } - - // Matched Filter - // HOP SIZE == 1 - double* spd; - if(HOP_SIZE==1){ // HOP_SIZE = shingleHop - for(w=0; w3 && usingTimes) { std::cerr << "meanQdur=" << meanQdur << " meanDBdur=" << meanDBdur[track] << std::endl; std::cerr.flush();