Mercurial > hg > audiodb
changeset 208:cb126d467344 refactoring
New initialize_arrays() helper routine for remaining queries.
And so it begins...
author | mas01cr |
---|---|
date | Wed, 28 Nov 2007 17:46:02 +0000 |
parents | 861e4bc95547 |
children | c9722e12acae |
files | audioDB.h query.cpp |
diffstat | 2 files changed, 61 insertions(+), 115 deletions(-) [+] |
line wrap: on
line diff
--- 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);
--- 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; j<numVectors;j++){ - D[j]=new double[trackTable[track]]; - assert(D[j]); + initialize_arrays(track, numVectors, query, data_buffer, D, DD); - } - - // Matched filter matrix - for(j=0; j<numVectors;j++){ - 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; - } - } - } - if(verbosity>3 && 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; k<pointNN; k++){ @@ -759,10 +759,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; @@ -826,59 +822,8 @@ read(dbfid, data_buffer, trackTable[track] * sizeof(double) * dbH->dim); - // Sum products matrix - for(j=0; j<numVectors;j++){ - D[j]=new double[trackTable[track]]; - assert(D[j]); + initialize_arrays(track, numVectors, query, data_buffer, D, DD); - } - - // Matched filter matrix - for(j=0; j<numVectors;j++){ - 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; - } - } - } - if(verbosity>3 && usingTimes) { std::cerr << "meanQdur=" << meanQdur << " meanDBdur=" << meanDBdur[track] << std::endl; std::cerr.flush();