FilterGen  1.0.0
A library to design digital filters in embedded systems.
filter.hpp
Go to the documentation of this file.
1 #ifndef DH_FILTER_CPP_INCLUDED
2 #define DH_FILTER_CPP_INCLUDED
3 
10 #include "dh/filter-types.h"
11 #include <vector>
12 
37 namespace dh {
38 
50 class filter {
51 public:
54 
60 
62  filter(const filter&);
63 
65  filter& operator=(const filter&);
66 
69  filter(filter&&);
70 
74 
75  ~filter();
76 
84  double update(double in);
85 
91  double current_value() const noexcept {
92  return data_.current_value;
93  }
94 
96  const parameters_t& options() const {
97  return options_;
98  }
99 
103  void set_gain(double gain);
104 
106  double gain() const;
107 
118  std::vector<dh_frequency_response_t> compute_frequency_response(size_t count) const;
119 
121  struct graph_point {
123  double x;
125  double input;
127  double output;
128  };
129 
135  std::vector<graph_point> compute_step_response() const;
136 
142  std::vector<graph_point> compute_impulse_response() const;
143 
145  class error {
146  public:
148  error(const char* str) : str_(str) {}
149 
151  const char* what() const noexcept {
152  return str_;
153  }
154 
155  private:
156  const char* str_;
157  };
158 
160  bool good() const noexcept;
161 
163  class span {
164  public:
166  span(double* begin,size_t size) : begin_(begin), end_(begin+size) {}
167 
169  const double* begin() const noexcept {
170  return begin_;
171  }
172 
174  const double* end() const noexcept {
175  return end_;
176  }
177 
179  size_t size() const noexcept {
180  return end_ - begin_;
181  }
182 
184  double operator[](size_t i) const noexcept {
185  return begin_[i];
186  }
187 
188  private:
189  const double* begin_;
190  const double* end_;
191  };
192 
197  span feedforward_coefficients() const noexcept;
198 
203  span feedback_coefficients() const noexcept;
204 
205 private:
206  dh_filter_parameters options_{};
207  dh_filter_data data_{};
208 
209  void create_internal_data();
210  void deep_copy(const dh_filter_data& other);
211 };
212 
213 
214 }
215 
216 
217 
218 #endif /* DH_FILTER_CPP_INCLUDED */
dh::filter::compute_frequency_response
std::vector< dh_frequency_response_t > compute_frequency_response(size_t count) const
Computes the frequency response of the filter and returns a vector with count entries.
dh::filter::span::end
const double * end() const noexcept
Definition: filter.hpp:174
dh::filter::operator=
filter & operator=(const filter &)
Deep copy.
dh::filter
This class holds the C++ bindings to the filter library.
Definition: filter.hpp:50
dh::filter::gain
double gain() const
dh::filter::span
Definition: filter.hpp:163
dh::filter::span::span
span(double *begin, size_t size)
Definition: filter.hpp:166
dh::filter::feedback_coefficients
span feedback_coefficients() const noexcept
dh::filter::span::begin
const double * begin() const noexcept
Definition: filter.hpp:169
dh::filter::graph_point::x
double x
Definition: filter.hpp:123
dh::filter::compute_impulse_response
std::vector< graph_point > compute_impulse_response() const
Computes the impulse response of the filter.
dh::filter::feedforward_coefficients
span feedforward_coefficients() const noexcept
dh_filter_data
Definition: filter-types.h:206
dh::filter::span::size
size_t size() const noexcept
Definition: filter.hpp:179
dh::filter::set_gain
void set_gain(double gain)
dh_filter_parameters
Definition: filter-types.h:81
dh_filter_data::current_value
double current_value
Definition: filter-types.h:218
dh::filter::graph_point
Definition: filter.hpp:121
dh::filter::compute_step_response
std::vector< graph_point > compute_step_response() const
Computes the step response of the filter.
dh::filter::error::error
error(const char *str)
Definition: filter.hpp:148
dh::filter::graph_point::input
double input
Definition: filter.hpp:125
dh::filter::good
bool good() const noexcept
dh::filter::error::what
const char * what() const noexcept
Definition: filter.hpp:151
filter-types.h
The data types for the filter library.
dh::filter::span::operator[]
double operator[](size_t i) const noexcept
Definition: filter.hpp:184
dh::filter::graph_point::output
double output
Definition: filter.hpp:127
dh::filter::error
Definition: filter.hpp:145
dh::filter::filter
filter(parameters_t options)
Constructs a filter with the given options.
dh::filter::current_value
double current_value() const noexcept
Returns the filtered value without changing the state of the filter.
Definition: filter.hpp:91
dh::filter::update
double update(double in)
Updates the internal state of the filter with a new input value and returns the updated filtered valu...
dh::filter::options
const parameters_t & options() const
Definition: filter.hpp:96