#pragma once #include class DDS { private: uint32_t phase = 0; public: uint32_t ftw = 0; void set_frequency(double f) { ftw = f*(double)UINT32_MAX; } double get() { phase += ftw; // wraps on overflow return sin(phase*2.0*M_PI/(double)UINT32_MAX); } }; template class Lowpass { private: double k = 0.0; T s[N] = {}; public: void set_bandwidth(double f) { k = 2.0*M_PI*f; } T update(T x) { T a = x; for(int i=0;i