Mercurial > hg > libxtract
diff src/scalar.c @ 215:44401945d850
Add xtract_peak() determines whether the 'current' value is a peak
author | Jamie Bullock <jamie@jamiebullock.com> |
---|---|
date | Tue, 03 Jun 2014 21:17:51 +0100 |
parents | ef80f7c52c6d |
children | eb2ab9b70c29 |
line wrap: on
line diff
--- a/src/scalar.c Tue Jun 03 21:17:07 2014 +0100 +++ b/src/scalar.c Tue Jun 03 21:17:51 2014 +0100 @@ -1002,3 +1002,36 @@ return XTRACT_SUCCESS; } +int xtract_peak_picker(const double *data, const int N, const void *argv, double *result) +{ + double threshold = *(double *)argv; + double current = data[N - 1]; + double average = 0.0; + double maximum = -DBL_MAX; + + for (uint32_t n = 0; n < N; ++n) + { + average += data[n]; + if (data[n] > maximum) + { + maximum = data[n]; + } + } + + average /= (double)N; + + if (current != maximum) + { + return XTRACT_NO_RESULT; + } + + if (current < average + threshold) + { + return XTRACT_NO_RESULT; + } + + return XTRACT_SUCCESS; + +} + +