MCU
Loading...
Searching...
No Matches
Filter_IIR.h
Go to the documentation of this file.
1/* IIR digital low pass filter */
2#ifndef __FILTER_IIR__
3#define __FILTER_IIR__
4
5#include <stdint.h>
6
7#define DEFAULT_ALPHA 0.0
8
9template <typename dataType>
11{
12
13public:
17 Filter_IIR(float alpha, dataType init_val=0) {
19 prev_reading = init_val;
20 }
23 }
24
25 void set_alpha(float alpha);
26 dataType get_prev_reading() const {return prev_reading;}
27
28 dataType filtered_result(dataType new_val);
29
30private:
31 float alpha;
32 dataType prev_reading;
33};
34
35template <typename dataType>
37 if (alpha > 1.0) {
38 this->alpha = 1.0;
39 }
40 else if (alpha < 0.0) {
41 this->alpha = 0.0;
42 }
43 else
44 {
45 this->alpha = alpha;
46 }
47}
48
49template <typename dataType>
50dataType Filter_IIR<dataType>::filtered_result(dataType new_val) {
51 prev_reading = (1 - alpha) * new_val + alpha * prev_reading;
52
53 return prev_reading;
54}
55
56template <typename dataType, int N>
58{
59protected:
61public:
62 virtual void setAlphas(int channel, float alpha)
63 {
64 filter_channels_[channel].set_alpha(alpha);
65 }
66};
67
68#endif
69#pragma once
#define DEFAULT_ALPHA
Definition: Filter_IIR.h:7
Filter_IIR< dataType > filter_channels_[N]
Definition: Filter_IIR.h:60
virtual void setAlphas(int channel, float alpha)
Definition: Filter_IIR.h:62
dataType get_prev_reading() const
Definition: Filter_IIR.h:26
Filter_IIR(float alpha, dataType init_val=0)
Definition: Filter_IIR.h:17
dataType prev_reading
Definition: Filter_IIR.h:32
void set_alpha(float alpha)
Definition: Filter_IIR.h:36
float alpha
Definition: Filter_IIR.h:31
dataType filtered_result(dataType new_val)
Definition: Filter_IIR.h:50