comparison audioDB.cpp @ 768:b9dbe4611dde

Adding Kullback-Leibler divergence as alternate distance function
author mas01mc
date Sat, 15 Oct 2011 17:28:07 +0000
parents 6d0d41604aba
children
comparison
equal deleted inserted replaced
767:6d0d41604aba 768:b9dbe4611dde
445 } 445 }
446 return 0; 446 return 0;
447 } 447 }
448 448
449 // Set no_unit_norm flag 449 // Set no_unit_norm flag
450 distance_kullback = args_info.distance_kullback_flag;
450 no_unit_norming = args_info.no_unit_norming_flag; 451 no_unit_norming = args_info.no_unit_norming_flag;
451 lsh_use_u_functions = args_info.lsh_use_u_functions_flag; 452 lsh_use_u_functions = args_info.lsh_use_u_functions_flag;
452 453
453 // LSH Index Command 454 // LSH Index Command
454 if(args_info.INDEX_given){ 455 if(args_info.INDEX_given){
917 reporter = new trackAveragingReporter< std::greater< NNresult > >(pointNN, trackNN, nfiles); 918 reporter = new trackAveragingReporter< std::greater< NNresult > >(pointNN, trackNN, nfiles);
918 break; 919 break;
919 case O2_SEQUENCE_QUERY: 920 case O2_SEQUENCE_QUERY:
920 case O2_N_SEQUENCE_QUERY: 921 case O2_N_SEQUENCE_QUERY:
921 qspec.params.accumulation = ADB_ACCUMULATION_PER_TRACK; 922 qspec.params.accumulation = ADB_ACCUMULATION_PER_TRACK;
922 qspec.params.distance = no_unit_norming ? ADB_DISTANCE_EUCLIDEAN : ADB_DISTANCE_EUCLIDEAN_NORMED; 923 if (distance_kullback)
924 qspec.params.distance = ADB_DISTANCE_KULLBACK_LEIBLER_DIVERGENCE;
925 else
926 qspec.params.distance = no_unit_norming ? ADB_DISTANCE_EUCLIDEAN : ADB_DISTANCE_EUCLIDEAN_NORMED;
923 qspec.params.npoints = pointNN; 927 qspec.params.npoints = pointNN;
924 qspec.params.ntracks = trackNN; 928 qspec.params.ntracks = trackNN;
925 switch(queryType) { 929 switch(queryType) {
926 case O2_SEQUENCE_QUERY: 930 case O2_SEQUENCE_QUERY:
927 if(!(qspec.refine.flags & ADB_REFINE_RADIUS)) { 931 if(!(qspec.refine.flags & ADB_REFINE_RADIUS)) {
939 break; 943 break;
940 } 944 }
941 break; 945 break;
942 case O2_ONE_TO_ONE_N_SEQUENCE_QUERY: 946 case O2_ONE_TO_ONE_N_SEQUENCE_QUERY:
943 qspec.params.accumulation = ADB_ACCUMULATION_ONE_TO_ONE; 947 qspec.params.accumulation = ADB_ACCUMULATION_ONE_TO_ONE;
944 qspec.params.distance = no_unit_norming ? ADB_DISTANCE_EUCLIDEAN : ADB_DISTANCE_EUCLIDEAN_NORMED; 948 if (distance_kullback)
949 qspec.params.distance = ADB_DISTANCE_KULLBACK_LEIBLER_DIVERGENCE;
950 else
951 qspec.params.distance = no_unit_norming ? ADB_DISTANCE_EUCLIDEAN : ADB_DISTANCE_EUCLIDEAN_NORMED;
945 qspec.params.npoints = 0; 952 qspec.params.npoints = 0;
946 qspec.params.ntracks = 0; 953 qspec.params.ntracks = 0;
947 if(!(qspec.refine.flags & ADB_REFINE_RADIUS)) { 954 if(!(qspec.refine.flags & ADB_REFINE_RADIUS)) {
948 error("query-type not yet supported"); 955 error("query-type not yet supported");
949 } else { 956 } else {
1094 spec.qid.datum = NULL; /* full db sample */ 1101 spec.qid.datum = NULL; /* full db sample */
1095 } 1102 }
1096 spec.qid.sequence_length = sequenceLength; 1103 spec.qid.sequence_length = sequenceLength;
1097 spec.qid.flags |= usingQueryPoint ? 0 : ADB_QID_FLAG_EXHAUSTIVE; 1104 spec.qid.flags |= usingQueryPoint ? 0 : ADB_QID_FLAG_EXHAUSTIVE;
1098 spec.qid.sequence_start = queryPoint; 1105 spec.qid.sequence_start = queryPoint;
1099 1106 if (distance_kullback)
1100 spec.params.distance = no_unit_norming ? ADB_DISTANCE_EUCLIDEAN : ADB_DISTANCE_EUCLIDEAN_NORMED; 1107 spec.params.distance = ADB_DISTANCE_KULLBACK_LEIBLER_DIVERGENCE;
1108 else
1109 spec.params.distance = no_unit_norming ? ADB_DISTANCE_EUCLIDEAN : ADB_DISTANCE_EUCLIDEAN_NORMED;
1101 spec.params.accumulation = ADB_ACCUMULATION_DB; 1110 spec.params.accumulation = ADB_ACCUMULATION_DB;
1102 spec.params.npoints = nsamples; 1111 spec.params.npoints = nsamples;
1103 1112
1104 if(!(results = audiodb_sample_spec(adb, &spec))) { 1113 if(!(results = audiodb_sample_spec(adb, &spec))) {
1105 error("error in audiodb_sample_spec"); 1114 error("error in audiodb_sample_spec");