From ed1169f7d1e19d50b0781f118a6cdc92816aff80 Mon Sep 17 00:00:00 2001
From: Federico Lolli <federico.lolli@skywarder.eu>
Date: Wed, 25 Oct 2023 13:54:23 +0200
Subject: [PATCH] [LowPass] added config constructor

---
 src/shared/algorithms/Filters/LowPass.cpp |  9 ++++++++-
 src/shared/algorithms/Filters/LowPass.h   | 24 +++++++++++++++++++++--
 2 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/src/shared/algorithms/Filters/LowPass.cpp b/src/shared/algorithms/Filters/LowPass.cpp
index 142c97f6c..cdb97376f 100644
--- a/src/shared/algorithms/Filters/LowPass.cpp
+++ b/src/shared/algorithms/Filters/LowPass.cpp
@@ -26,12 +26,19 @@ namespace Boardcore
 {
 
 // TODO: WARNING! initialized at 0
-// WARNING: frequency set by parameters, look for these anyway
+// WARNING: frequency set by parameters, look for these in any case
 LowPass::LowPass(float gain, float cutoffFreq, float lambda)
     : gain(gain), cutoffFreq(cutoffFreq), lambda(lambda), output(0)
 {
 }
 
+// TODO: WARNING! initialized at 0
+// WARNING: frequency set by parameters, look for these in any case
+LowPass::LowPass(const LowPassConfig& config)
+    : LowPass(config.gain, config.cutoffFreq, config.lambda)
+{
+}
+
 float LowPass::filter(float input)
 {
     output = lambda * output + (gain / cutoffFreq) * (1 - lambda) * input;
diff --git a/src/shared/algorithms/Filters/LowPass.h b/src/shared/algorithms/Filters/LowPass.h
index 49f5c2b7e..ebd1ab7cd 100644
--- a/src/shared/algorithms/Filters/LowPass.h
+++ b/src/shared/algorithms/Filters/LowPass.h
@@ -25,21 +25,41 @@
 namespace Boardcore
 {
 
+/**
+ * @brief Online Low Pass filter with frequency-aware parameters
+ */
 class LowPass
 {
 public:
+    struct LowPassConfig
+    {
+        float gain;
+        float cutoffFreq;
+        float lambda;
+    };
+
     /**
-     * @brief Construct a new Low Pass object
+     * @brief Construct an online Low Pass by providing each parameter
      *
      * @param gain The gain of the filter
      * @param cutoffFreq The cutoff frequency of the filter
      * @param lambda The lambda parameter of the filter
      *
      * @note WARNING: Initialize output at 0 at first
-     * @note WARNING: frequency set by parameters, look for these anyway
+     * @note WARNING: frequency set by parameters, look for these in any case
      */
     LowPass(float gain, float cutoffFreq, float lambda);
 
+    /**
+     * @brief Construct an online Low Pass from a configuration
+     *
+     * @param config The configuration of the filter
+     *
+     * @note WARNING: Initialize output at 0 at first
+     * @note WARNING: frequency set by parameters, look for these in any case
+     */
+    explicit LowPass(const LowPassConfig& config);
+
     /**
      * @brief Filter the input
      *
-- 
GitLab