// Copyright (c) 2023 Oleg Kalachev // Repository: https://github.com/okalachev/flix // Low pass filter implementation #pragma once template // Using template to make the filter usable for scalar and vector values class LowPassFilter { public: float alpha; // smoothing constant, 1 means filter disabled T output; LowPassFilter(float alpha): alpha(alpha) {}; T update(const T input) { if (!init) { init = true; return output = input; } return output += alpha * (input - output); } void setCutOffFrequency(float cutOffFreq, float dt) { alpha = 1 - exp(-2 * PI * cutOffFreq * dt); } void reset() { init = false; } private: bool init = false; };