Mercurial > hg > audiodb
comparison query.cpp @ 427:adaa6a688a04 api-inversion
Move sequence_foo() functions out of audioDB:: namespace...
... and into the internals header, mostly to get them out of the way.
That means they have to be inline, which is probably suboptimal but will
do for now.
author | mas01cr |
---|---|
date | Wed, 24 Dec 2008 10:55:24 +0000 |
parents | 4a22a0bdf9a9 |
children | 2d14d21f826b |
comparison
equal
deleted
inserted
replaced
426:4a22a0bdf9a9 | 427:adaa6a688a04 |
---|---|
143 return k; | 143 return k; |
144 error("Key not found",key); | 144 error("Key not found",key); |
145 return O2_ERR_KEYNOTFOUND; | 145 return O2_ERR_KEYNOTFOUND; |
146 } | 146 } |
147 | 147 |
148 // This is a common pattern in sequence queries: what we are doing is | |
149 // taking a window of length seqlen over a buffer of length length, | |
150 // and placing the sum of the elements in that window in the first | |
151 // element of the window: thus replacing all but the last seqlen | |
152 // elements in the buffer with the corresponding windowed sum. | |
153 void audioDB::sequence_sum(double *buffer, int length, int seqlen) { | |
154 double tmp1, tmp2, *ps; | |
155 int j, w; | |
156 | |
157 tmp1 = *buffer; | |
158 j = 1; | |
159 w = seqlen - 1; | |
160 while(w--) { | |
161 *buffer += buffer[j++]; | |
162 } | |
163 ps = buffer + 1; | |
164 w = length - seqlen; // +1 - 1 | |
165 while(w--) { | |
166 tmp2 = *ps; | |
167 if(isfinite(tmp1)) { | |
168 *ps = *(ps - 1) - tmp1 + *(ps + seqlen - 1); | |
169 } else { | |
170 for(int i = 1; i < seqlen; i++) { | |
171 *ps += *(ps + i); | |
172 } | |
173 } | |
174 tmp1 = tmp2; | |
175 ps++; | |
176 } | |
177 } | |
178 | |
179 // In contrast to sequence_sum() above, sequence_sqrt() and | |
180 // sequence_average() below are simple mappers across the sequence. | |
181 void audioDB::sequence_sqrt(double *buffer, int length, int seqlen) { | |
182 int w = length - seqlen + 1; | |
183 while(w--) { | |
184 *buffer = sqrt(*buffer); | |
185 buffer++; | |
186 } | |
187 } | |
188 | |
189 void audioDB::sequence_average(double *buffer, int length, int seqlen) { | |
190 int w = length - seqlen + 1; | |
191 while(w--) { | |
192 *buffer /= seqlen; | |
193 buffer++; | |
194 } | |
195 } | |
196 | |
197 void audioDB::initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD) { | 148 void audioDB::initialize_arrays(int track, unsigned int numVectors, double *query, double *data_buffer, double **D, double **DD) { |
198 unsigned int j, k, l, w; | 149 unsigned int j, k, l, w; |
199 double *dp, *qp, *sp; | 150 double *dp, *qp, *sp; |
200 | 151 |
201 const unsigned HOP_SIZE = sequenceHop; | 152 const unsigned HOP_SIZE = sequenceHop; |
338 *qp = new double[*nvp * dbH->dim]; | 289 *qp = new double[*nvp * dbH->dim]; |
339 memcpy(*qp, indata+sizeof(int), *nvp * dbH->dim * sizeof(double)); | 290 memcpy(*qp, indata+sizeof(int), *nvp * dbH->dim * sizeof(double)); |
340 *qnp = new double[*nvp]; | 291 *qnp = new double[*nvp]; |
341 audiodb_l2norm_buffer(*qp, dbH->dim, *nvp, *qnp); | 292 audiodb_l2norm_buffer(*qp, dbH->dim, *nvp, *qnp); |
342 | 293 |
343 sequence_sum(*qnp, *nvp, sequenceLength); | 294 audiodb_sequence_sum(*qnp, *nvp, sequenceLength); |
344 sequence_sqrt(*qnp, *nvp, sequenceLength); | 295 audiodb_sequence_sqrt(*qnp, *nvp, sequenceLength); |
345 | 296 |
346 if (usingPower) { | 297 if (usingPower) { |
347 *qpp = new double[*nvp]; | 298 *qpp = new double[*nvp]; |
348 if (lseek(powerfd, sizeof(int), SEEK_SET) == (off_t) -1) { | 299 if (lseek(powerfd, sizeof(int), SEEK_SET) == (off_t) -1) { |
349 error("error seeking to data", powerFileName, "lseek"); | 300 error("error seeking to data", powerFileName, "lseek"); |
354 } | 305 } |
355 if ((unsigned) count != *nvp * sizeof(double)) { | 306 if ((unsigned) count != *nvp * sizeof(double)) { |
356 error("short read", powerFileName); | 307 error("short read", powerFileName); |
357 } | 308 } |
358 | 309 |
359 sequence_sum(*qpp, *nvp, sequenceLength); | 310 audiodb_sequence_sum(*qpp, *nvp, sequenceLength); |
360 sequence_average(*qpp, *nvp, sequenceLength); | 311 audiodb_sequence_average(*qpp, *nvp, sequenceLength); |
361 } | 312 } |
362 | 313 |
363 if (usingTimes) { | 314 if (usingTimes) { |
364 unsigned int k; | 315 unsigned int k; |
365 *mqdp = 0.0; | 316 *mqdp = 0.0; |
452 | 403 |
453 Uns32T trackIndexOffset = trackOffsetTable[queryIndex]/dbH->dim; // Convert num data elements to num vectors | 404 Uns32T trackIndexOffset = trackOffsetTable[queryIndex]/dbH->dim; // Convert num data elements to num vectors |
454 // Copy L2 norm partial-sum coefficients | 405 // Copy L2 norm partial-sum coefficients |
455 assert(*qnp = new double[*nvp]); | 406 assert(*qnp = new double[*nvp]); |
456 memcpy(*qnp, l2normTable+trackIndexOffset, *nvp*sizeof(double)); | 407 memcpy(*qnp, l2normTable+trackIndexOffset, *nvp*sizeof(double)); |
457 sequence_sum(*qnp, *nvp, sequenceLength); | 408 audiodb_sequence_sum(*qnp, *nvp, sequenceLength); |
458 sequence_sqrt(*qnp, *nvp, sequenceLength); | 409 audiodb_sequence_sqrt(*qnp, *nvp, sequenceLength); |
459 | 410 |
460 if( usingPower ){ | 411 if( usingPower ){ |
461 // Copy Power partial-sum coefficients | 412 // Copy Power partial-sum coefficients |
462 assert(*qpp = new double[*nvp]); | 413 assert(*qpp = new double[*nvp]); |
463 memcpy(*qpp, powerTable+trackIndexOffset, *nvp*sizeof(double)); | 414 memcpy(*qpp, powerTable+trackIndexOffset, *nvp*sizeof(double)); |
464 sequence_sum(*qpp, *nvp, sequenceLength); | 415 audiodb_sequence_sum(*qpp, *nvp, sequenceLength); |
465 sequence_average(*qpp, *nvp, sequenceLength); | 416 audiodb_sequence_average(*qpp, *nvp, sequenceLength); |
466 } | 417 } |
467 | 418 |
468 if (usingTimes) { | 419 if (usingTimes) { |
469 unsigned int k; | 420 unsigned int k; |
470 *mqdp = 0.0; | 421 *mqdp = 0.0; |
525 memcpy(*spp, powerTable, *dvp * sizeof(double)); | 476 memcpy(*spp, powerTable, *dvp * sizeof(double)); |
526 } | 477 } |
527 | 478 |
528 for(unsigned int i = 0; i < dbH->numFiles; i++){ | 479 for(unsigned int i = 0; i < dbH->numFiles; i++){ |
529 if(trackTable[i] >= sequenceLength) { | 480 if(trackTable[i] >= sequenceLength) { |
530 sequence_sum(snpp, trackTable[i], sequenceLength); | 481 audiodb_sequence_sum(snpp, trackTable[i], sequenceLength); |
531 sequence_sqrt(snpp, trackTable[i], sequenceLength); | 482 audiodb_sequence_sqrt(snpp, trackTable[i], sequenceLength); |
532 | 483 |
533 if (usingPower) { | 484 if (usingPower) { |
534 sequence_sum(sppp, trackTable[i], sequenceLength); | 485 audiodb_sequence_sum(sppp, trackTable[i], sequenceLength); |
535 sequence_average(sppp, trackTable[i], sequenceLength); | 486 audiodb_sequence_average(sppp, trackTable[i], sequenceLength); |
536 } | 487 } |
537 } | 488 } |
538 snpp += trackTable[i]; | 489 snpp += trackTable[i]; |
539 if (usingPower) { | 490 if (usingPower) { |
540 sppp += trackTable[i]; | 491 sppp += trackTable[i]; |