Lodestar
An integrated real-time control package in C++
SimpleMovingAverage.hpp
1 //
2 // Created by Hamza El-Kebir on 6/15/21.
3 //
4 
5 #ifndef LODESTAR_SIMPLEMOVINGAVERAGE_HPP
6 #define LODESTAR_SIMPLEMOVINGAVERAGE_HPP
7 
8 #include "Lodestar/aux/ArrayStack.hpp"
9 
10 namespace ls {
11  namespace filter {
33  template<typename TType = double, size_t TWindowSize = 1>
35  public:
37 
38  SimpleMovingAverage() = default;
39 
45  void push(const TType &value)
46  {
47  window_.push(value);
48  }
49 
58  TType average() const
59  {
60  // TODO: Repplace TType{} by StatusOr<TType>.
61  TType ret{};
62 
63  if (window_.empty())
64  return ret;
65 
66  for (int i = 0; i < window_.size(); i++)
67  ret += window_[i];
68 
69  return ret / window_.size();
70  }
71 
75  void clear() noexcept
76  {
77  window_.clear();
78  }
79 
85  inline size_t size() const noexcept
86  {
87  return window_.size();
88  }
89 
95  inline constexpr size_t max_size() const noexcept
96  {
97  return TWindowSize;
98  }
99 
100  protected:
101  TDWindow window_;
102  };
103  }
104 }
105 
106 #endif //LODESTAR_SIMPLEMOVINGAVERAGE_HPP
ls::filter::SimpleMovingAverage
A statically sized simple moving average filter.
Definition: SimpleMovingAverage.hpp:34
ls::aux::ArrayStack::clear
void clear() noexcept
Clears the stack.
Definition: ArrayStack.hpp:68
ls::filter::SimpleMovingAverage::size
size_t size() const noexcept
Returns the current window size.
Definition: SimpleMovingAverage.hpp:85
ls::filter::SimpleMovingAverage::average
TType average() const
Compute unweighted average of elements in window.
Definition: SimpleMovingAverage.hpp:58
ls::filter::SimpleMovingAverage::clear
void clear() noexcept
Clears the window.
Definition: SimpleMovingAverage.hpp:75
ls::filter::SimpleMovingAverage::push
void push(const TType &value)
Push value to moving average window.
Definition: SimpleMovingAverage.hpp:45
ls
Main Lodestar code.
Definition: BilinearTransformation.hpp:12
ls::aux::ArrayStack::empty
bool empty() const noexcept
Returns true if stack is empty.
Definition: ArrayStack.hpp:131
ls::filter::SimpleMovingAverage::max_size
constexpr size_t max_size() const noexcept
Returns the maximum window size.
Definition: SimpleMovingAverage.hpp:95
ls::aux::ArrayStack
A statically sized stack with full member access.
Definition: ArrayStack.hpp:21
ls::aux::ArrayStack::size
size_t size() const noexcept
Gives current stack size.
Definition: ArrayStack.hpp:47
ls::aux::ArrayStack::push
void push(const TType &value)
Pushes value to front of ArrayStack.
Definition: ArrayStack.hpp:144