Mercurial > hg > match-vamp
comparison src/DistanceMetric.cpp @ 197:547bea29ad89 re-minimise
Increase noise for compact types
author | Chris Cannam |
---|---|
date | Fri, 27 Feb 2015 09:07:54 +0000 |
parents | fa005e5e0953 |
children | 827176d3b6ec |
comparison
equal
deleted
inserted
replaced
196:fa005e5e0953 | 197:547bea29ad89 |
---|---|
107 double eps = 1e-16; | 107 double eps = 1e-16; |
108 | 108 |
109 assert(f2.size() == f1.size()); | 109 assert(f2.size() == f1.size()); |
110 int featureSize = static_cast<int>(f1.size()); | 110 int featureSize = static_cast<int>(f1.size()); |
111 | 111 |
112 double minNoise = 0.0; | |
113 #ifdef USE_COMPACT_TYPES | |
114 minNoise = 1.0 / m_params.scale; | |
115 #endif | |
116 | |
112 if (m_params.metric == Cosine) { | 117 if (m_params.metric == Cosine) { |
113 | 118 |
114 double num = 0, denom1 = 0, denom2 = 0; | 119 double num = 0, denom1 = 0, denom2 = 0; |
115 | 120 |
116 for (int i = 0; i < featureSize; ++i) { | 121 for (int i = 0; i < featureSize; ++i) { |
120 } | 125 } |
121 | 126 |
122 d = 1.0 - (num / (eps + sqrt(denom1 * denom2))); | 127 d = 1.0 - (num / (eps + sqrt(denom1 * denom2))); |
123 | 128 |
124 if (m_params.noise == AddNoise) { | 129 if (m_params.noise == AddNoise) { |
125 d += 1e-2; | 130 double noise = 1e-2; |
131 if (noise < minNoise) noise = minNoise; | |
132 d += noise; | |
126 } | 133 } |
127 if (d > 1.0) d = 1.0; | 134 if (d > 1.0) d = 1.0; |
128 | 135 |
129 return scaleAndTally(d); // normalisation param ignored | 136 return scaleAndTally(d); // normalisation param ignored |
130 } | 137 } |
141 sum += fabs(f1[i]) + fabs(f2[i]); | 148 sum += fabs(f1[i]) + fabs(f2[i]); |
142 } | 149 } |
143 d = sqrt(d); | 150 d = sqrt(d); |
144 } | 151 } |
145 | 152 |
146 double noise = 1e-3 * featureSize; | |
147 if (m_params.noise == AddNoise) { | 153 if (m_params.noise == AddNoise) { |
154 double noise = 1e-3 * featureSize; | |
155 if (noise < minNoise) noise = minNoise; | |
148 d += noise; | 156 d += noise; |
149 sum += noise; | 157 sum += noise; |
150 } | 158 } |
151 | 159 |
152 if (sum == 0) { | 160 if (sum == 0) { |