1 #ifndef ROLLINGAVERAGE_H 2 #define ROLLINGAVERAGE_H 36 template <
class T,
int WINDOW_LENGTH>
54 for (
int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
55 readings[thisReading] = 0;
66 return add(input)>>WINDOW_LENGTH_AS_RSHIFT;
75 total -= readings[index];
78 readings[index] = input;
81 ++index &= WINDOW_LENGTH -1;
87 T readings[WINDOW_LENGTH];
90 const uint8_t WINDOW_LENGTH_AS_RSHIFT;
100 template <
int WINDOW_LENGTH>
111 RollingAverage():index(0),total(0), WINDOW_LENGTH_AS_RSHIFT(trailingZerosConst(WINDOW_LENGTH))
114 for (
int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
115 readings[thisReading] = 0;
123 unsigned int next(
unsigned int input)
128 return (
unsigned)add(input)>>WINDOW_LENGTH_AS_RSHIFT;
135 unsigned int add(
unsigned int input){
137 total -= readings[index];
140 readings[index] = input;
143 ++index &= WINDOW_LENGTH -1;
149 unsigned int readings[WINDOW_LENGTH];
152 const uint8_t WINDOW_LENGTH_AS_RSHIFT;
159 template <
int WINDOW_LENGTH>
170 RollingAverage():index(0),total(0.0)
173 for (
int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
174 readings[thisReading] = 0.0;
182 float next(
float input)
185 total -= readings[index];
188 readings[index] = input;
191 ++index &= WINDOW_LENGTH -1;
194 return total/WINDOW_LENGTH;
198 float readings[WINDOW_LENGTH];
Calculates a running average over a specified number of the most recent readings. ...
T next(T input)
Give the average of the last WINDOW_LENGTH.
RollingAverage()
Constructor.