Mercurial > hg > beaglert
view include/stats.hpp @ 151:e9c9404e3d1f ClockSync
Pff partially working. No PID. When setting the audio clock on the bbb to 44098 the master and slave clock keep diverging instead of converging ...
author | Giulio Moro <giuliomoro@yahoo.it> |
---|---|
date | Tue, 22 Sep 2015 04:10:07 +0100 |
parents | 5edc6d0713ef |
children |
line wrap: on
line source
#ifndef STATS_HPP_INCLUDED #define STATS_HPP_INCLUDED #include <stdlib.h> #include <stdio.h> #include <string.h> template<class TYPE> class MovingAverage{ private: TYPE* array; int length; bool bufferFull; int pointer; TYPE sum; double scale; double average; void dealloc(){ free(array); // delete array; } void init(int aLength){ length=aLength; scale=1.0/length; // array= new TYPE(length); // for some reason this causes memory corruption, so I am using malloc() instead... array=(TYPE*)malloc(sizeof(TYPE)*length); sum=0; if(array==NULL) printf("Error while allocating array\n"); memset(array, 0, sizeof(TYPE)*length); reset(); } public: MovingAverage(){ init(0); } MovingAverage(int aLength){ init(aLength); } ~MovingAverage(){ dealloc(); } int getLength(){ return bufferFull ? length : pointer; } void setLength(int aLength){ dealloc(); init(aLength); } double add(TYPE newElement){ sum-=array[pointer]; array[pointer]=newElement; sum+=newElement; if(bufferFull==true){ average=sum*scale; } else{ average=sum/(double)(1+pointer); } pointer++; if(pointer==length){ pointer=0; bufferFull=true; } return average; } double getAverage(){ return average; } void reset(){ pointer=0; bufferFull=false; } }; #endif /* STATS_HPP_INCLUDED */