Mercurial > hg > libxtract
comparison 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 |
comparison
equal
deleted
inserted
replaced
214:f28f66faa016 | 215:44401945d850 |
---|---|
1000 } | 1000 } |
1001 | 1001 |
1002 return XTRACT_SUCCESS; | 1002 return XTRACT_SUCCESS; |
1003 } | 1003 } |
1004 | 1004 |
1005 int xtract_peak_picker(const double *data, const int N, const void *argv, double *result) | |
1006 { | |
1007 double threshold = *(double *)argv; | |
1008 double current = data[N - 1]; | |
1009 double average = 0.0; | |
1010 double maximum = -DBL_MAX; | |
1011 | |
1012 for (uint32_t n = 0; n < N; ++n) | |
1013 { | |
1014 average += data[n]; | |
1015 if (data[n] > maximum) | |
1016 { | |
1017 maximum = data[n]; | |
1018 } | |
1019 } | |
1020 | |
1021 average /= (double)N; | |
1022 | |
1023 if (current != maximum) | |
1024 { | |
1025 return XTRACT_NO_RESULT; | |
1026 } | |
1027 | |
1028 if (current < average + threshold) | |
1029 { | |
1030 return XTRACT_NO_RESULT; | |
1031 } | |
1032 | |
1033 return XTRACT_SUCCESS; | |
1034 | |
1035 } | |
1036 | |
1037 |