X-Git-Url: https://git.sesse.net/?p=c64tapwav;a=blobdiff_plain;f=filter.h;fp=filter.h;h=a67f98a7f4a63bcc641a8cda72a9857b454cfc71;hp=0000000000000000000000000000000000000000;hb=cec99d15ad920457eea61bc442b5ba610c13430e;hpb=1d431da4497326b4496cdc6596c52736d98699e7 diff --git a/filter.h b/filter.h new file mode 100644 index 0000000..a67f98a --- /dev/null +++ b/filter.h @@ -0,0 +1,26 @@ +#ifndef _FILTER_H +#define _FILTER_H 1 + +class Filter { +public: + Filter(float a0, float a1, float a2, float b0, float b1, float b2) + : a1(a1 / a0), a2(a2 / a0), b0(b0 / a0), b1(b1 / a0), b2(b2 / a0), d0(0.0f), d1(0.0f) {} + + inline float update(float in) + { + float out = b0*in + d0; + d0 = b1 * in - a1 * out + d1; + d1 = b2 * in - a2 * out; + return out; + } + + void reset(); + + static Filter lpf(float cutoff_radians); + +private: + float a1, a2, b0, b1, b2; + float d0, d1; +}; + +#endif // !defined(_FILTER_H)