#ifndef MOVINGSTDDEVTS_H #define MOVINGSTDDEVTS_H #include "MovingAverageTS.h" /** * moving stadnard-deviation using a given time-region */ template class MovingStdDevTS { private: MovingAverageTS avg; MovingAverageTS avg2; public: /** ctor with the window-size to use */ MovingStdDevTS(const Timestamp window, const T zeroElement) : avg(window, zeroElement), avg2(window, zeroElement) { ; } /** add a new entry */ void add(const Timestamp ts, const T& data) { // E(x) avg.add(ts, data); // E(x^2) avg2.add(ts, data*data); } /** get the current std-dev */ T get() const { const double e = avg.get(); const double e2 = avg2.get(); const double var = e2 - e*e; //if (var < 0) {return 0;} return std::sqrt(var); } }; #endif // MOVINGSTDDEVTS_H