]> git.sesse.net Git - c64tapwav/blob - filter.h
Train hysteresis limits as part of SPSA.
[c64tapwav] / filter.h
1 #ifndef _FILTER_H
2 #define _FILTER_H 1
3
4 class Filter {
5 public:
6         Filter(float a0, float a1, float a2, float b0, float b1, float b2)
7                 : a1(a1 / a0), a2(a2 / a0), b0(b0 / a0), b1(b1 / a0), b2(b2 / a0), d0(0.0f), d1(0.0f) {}
8
9         inline float update(float in)
10         {
11                 float out = b0*in + d0;
12                 d0 = b1 * in - a1 * out + d1;
13                 d1 = b2 * in - a2 * out;
14                 return out;
15         }
16
17         void reset();
18
19         static Filter lpf(float cutoff_radians);
20         static Filter hpf(float cutoff_radians);
21
22 private:
23         float a1, a2, b0, b1, b2;
24         float d0, d1;
25 };
26
27 #endif  // !defined(_FILTER_H)