18 typedef std::shared_ptr<SecondOrderFilter<SignalType>> Ptr;
24 _reset_has_been_called(
false)
29 SecondOrderFilter(
double omega,
double eps,
double ts,
const SignalType& initial_state):
33 _reset_has_been_called(
false)
39 void reset(
const SignalType& initial_state){
40 _reset_has_been_called =
true;
49 const SignalType& process(
const SignalType& input){
51 if(!_reset_has_been_called) reset(input*0);
61 _y = 1.0/_a0 * ( _u + _b1*_ud + _b2*_udd - _a1*_yd - _a2*_ydd );
66 const SignalType& getOutput()
const {
70 void setOmega(
double omega){
80 void setDamping(
double eps){
90 void setTimeStep(
double ts){
106 _a0 = 1.0 + 4.0*_eps/(_omega*_ts) + 4.0/std::pow(_omega*_ts, 2.0);
107 _a1 = 2 - 8.0/std::pow(_omega*_ts, 2.0);
108 _a2 = 1.0 + 4.0/std::pow(_omega*_ts, 2.0) - 4.0*_eps/(_omega*_ts);
117 double _a0, _a1, _a2;
119 bool _reset_has_been_called;
121 SignalType _y, _yd, _ydd, _u, _ud, _udd;