+ /// First order, (low pass / lag) filter
+ class Filter {
+ double prev_in;
+ double prev_out;
+ double ca;
+ double cb;
+ public: Filter(void) {}
+ public: Filter(double coeff, double dt) {
+ prev_in = prev_out = 0.0;
+ double denom = 2.0 + coeff*dt;
+ ca = coeff*dt/denom;
+ cb = (2.0 - coeff*dt)/denom;
+ }
+ public: double execute(double in) {
+ double out = (in + prev_in)*ca + prev_out*cb;
+ prev_in = in;
+ prev_out = out;
+ return out;
+ }
+ };
+