Mercurial > hg > qm-dsp
diff 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 |
line wrap: on
line diff
--- a/maths/MathUtilities.cpp Mon Jan 21 18:02:47 2008 +0000 +++ b/maths/MathUtilities.cpp Tue Jan 22 17:27:07 2008 +0000 @@ -219,3 +219,75 @@ return ( *(int*)a - *(int*)b ); } +void MathUtilities::normalise(double *data, int length, NormaliseType type) +{ + switch (type) { + + case NormaliseNone: return; + + case NormaliseUnitSum: + { + double sum = 0.0; + for (int i = 0; i < length; ++i) { + sum += data[i]; + } + if (sum != 0.0) { + for (int i = 0; i < length; ++i) { + data[i] /= sum; + } + } + } + break; + + case NormaliseUnitMax: + { + double max = 0.0; + for (int i = 0; i < length; ++i) { + if (fabs(data[i]) > max) { + max = fabs(data[i]); + } + } + if (max != 0.0) { + for (int i = 0; i < length; ++i) { + data[i] /= max; + } + } + } + break; + + } +} + +void MathUtilities::normalise(std::vector<double> &data, NormaliseType type) +{ + switch (type) { + + case NormaliseNone: return; + + case NormaliseUnitSum: + { + double sum = 0.0; + for (int i = 0; i < data.size(); ++i) sum += data[i]; + if (sum != 0.0) { + for (int i = 0; i < data.size(); ++i) data[i] /= sum; + } + } + break; + + case NormaliseUnitMax: + { + double max = 0.0; + for (int i = 0; i < data.size(); ++i) { + if (fabs(data[i]) > max) max = fabs(data[i]); + } + if (max != 0.0) { + for (int i = 0; i < data.size(); ++i) data[i] /= max; + } + } + break; + + } +} + + +