class LowPassFilter {
public:
LowPassFilter(float time_constant_s, float initial_value = 0.0f) :
time_constant_s_, output_(initial_value), rate_(0.0f) {}
void Update(float dt_sec, float sample) {
rate_ = (sample - output_) / time_constant_s_;
output_ += rate_ * dt_sec;
}
float output() const { return output_; }
float rate() const { return rate_; }
private:
const float time_constant_s_;
float output_;
float rate_;
};