Thread: Data Smoothing
View Single Post
  #1   Spotlight this post!  
Unread 13-01-2008, 22:36
Lafleur Lafleur is offline
Registered User
AKA: Tom Lafleur
FRC #0812
Team Role: Engineer
 
Join Date: Dec 2007
Rookie Year: 2006
Location: San Diego
Posts: 34
Lafleur will become famous soon enoughLafleur will become famous soon enough
Data Smoothing

Here is a bit of code to use the Exponential moving average (EMA) function for data smoothing. I find it much superior to that of a straight average because it favors newer samples, making it more responsive. Also it requires one to save only one value between calculations.

To use, call the EMAweight function with the number of samples that you want to smoothing over, it will calculate a weight factor for the EMA function.

call EMA with the oldvalue, newsample and the weight

here is a reference for EMA:

http://www.esignal.com/futuresource/...tudies/emi.htm
Quote:
//prototypes

float EMA (int, int, float );
float EMAweight (float);

// how to use

w = EMAweight (30.0); // set weight
xEMA = EMA( xEMA, newsample, w); // old, new, weight


//
// Ema routines
//
float EMAweight (float samples)
{
return (2.0 / ( 1.0 + samples));
}

float EMA (int prevEMA, int newVALUE, float weightx)
{
return ((weightx * (newVALUE - prevEMA)) + prevEMA);
}