Mercurial > hg > match-vamp
comparison src/DistanceMetric.cpp @ 145:ecfb4ada171b noise
Add a constant value (representing "noise") to each distance and sum
author | Chris Cannam |
---|---|
date | Fri, 16 Jan 2015 16:43:56 +0000 |
parents | 6914a6a01ffc |
children | b79151bb75af |
comparison
equal
deleted
inserted
replaced
144:254e16f831ee | 145:ecfb4ada171b |
---|---|
36 double | 36 double |
37 DistanceMetric::calcDistance(const vector<double> &f1, | 37 DistanceMetric::calcDistance(const vector<double> &f1, |
38 const vector<double> &f2) | 38 const vector<double> &f2) |
39 { | 39 { |
40 double d = 0; | 40 double d = 0; |
41 double sum1 = 0; | |
42 double sum2 = 0; | |
43 double sum = 0; | 41 double sum = 0; |
44 | 42 |
45 int featureSize = f1.size(); | 43 int featureSize = f1.size(); |
46 assert(int(f2.size()) == featureSize); | 44 assert(int(f2.size()) == featureSize); |
47 | 45 |
48 for (int i = 0; i < featureSize; i++) { | 46 for (int i = 0; i < featureSize; i++) { |
49 d += fabs(f1[i] - f2[i]); | 47 d += fabs(f1[i] - f2[i]); |
50 sum1 += fabs(f1[i]); | 48 sum += fabs(f1[i]) + fabs(f2[i]); |
51 sum2 += fabs(f2[i]); | |
52 } | 49 } |
53 | 50 |
54 sum = sum1 + sum2; | 51 double noise = 1e-3 * featureSize; |
55 | 52 d += noise; |
53 sum += noise; | |
54 | |
56 if (sum == 0) { | 55 if (sum == 0) { |
57 return 0; | 56 return 0; |
58 } | 57 } |
59 | 58 |
60 double distance = 0; | 59 double distance = 0; |