diff --git a/src/lib/mathlib/math/filter/AlphaFilter.hpp b/src/lib/mathlib/math/filter/AlphaFilter.hpp index ae2c344cc6..677cfdd9ef 100644 --- a/src/lib/mathlib/math/filter/AlphaFilter.hpp +++ b/src/lib/mathlib/math/filter/AlphaFilter.hpp @@ -43,6 +43,9 @@ #pragma once #include +#include + +using namespace math; template class AlphaFilter @@ -70,6 +73,21 @@ public: } } + void setCutoffFreq(float sample_freq, float cutoff_freq) + { + if ((sample_freq <= 0.f) || (cutoff_freq <= 0.f) || (cutoff_freq >= sample_freq / 2.f) + || !isFinite(sample_freq) || !isFinite(cutoff_freq)) { + + // No filtering + _alpha = 1.f; + _cutoff_freq = 0.f; + return; + } + + setParameters(1.f / sample_freq, 1.f / (2.f * M_PI_F * cutoff_freq)); + _cutoff_freq = cutoff_freq; + } + /** * Set filter parameter alpha directly without time abstraction * @@ -96,10 +114,12 @@ public: } const T &getState() const { return _filter_state; } + float getCutoffFreq() const { return _cutoff_freq; } protected: T updateCalculation(const T &sample) { return (1.f - _alpha) * _filter_state + _alpha * sample; } + float _cutoff_freq{0.f}; float _alpha{0.f}; T _filter_state{}; };