Haptic Controller
Loading...
Searching...
No Matches
filters.hpp
Go to the documentation of this file.
1#pragma once
2#include <math.h>
3#include <deque>
4#include <numeric>
5
8{
9public:
10 LowPassFilter() = default;
11 ~LowPassFilter() = default;
12
13 LowPassFilter(float cutoff_frequnecy)
14 : cutoff_frequnecy_(cutoff_frequnecy)
15 {
16 }
17
18 float update(float new_value, float dt)
19 {
20 const auto alpha = std::exp(cutoff_frequnecy_ * dt);
21 const auto new_value_ = alpha * new_value + (1.0f - alpha) * last_value_;
22 last_value_ = new_value_;
23 return new_value_;
24 }
25
26private:
27 float cutoff_frequnecy_;
28 float last_value_ = 0.0f;
29};
30
33{
34public:
37 MovingAverageFilter(size_t num_samples)
38 : max_samples_(num_samples)
39 {
40 }
41
42 float update(float new_sample)
43 {
44 samples_.push_back(new_sample);
45 if (samples_.size() > max_samples_)
46 {
47 samples_.pop_front();
48 return std::accumulate(samples_.begin(), samples_.end(), 0.0) / max_samples_;
49 }
50 return std::accumulate(samples_.begin(), samples_.end(), 0.0) / samples_.size();
51 }
52
53private:
54 size_t max_samples_;
55 std::deque<float> samples_;
56};
Infinite Impulse Response Filter.
Definition filters.hpp:8
~LowPassFilter()=default
float update(float new_value, float dt)
Definition filters.hpp:18
LowPassFilter()=default
LowPassFilter(float cutoff_frequnecy)
Definition filters.hpp:13
Moving Average Filter.
Definition filters.hpp:33
MovingAverageFilter()=default
~MovingAverageFilter()=default
MovingAverageFilter(size_t num_samples)
Definition filters.hpp:37
float update(float new_sample)
Definition filters.hpp:42