--- /dev/null
+// =========================================================================
+// @author Leonardo Florez Valencia
+// @email florez-l@javeriana.edu.co
+// =========================================================================
+#ifndef __fpa__Common__PeakDetector__h__
+#define __fpa__Common__PeakDetector__h__
+
+#include <vector>
+#include <fpa/fpa_export.h>
+#include <fpa/Common/IncrementalMeanAndVariance.h>
+
+namespace fpa
+{
+ namespace Common
+ {
+ /**
+ */
+ /**
+ * https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data
+ */
+ class FPA_EXPORT PeakDetector
+ {
+ public:
+ typedef PeakDetector Self;
+
+ enum TPeak
+ {
+ NoPeak = 0,
+ PosPeak,
+ NegPeak
+ };
+
+ public:
+ PeakDetector( );
+ virtual ~PeakDetector( );
+
+ unsigned long GetKernelSize( ) const;
+ double GetThreshold( ) const;
+ double GetInfluence( ) const;
+
+ void SetKernelSize( unsigned long k );
+ void SetThreshold( double t );
+ void SetInfluence( double i );
+
+ const std::vector< double >& GetXValues( ) const;
+ const std::vector< double >& GetYValues( ) const;
+ const std::vector< double >& GetFilteredYValues( ) const;
+ const std::vector< double >& GetAverages( ) const;
+ const std::vector< double >& GetDeviations( ) const;
+ const std::vector< TPeak >& GetPeaks( ) const;
+
+ void Clear( );
+ unsigned long GetNumberOfSamples( ) const;
+ TPeak AddValue( double x, double y );
+
+ protected:
+ unsigned long m_K;
+ double m_T;
+ double m_I;
+
+ std::vector< double > m_X;
+ std::vector< double > m_Y;
+ std::vector< double > m_YF;
+ std::vector< double > m_Avg;
+ std::vector< double > m_STD;
+ std::vector< TPeak > m_Peaks;
+ fpa::Common::IncrementalMeanAndVariance m_MeanAndVar;
+ };
+
+ } // ecapseman
+
+} // ecapseman
+
+#endif // __fpa__Common__PeakDetector__h__
+// eof - $RCSfile$