Mercurial > hg > audiodb
comparison audioDB-internals.h @ 768:b9dbe4611dde
Adding Kullback-Leibler divergence as alternate distance function
author | mas01mc |
---|---|
date | Sat, 15 Oct 2011 17:28:07 +0000 |
parents | ddf08008d45b |
children |
comparison
equal
deleted
inserted
replaced
767:6d0d41604aba | 768:b9dbe4611dde |
---|---|
270 result += *p++ * *q++; | 270 result += *p++ * *q++; |
271 } | 271 } |
272 return result; | 272 return result; |
273 } | 273 } |
274 | 274 |
275 static inline double audiodb_kullback_leibler(double *p, double *q, size_t count) { | |
276 double a,b, tmp1, tmp2, result = 0; | |
277 while(count--){ | |
278 a = *p++; | |
279 b = *q++; | |
280 tmp1 = a * log( a / b ); | |
281 if(isnan(tmp1)) | |
282 tmp1=0.0; | |
283 tmp2 = b * log( b / a ); | |
284 if(isnan(tmp2)) | |
285 tmp2=0.0; | |
286 result += ( tmp1 + tmp2 ) / 2.0; | |
287 } | |
288 return result; | |
289 } | |
290 | |
291 | |
275 static inline void audiodb_l2norm_buffer(double *d, size_t dim, size_t nvectors, double *l) { | 292 static inline void audiodb_l2norm_buffer(double *d, size_t dim, size_t nvectors, double *l) { |
276 while(nvectors--) { | 293 while(nvectors--) { |
277 double *d1 = d; | 294 double *d1 = d; |
278 double *d2 = d; | 295 double *d2 = d; |
279 *l++ = audiodb_dot_product(d1, d2, dim); | 296 *l++ = audiodb_dot_product(d1, d2, dim); |
384 #define ADB_MAXSTR (512U) | 401 #define ADB_MAXSTR (512U) |
385 #define ADB_FILETABLE_ENTRY_SIZE (256U) | 402 #define ADB_FILETABLE_ENTRY_SIZE (256U) |
386 #define ADB_TRACKTABLE_ENTRY_SIZE (sizeof(uint32_t)) | 403 #define ADB_TRACKTABLE_ENTRY_SIZE (sizeof(uint32_t)) |
387 #define ADB_DISTANCE_TOLERANCE (1e-6) | 404 #define ADB_DISTANCE_TOLERANCE (1e-6) |
388 | 405 |
389 #define ADB_DEFAULT_DATASIZE (1355U) /* in MB */ | 406 #define ADB_DEFAULT_DATASIZE (2000U) /* in MB */ |
390 #define ADB_DEFAULT_NTRACKS (20000U) | 407 #define ADB_DEFAULT_NTRACKS (200000U) |
391 #define ADB_DEFAULT_DATADIM (9U) | 408 #define ADB_DEFAULT_DATADIM (12U) |
392 | 409 |
393 #define ADB_FIXME_LARGE_ADB_SIZE (ADB_DEFAULT_DATASIZE+1) | 410 #define ADB_FIXME_LARGE_ADB_SIZE (ADB_DEFAULT_DATASIZE+1) |
394 #define ADB_FIXME_LARGE_ADB_NTRACKS (ADB_DEFAULT_NTRACKS+1) | 411 #define ADB_FIXME_LARGE_ADB_NTRACKS (ADB_DEFAULT_NTRACKS+1) |
395 | 412 |
396 #define ADB_OLD_MAGIC ('O'|'2'<<8|'D'<<16|'B'<<24) | 413 #define ADB_OLD_MAGIC ('O'|'2'<<8|'D'<<16|'B'<<24) |