MCL
A C++ library mirroring some of the most common Matlab functions.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
maxgradientfilter.h
Go to the documentation of this file.
1 /*
2  MCL
3  Copyright (c) 2012-18, Enzo De Sena
4  All rights reserved.
5 
6  Authors: Enzo De Sena, enzodesena@gmail.com
7  */
8 
9 
10 #ifndef MCL_MAXGRADIENTFILTER_H
11 #define MCL_MAXGRADIENTFILTER_H
12 
13 #include "elementaryop.h"
14 #include "digitalfilter.h"
15 
16 namespace mcl {
17 
19 public:
20  MaxGradientFilter(Real max_gradient) :
21  max_gradient_(max_gradient), previous_output_(0.0) {}
22 
23  virtual Real Filter(const Real input) noexcept {
24  Real output;
25  if (mcl::Abs(previous_output_-input) < max_gradient_) {
26  output = input;
27  } else if (previous_output_ < input) {
28  output = previous_output_ + max_gradient_;
29  } else {
30  output = previous_output_ - max_gradient_;
31  }
32  previous_output_ = output;
33  return output;
34  }
35 
36  virtual void Reset() noexcept {
37  previous_output_ = 0.0;
38  }
39 
40 private:
41  Real max_gradient_;
42  Real previous_output_;
43 };
44 
45 } // namespace mcl
46 #endif