/* * © Copyright 2014 – Urheberrechtshinweis * Alle Rechte vorbehalten / All Rights Reserved * * Programmcode ist urheberrechtlich geschuetzt. * Das Urheberrecht liegt, soweit nicht ausdruecklich anders gekennzeichnet, bei Frank Ebner. * Keine Verwendung ohne explizite Genehmigung. * (vgl. § 106 ff UrhG / § 97 UrhG) */ #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