]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Generic/PeakDetector.h
cc8308badf2a37792cad29e50c7ee7bb653048c4
[FrontAlgorithms.git] / lib / fpa / Generic / PeakDetector.h
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5
6 #ifndef __fpa__Generic__PeakDetector__h__
7 #define __fpa__Generic__PeakDetector__h__
8
9 #include <fpa/fpa_export.h>
10 #include <vector>
11
12 namespace fpa
13 {
14   namespace Generic
15   {
16     /**
17      * https://stackoverflow.com/questions/22583391/peak-signal-detection-in-realtime-timeseries-data
18      */
19     class FPA_EXPORT PeakDetector
20     {
21     public:
22       typedef PeakDetector Self;
23
24       enum TPeak
25       {
26         NoPeak = 0,
27         PosPeak,
28         NegPeak
29       };
30
31     public:
32       PeakDetector( );
33       virtual ~PeakDetector( );
34
35       unsigned long GetKernelSize( ) const;
36       double GetThreshold( ) const;
37       double GetInfluence( ) const;
38
39       void SetKernelSize( unsigned long k );
40       void SetThreshold( double t );
41       void SetInfluence( double i );
42
43       void Clear( );
44       unsigned long GetNumberOfSamples( ) const;
45       TPeak AddValue( double x, double y );
46
47     protected:
48       unsigned long m_K;
49       double m_T;
50       double m_I;
51
52       std::vector< double > m_X;
53       std::vector< double > m_Y;
54       std::vector< double > m_YF;
55       std::vector< double > m_Avg;
56       std::vector< double > m_STD;
57       std::vector< TPeak >  m_Peaks;
58       double m_Mean;
59       double m_Vari;
60     };
61
62   } // ecapseman
63
64 } // ecapseman
65
66 #endif // __fpa__Generic__PeakDetector__h__
67
68 // eof - $RCSfile$