45 #include <visp3/core/vpDebug.h>
46 #include <visp3/core/vpHinkley.h>
48 #include <visp3/core/vpMath.h>
92 : dmin2(delta_val / 2.), alpha(alpha_val), nsignal(0), mean(0), Sk(0), Mk(0), Tk(0), Nk(0)
186 vpCDEBUG(2) <<
"alpha: " << alpha <<
" dmin2: " << dmin2 <<
" signal: " << signal <<
" Sk: " << Sk <<
" Mk: " << Mk;
189 if ((Mk - Sk) > alpha)
193 if (VP_DEBUG_MODE >= 2) {
196 std::cout <<
"noJump " << std::endl;
199 std::cout <<
"downWardJump " << std::endl;
202 std::cout <<
"upwardJump " << std::endl;
211 vpCDEBUG(2) <<
"\n*** Reset the Hinkley test ***\n";
246 vpCDEBUG(2) <<
"alpha: " << alpha <<
" dmin2: " << dmin2 <<
" signal: " << signal <<
" Tk: " << Tk <<
" Nk: " << Nk;
249 if ((Tk - Nk) > alpha)
253 if (VP_DEBUG_MODE >= 2) {
256 std::cout <<
"noJump " << std::endl;
259 std::cout <<
"downWardJump " << std::endl;
262 std::cout <<
"upWardJump " << std::endl;
270 vpCDEBUG(2) <<
"\n*** Reset the Hinkley test ***\n";
307 vpCDEBUG(2) <<
"alpha: " << alpha <<
" dmin2: " << dmin2 <<
" signal: " << signal <<
" Sk: " << Sk <<
" Mk: " << Mk
308 <<
" Tk: " << Tk <<
" Nk: " << Nk << std::endl;
311 if ((Mk - Sk) > alpha)
313 else if ((Tk - Nk) > alpha)
317 if (VP_DEBUG_MODE >= 2) {
320 std::cout <<
"noJump " << std::endl;
323 std::cout <<
"downWardJump " << std::endl;
326 std::cout <<
"upwardJump " << std::endl;
335 vpCDEBUG(2) <<
"\n*** Reset the Hinkley test ***\n";
358 void vpHinkley::computeMean(
double signal)
366 if ((std::fabs(Mk - Sk) <= std::fabs(
vpMath::maximum(Mk, Sk)) * std::numeric_limits<double>::epsilon()) &&
367 (std::fabs(Tk - Nk) <= std::fabs(
vpMath::maximum(Tk, Nk)) * std::numeric_limits<double>::epsilon()))
371 mean = (mean * (nsignal - 1) + signal) / (nsignal);
380 void vpHinkley::computeSk(
double signal)
384 Sk += signal - mean + dmin2;
391 void vpHinkley::computeMk()
402 void vpHinkley::computeTk(
double signal)
406 Tk += signal - mean - dmin2;
413 void vpHinkley::computeNk()
423 std::cout <<
" No jump detected " << std::endl;
426 std::cout <<
" Jump downward detected " << std::endl;
429 std::cout <<
" Jump upward detected " << std::endl;
432 std::cout <<
" Jump detected " << std::endl;
void setDelta(double delta)
vpHinkleyJumpType testDownwardJump(double signal)
void setAlpha(double alpha)
static void print(vpHinkleyJumpType jump)
vpHinkleyJumpType testUpwardJump(double signal)
vpHinkleyJumpType testDownUpwardJump(double signal)
static Type maximum(const Type &a, const Type &b)