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