From c1c949156f831aa617bcf40b9be2eb49d2a023f9 Mon Sep 17 00:00:00 2001 From: Federico Lolli <federico.lolli@skywarder.eu> Date: Tue, 14 Nov 2023 19:13:42 +0100 Subject: [PATCH] [SFD] fixed logic bugs with GNC - various logic bugs solved - added a bit of documentation - removed unneeded comments and unused variables --- src/shared/algorithms/SFD/SFDAscent.cpp | 2 +- src/shared/algorithms/SFD/SFDAscent.h | 5 +++++ src/shared/algorithms/SFD/SFDDescent.h | 5 +++++ src/shared/sensors/SFD/PressureSFD.cpp | 3 --- src/shared/sensors/SFD/PressureSFD.h | 2 +- 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/shared/algorithms/SFD/SFDAscent.cpp b/src/shared/algorithms/SFD/SFDAscent.cpp index 355faf8e2..4a5270544 100644 --- a/src/shared/algorithms/SFD/SFDAscent.cpp +++ b/src/shared/algorithms/SFD/SFDAscent.cpp @@ -52,7 +52,7 @@ SFDAscent::FeaturesVec SFDAscent::getFeatures(const SFDVectorIn& input) s2 = x0.array().pow(2).mean(); m4 = x0.array().pow(4).mean(); - rfourier = FFT32::fft(data).real(); // TODO: fix complex -> float + rfourier = FFT32::fft(data).cwiseAbs(); // TODO: fix complex -> float rfmean = rfourier.mean(); rfvar = (rfourier - rfmean * SFDVectorIn::Ones()).squaredNorm() / LEN_CHUNK; diff --git a/src/shared/algorithms/SFD/SFDAscent.h b/src/shared/algorithms/SFD/SFDAscent.h index 95f98437c..93b79568b 100644 --- a/src/shared/algorithms/SFD/SFDAscent.h +++ b/src/shared/algorithms/SFD/SFDAscent.h @@ -48,6 +48,11 @@ public: explicit SFDAscent(const SFDAscentConfig& config); + /** + * @brief Classifies the input vector as faulty or not. + * + * @return true if the input is faulty, false otherwise. + */ bool classify(const SFDVectorIn& input); private: diff --git a/src/shared/algorithms/SFD/SFDDescent.h b/src/shared/algorithms/SFD/SFDDescent.h index c41a57aa3..a435fdb94 100644 --- a/src/shared/algorithms/SFD/SFDDescent.h +++ b/src/shared/algorithms/SFD/SFDDescent.h @@ -48,6 +48,11 @@ public: explicit SFDDescent(const SFDDescentConfig& config); + /** + * @brief Classifies the input vector as faulty or not. + * + * @return true if the input is faulty, false otherwise. + */ bool classify(const SFDVectorIn& input); private: diff --git a/src/shared/sensors/SFD/PressureSFD.cpp b/src/shared/sensors/SFD/PressureSFD.cpp index 7aead52a5..e5c4d369a 100644 --- a/src/shared/sensors/SFD/PressureSFD.cpp +++ b/src/shared/sensors/SFD/PressureSFD.cpp @@ -110,7 +110,6 @@ PressureSFDData PressureSFD::sampleImpl() processed_value = medianFilter.filter(processed_value); processed_value = lowPassFilter.filter(processed_value); - samples = sampleWindow.last(); data.pressure = processed_value; return data; @@ -147,7 +146,6 @@ void PressureSFD::setDisabledSensors() skipped++; continue; } - // TODO: check if the score is correct (true means faulty) if (sfdAscent.classify(sensor_samples[i])) { disabledSensors[i] = true; @@ -164,7 +162,6 @@ void PressureSFD::setDisabledSensors() skipped++; continue; } - // TODO: check if the score is correct (true means faulty) if (sfdDescent.classify(sensor_samples[i])) { disabledSensors[i] = true; diff --git a/src/shared/sensors/SFD/PressureSFD.h b/src/shared/sensors/SFD/PressureSFD.h index 553c77d3a..98a7d3c4b 100644 --- a/src/shared/sensors/SFD/PressureSFD.h +++ b/src/shared/sensors/SFD/PressureSFD.h @@ -49,7 +49,7 @@ class PressureSFD : public Sensor<PressureSFDData> { public: static constexpr int MASKED_SENSORS = 2; - static constexpr int WIN_LEN = MASKED_SENSORS * LEN_CHUNK; + static constexpr int WIN_LEN = LEN_CHUNK; // TODO: set these values static constexpr int MED_FILTER_WIN_LEN = 25; -- GitLab