Visual Servoing Platform  version 3.6.1 under development (2024-11-15)
vpStatisticalTestMeanAdjustedCUSUM.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2024 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See https://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  */
31 
37 #ifndef _vpStatisticalTestMeanAdjustedCUSUM_h_
38 #define _vpStatisticalTestMeanAdjustedCUSUM_h_
39 
40 #include <visp3/core/vpConfig.h>
41 
42 #include <visp3/core/vpStatisticalTestAbstract.h>
43 
44 BEGIN_VISP_NAMESPACE
82 {
83 protected:
84  float m_delta;
85  float m_h;
87  float m_half_delta;
88  float m_k;
89  float m_sminus;
90  float m_splus;
95  virtual void computeDeltaAndLimits();
96 
104 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
105  virtual vpMeanDriftType detectDownwardMeanDrift() override;
106 #else
108 #endif
109 
115 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
116  virtual vpMeanDriftType detectUpwardMeanDrift() override;
117 #else
119 #endif
120 
127 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
128  virtual bool updateStatistics(const float &signal) override;
129 #else
130  virtual bool updateStatistics(const float &signal);
131 #endif
132 
138 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
139  virtual void updateTestSignals(const float &signal) override;
140 #else
141  virtual void updateTestSignals(const float &signal);
142 #endif
143 public:
154  vpStatisticalTestMeanAdjustedCUSUM(const float &h = 4.f, const float &k = 1.f, const unsigned int &nbPtsForStats = 30);
155 
162  inline float getDelta() const
163  {
164  return m_delta;
165  }
166 
172  inline float getH() const
173  {
174  return m_h;
175  }
176 
182  inline float getK() const
183  {
184  return m_k;
185  }
186 
192  inline float getTestSignalMinus() const
193  {
194  return m_sminus;
195  }
196 
202  inline float getTestSignalPlus() const
203  {
204  return m_splus;
205  }
206 
216  void init(const float &h, const float &k, const unsigned int &nbPtsForStats);
217 
227  void init(const float &delta, const float &limitDown, const float &limitUp, const unsigned int &nbPtsForStats);
228 
239  void init(const float &h, const float &k, const float &mean, const float &stdev);
240 
250  void init(const float &delta, const float &limitDown, const float &limitUp, const float &mean, const float &stdev);
251 
257  inline void setDelta(const float &delta)
258  {
259  m_delta = delta;
260  m_half_delta = 0.5f * delta;
261  }
262 
269  inline void setLimits(const float &limitDown, const float &limitUp)
270  {
271  m_limitDown = limitDown;
272  m_limitUp = limitUp;
273  }
274 };
275 END_VISP_NAMESPACE
276 #endif
Base class for methods detecting the drift of the mean of a process.
vpMeanDriftType
Enum that indicates if a drift of the mean occurred.
virtual vpMeanDriftType detectUpwardMeanDrift()=0
Detects if a upward mean drift occurred.
void init()
(Re)Initialize the algorithm.
virtual bool updateStatistics(const float &signal)
Update m_s and if enough values are available, compute the mean, the standard deviation and the limit...
virtual void updateTestSignals(const float &signal)=0
Update the test signals.
virtual vpMeanDriftType detectDownwardMeanDrift()=0
Detects if a downward mean drift occurred.
Class that permits to perform a mean adjusted Cumulative Sum test.
float getTestSignalMinus() const
Get the latest value of the test signal for downward jumps of the mean.
float getTestSignalPlus() const
Get the latest value of the test signal for upward jumps of the mean.
void setDelta(const float &delta)
Set the slack of the CUSUM test, i.e. the minimum value of the jumps we want to detect.
void setLimits(const float &limitDown, const float &limitUp)
Set the upward and downward jump limits.
float getDelta() const
Get the slack of the CUSUM test, i.e. amplitude of mean shift we want to be able to detect.
float getK() const
Get the detection factor.