49 sum_ -= buffer_[idx_];
51 buffer_[idx_] = input_value;
59 return sum_ / num_data_;
66 memset((
void*)buffer_, 0.0,
sizeof(T) * num_data_);
83 mNumSample_ = num_sample;
85 mCutoffFreq_ = cutoff_frequency;
87 mpBuffer_ =
new T[num_sample];
88 memset((
void*)mpBuffer_, 0,
sizeof(T) * num_sample);
105 for (j = mNumSample_ - 2; j >= 0; j--)
107 mpBuffer_[j + 1] = mpBuffer_[j];
110 mpBuffer_[0] = input_value;
111 for (j = 0; j < mNumSample_; j++)
114 value += sqrt_2 / mCutoffFreq_ * mpBuffer_[j] * exp(-1. / sqrt_2 *
t) * sin(mCutoffFreq_ / sqrt_2 *
t) * mDt_;
119 template <
typename T>
125 template <
typename T>
128 for (
int i(0); i < mNumSample_; ++i)
139 template <
typename T>
142 Lpf_in_prev_[0] = Lpf_in_prev_[1] = 0;
143 Lpf_out_prev_[0] = Lpf_out_prev_[1] = 0;
144 Lpf_in1_ = 0, Lpf_in2_ = 0, Lpf_in3_ = 0, Lpf_out1_ = 0, Lpf_out2_ = 0;
145 float den = 2500 * t_s * t_s * w_c * w_c + 7071 * t_s * w_c + 10000;
147 Lpf_in1_ = 2500 * t_s * t_s * w_c * w_c / den;
148 Lpf_in2_ = 5000 * t_s * t_s * w_c * w_c / den;
149 Lpf_in3_ = 2500 * t_s * t_s * w_c * w_c / den;
150 Lpf_out1_ = -(5000 * t_s * t_s * w_c * w_c - 20000) / den;
151 Lpf_out2_ = -(2500 * t_s * t_s * w_c * w_c - 7071 * t_s * w_c + 10000) / den;
154 template <
typename T>
157 template <
typename T>
160 lpf_out_ = Lpf_in1_ * lpf_in + Lpf_in2_ * Lpf_in_prev_[0] + Lpf_in3_ * Lpf_in_prev_[1] +
161 Lpf_out1_ * Lpf_out_prev_[0] + Lpf_out2_ * Lpf_out_prev_[1];
162 Lpf_in_prev_[1] = Lpf_in_prev_[0];
163 Lpf_in_prev_[0] = lpf_in;
164 Lpf_out_prev_[1] = Lpf_out_prev_[0];
165 Lpf_out_prev_[0] = lpf_out_;
168 template <
typename T>
174 template <
typename T>
179 Lpf_out_prev_[1] = 0;
180 Lpf_out_prev_[0] = 0;
188 template <
typename T>
193 Lpf_out_prev_[0] = 0;
194 Lpf_out_prev_[1] = 0;
201 T den = 4 + 2 * a * w_c * t_s + t_s * t_s * w_c * w_c;
203 Lpf_in1_ = 2 * t_s * w_c * w_c / den;
205 Lpf_in3_ = -2. * t_s * w_c * w_c / den;
206 Lpf_out1_ = -1. * (-8 + t_s * t_s * w_c * w_c * 2) / den;
207 Lpf_out2_ = -1. * (4 - 2 * a * w_c * t_s + t_s * t_s * w_c * w_c) / den;
212 template <
typename T>
215 template <
typename T>
219 lpf_out_ = Lpf_in1_ * lpf_in + Lpf_in2_ * Lpf_in_prev_[0] + Lpf_in3_ * Lpf_in_prev_[1] +
220 Lpf_out1_ * Lpf_out_prev_[0] + Lpf_out2_ * Lpf_out_prev_[1];
222 Lpf_in_prev_[1] = Lpf_in_prev_[0];
223 Lpf_in_prev_[0] = lpf_in;
224 Lpf_out_prev_[1] = Lpf_out_prev_[0];
225 Lpf_out_prev_[0] = lpf_out_;
229 template <
typename T>
235 template <
typename T>
240 Lpf_out_prev_[1] = 0;
241 Lpf_out_prev_[0] = 0;
249 template <
typename T>
252 Lpf_in_prev_[0] = Lpf_in_prev_[1] = 0;
253 Lpf_out_prev_[0] = Lpf_out_prev_[1] = 0;
254 Lpf_in1_ = 0, Lpf_in2_ = 0, Lpf_in3_ = 0, Lpf_out1_ = 0, Lpf_out2_ = 0;
256 T den = 4 + 2 * a * w_c * t_s + t_s * t_s * w_c * w_c;
260 Lpf_in1_ = B * t_s * t_s * w_c * w_c + 2 * J * t_s * w_c * w_c;
261 Lpf_in2_ = 2 * B * t_s * t_s * w_c * w_c;
262 Lpf_in3_ = B * t_s * t_s * w_c * w_c - 2 * J * t_s * w_c * w_c;
263 Lpf_out1_ = -1. * (-8 + t_s * t_s * w_c * w_c * 2) / den;
264 Lpf_out2_ = -1. * (4 - 2 * a * w_c * t_s + t_s * t_s * w_c * w_c) / den;
267 template <
typename T>
270 template <
typename T>
273 lpf_out_ = Lpf_in1_ * lpf_in + Lpf_in2_ * Lpf_in_prev_[0] + Lpf_in3_ * Lpf_in_prev_[1] +
274 Lpf_out1_ * Lpf_out_prev_[0] + Lpf_out2_ * Lpf_out_prev_[1];
275 Lpf_in_prev_[1] = Lpf_in_prev_[0];
276 Lpf_in_prev_[0] = lpf_in;
277 Lpf_out_prev_[1] = Lpf_out_prev_[0];
278 Lpf_out_prev_[0] = lpf_out_;
281 template <
typename T>
287 template <
typename T>
292 Lpf_out_prev_[1] = 0;
293 Lpf_out_prev_[0] = 0;
301 template <
typename T>
306 Lpf_in_prev_[0] = Lpf_in_prev_[1] = 0;
307 Lpf_out_prev_[0] = Lpf_out_prev_[1] = 0;
308 Lpf_in1_ = 0, Lpf_in2_ = 0, Lpf_in3_ = 0, Lpf_out1_ = 0, Lpf_out2_ = 0;
311 T den = 4 + 2 * a * w_c * t_s + t_s * t_s * w_c * w_c;
313 Lpf_in1_ = J * 2 * t_s * w_c * w_c / den;
315 Lpf_in3_ = -2. * J * t_s * w_c * w_c / den;
316 Lpf_out1_ = -1. * (-8 + t_s * t_s * w_c * w_c * 2) / den;
317 Lpf_out2_ = -1. * (4 - 2 * a * w_c * t_s + t_s * t_s * w_c * w_c) / den;
322 template <
typename T>
325 template <
typename T>
328 lpf_out_ = Lpf_in1_ * lpf_in + Lpf_in2_ * Lpf_in_prev_[0] + Lpf_in3_ * Lpf_in_prev_[1] +
329 Lpf_out1_ * Lpf_out_prev_[0] + Lpf_out2_ * Lpf_out_prev_[1];
330 Lpf_in_prev_[0] = lpf_in;
331 Lpf_in_prev_[1] = Lpf_in_prev_[0];
332 Lpf_out_prev_[0] = lpf_out_;
333 Lpf_out_prev_[1] = Lpf_out_prev_[0];
336 template <
typename T>
342 template <
typename T>
347 Lpf_out_prev_[1] = 0;
348 Lpf_out_prev_[0] = 0;
356 template <
typename T>
362 template <
typename T>
368 template <
typename T>
374 template <
typename T>
377 T update_value = input - est_value_;
378 if (fabs(update_value) > limit_)
382 est_value_ += (dt_ / (dt_ + t_const_)) * update_value;
385 template <
typename T>
396 template <
typename T>
404 template <
typename T>
407 last_value_ +=
minAbs(input_value - last_value_, acc_ * dt_);
410 template <
typename T>
416 template <
typename T>
419 last_value_ = last_value;
422 template <
typename T>
428 template <
typename T>
439 template <
typename T>
441 : freq(_freq), mincutoff(_mincutoff), beta(_beta), dcutoff(_dcutoff)
450 template <
typename T>
453 template <
typename T>
460 dx = (input_value - x_prev) * freq;
461 T edx =
alpha(dcutoff, freq) * dx + (1 -
alpha(dcutoff, freq)) * dhatxprev;
463 T cutoff = mincutoff + beta * std::abs(
static_cast<double>(edx));
466 hatxprev = input_value;
467 filtered_val =
alpha(cutoff, freq) * input_value + (1 -
alpha(cutoff, freq)) * hatxprev;
468 hatxprev = filtered_val;
472 template <
typename T>
478 template <
typename T>