Visual Servoing Platform  version 3.6.1 under development (2024-11-15)
vpStatisticalTestHinkley.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 _vpStatisticalTestHinkley_h_
38 #define _vpStatisticalTestHinkley_h_
39 
40 #include <visp3/core/vpConfig.h>
41 
42 #include <visp3/core/vpStatisticalTestAbstract.h>
43 
44 BEGIN_VISP_NAMESPACE
89 {
90 protected:
91  float m_dmin2;
92  float m_alpha;
93  float m_Sk;
94  float m_Mk;
95  float m_Tk;
96  float m_Nk;
99  float m_h;
100  float m_k;
105  virtual void computeAlphaDelta();
106 
113  void computeMean(double signal);
114 
120  void computeSk(double signal);
121 
125  void computeMk();
126 
132  void computeTk(double signal);
133 
137  void computeNk();
138 
144 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
145  virtual vpMeanDriftType detectDownwardMeanDrift() override;
146 #else
148 #endif
149 
157 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
158  virtual vpMeanDriftType detectUpwardMeanDrift() override;
159 #else
161 #endif
162 
169 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
170  virtual bool updateStatistics(const float &signal) override;
171 #else
172  virtual bool updateStatistics(const float &signal);
173 #endif
174 
180 #if (VISP_CXX_STANDARD >= VISP_CXX_STANDARD_11)
181  virtual void updateTestSignals(const float &signal) override;
182 #else
183  virtual void updateTestSignals(const float &signal);
184 #endif
185 public:
195 
206  vpStatisticalTestHinkley(const float &alpha, const float &delta, const unsigned int &nbSamplesForInit = 30);
207 
217  vpStatisticalTestHinkley(const float &h, const float &k, const bool &computeAlphaDeltaFromStdev, const unsigned int &nbSamplesForInit = 30);
218 
228  vpStatisticalTestHinkley(const float &h, const float &k, const float &mean, const float &stdev);
229 
233  virtual ~vpStatisticalTestHinkley();
234 
240  inline float getAlpha() const { return m_alpha; }
241 
247  inline float getSk() const { return m_Sk; }
248 
254  inline float getMk() const { return m_Mk; }
255 
262  inline float getTk() const { return m_Tk; }
263 
269  inline float getNk() const { return m_Nk; }
270 
275  void init();
276 
285  void init(const float &alpha, const float &delta, const unsigned int &nbSamplesForInit);
286 
296  void init(const float &h, const float &k, const bool &computeAlphaDeltaFromStdev, const unsigned int &nbSamplesForInit);
297 
306  void init(const float &alpha, const float &delta, const float &mean);
307 
317  void init(const float &h, const float &k, const float &mean, const float &stdev);
318 
324  void setDelta(const float &delta);
325 
331  void setAlpha(const float &alpha);
332 };
333 END_VISP_NAMESPACE
334 #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.
This class implements the Hinkley's cumulative sum test.
float getAlpha() const
Get the threshold indicating that a mean drift occurs.
float getNk() const
Get the minimum of the test signal for upward mean drift .
float getTk() const
Get the test signal for upward mean drift..
float getSk() const
Get the test signal for downward mean drift.
float getMk() const
Get the maximum of the test signal for downward mean drift .