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;
+    
+}
+
+