-
Notifications
You must be signed in to change notification settings - Fork 647
Open
Labels
Description
Not sure what kind of actual impact this might have on the rest of the library, but I believe there is something wrong in the LowPassFilter class:
LowPassFilter::LowPassFilter(float time_constant)
: ...
, y_prev(0.0f)
{
...
}
float LowPassFilter::operator() (float x)
{
...
float y = alpha*y_prev + (1.0f - alpha)*x;
y_prev = y;
...
return y;
}Because y_prev is initialized to zero, the first calls to operator() returns the wrong result. At the first call, y_prev should probably be initialized with x instead of zero. In other words, the first call to LowPassFilter(5) should return 5 and not a weighted average of 5 with zero.
Notice that, in LowPassFilter::operator(), you can also see:
if(dt > 0.3f) {
y_prev = x;
timestamp_prev = timestamp;
return x;
}So if you are lucky enough to have spent 0.3 seconds between the class construction and the first call to operator(), then y_prev is correctly initialized.
askuric