Rolling average and standard deviation.....
-
I have a number of variables on a node that I would like to calculate a running average for and one or two that I would like to calculate standard deviation for.
With limited memory on a pro mini I wonder if anyone has already done this or has any ideas on the best way to approach it?
-
@skywatch I usually use an exponential moving average (https://en.wikipedia.org/wiki/Moving_average) as it doesn't require keeping a sliding window of the past x values.
The idea is simple: new values are averaged over previous values with low weight.Eg
avg = (avg*(weight-1) + new) / weight
weight is just a factor (as would the size of your window be). Large weight causes slow response to changes. If working with integer types pick a power of 2 for the weight, so the compiler optimizes the division to a simple bitshift operation instead of a real division.
-
@Yveaux Thanks for the pointer, I will take a good look at that. What I need is something light that won't have a growing variable. I thought of using an array as the best option, but I will vertainly look at what you have found. Thank you!