Mercurial > hg > qm-dsp
comparison maths/MathUtilities.cpp @ 34:ad645e404d0c
* Add range of normalise options to chromagram
* bit of tidying
author | cannam |
---|---|
date | Tue, 22 Jan 2008 17:27:07 +0000 |
parents | 2e3f5d2d62c1 |
children | 5bec06ecc88a |
comparison
equal
deleted
inserted
replaced
33:499d438b52ba | 34:ad645e404d0c |
---|---|
217 int MathUtilities::compareInt (const void * a, const void * b) | 217 int MathUtilities::compareInt (const void * a, const void * b) |
218 { | 218 { |
219 return ( *(int*)a - *(int*)b ); | 219 return ( *(int*)a - *(int*)b ); |
220 } | 220 } |
221 | 221 |
222 void MathUtilities::normalise(double *data, int length, NormaliseType type) | |
223 { | |
224 switch (type) { | |
225 | |
226 case NormaliseNone: return; | |
227 | |
228 case NormaliseUnitSum: | |
229 { | |
230 double sum = 0.0; | |
231 for (int i = 0; i < length; ++i) { | |
232 sum += data[i]; | |
233 } | |
234 if (sum != 0.0) { | |
235 for (int i = 0; i < length; ++i) { | |
236 data[i] /= sum; | |
237 } | |
238 } | |
239 } | |
240 break; | |
241 | |
242 case NormaliseUnitMax: | |
243 { | |
244 double max = 0.0; | |
245 for (int i = 0; i < length; ++i) { | |
246 if (fabs(data[i]) > max) { | |
247 max = fabs(data[i]); | |
248 } | |
249 } | |
250 if (max != 0.0) { | |
251 for (int i = 0; i < length; ++i) { | |
252 data[i] /= max; | |
253 } | |
254 } | |
255 } | |
256 break; | |
257 | |
258 } | |
259 } | |
260 | |
261 void MathUtilities::normalise(std::vector<double> &data, NormaliseType type) | |
262 { | |
263 switch (type) { | |
264 | |
265 case NormaliseNone: return; | |
266 | |
267 case NormaliseUnitSum: | |
268 { | |
269 double sum = 0.0; | |
270 for (int i = 0; i < data.size(); ++i) sum += data[i]; | |
271 if (sum != 0.0) { | |
272 for (int i = 0; i < data.size(); ++i) data[i] /= sum; | |
273 } | |
274 } | |
275 break; | |
276 | |
277 case NormaliseUnitMax: | |
278 { | |
279 double max = 0.0; | |
280 for (int i = 0; i < data.size(); ++i) { | |
281 if (fabs(data[i]) > max) max = fabs(data[i]); | |
282 } | |
283 if (max != 0.0) { | |
284 for (int i = 0; i < data.size(); ++i) data[i] /= max; | |
285 } | |
286 } | |
287 break; | |
288 | |
289 } | |
290 } | |
291 | |
292 | |
293 |