From 29019f61e52c462b19c69fd82866d182f4ad5d0a Mon Sep 17 00:00:00 2001 From: David Madl Date: Tue, 19 May 2026 22:40:39 +0200 Subject: [PATCH] fix: remove high-pass prefilter (ssf is already a high-pass) --- pasada-lib/include/step_detector.h | 1 - pasada-lib/step_detector.cpp | 19 +------------------ 2 files changed, 1 insertion(+), 19 deletions(-) diff --git a/pasada-lib/include/step_detector.h b/pasada-lib/include/step_detector.h index af6dcc3..8662c20 100644 --- a/pasada-lib/include/step_detector.h +++ b/pasada-lib/include/step_detector.h @@ -24,7 +24,6 @@ public: class StepDetector { protected: StepListener *listener; - IirFilter f_highpass; Filt f_neg; SsfFilter f_ssf; SsfStepDetector f_ssd; diff --git a/pasada-lib/step_detector.cpp b/pasada-lib/step_detector.cpp index 1909054..8a8570c 100644 --- a/pasada-lib/step_detector.cpp +++ b/pasada-lib/step_detector.cpp @@ -4,24 +4,8 @@ #include "step_detector.h" -// TODO: we are hardcoding filter coefficients for 60 Hz -// TODO: this is tolerable for 50 Hz - -// TODO: check if we can do with floats instead of doubles -// (check how much the [already bad] accuracy of filtering suffers) - -// TODO: in Java, check if delta timestamps effectively match FPS -// TODO: FPS constant should be passed as argument to C++ (but we keep an FPS define to validate the coefficients) - -// Butterworth filter: order=5, fc=0.5, fs=60, btype='highpass' -static std::vector hpf_taps_b {0.91875845, -4.59379227, 9.18758454, -9.18758454, 4.59379227, -0.91875845}; -static std::vector hpf_taps_a {1. , -4.83056552, 9.33652742, -9.02545247, 4.36360803, -0.8441171}; -static size_t upslope_width = 4; -const size_t len_refr = (size_t) (FPS / (MAX_BPM / 60)); - StepDetector::StepDetector(double fps, StepListener *listener, bool debug) : listener(listener), - f_highpass(hpf_taps_b, hpf_taps_a), f_neg(1, 0, 0, std::vector {-1.0}), f_ssf(fps), f_ssd(fps), @@ -35,8 +19,7 @@ StepDetector::StepDetector(double fps, StepListener *listener, bool debug) : void StepDetector::filter(std::vector values) { // TODO: later on, we should use a vector projection towards gravity - auto s0 = (double) values[1]; // take y-axis value for now - auto s1 = f_highpass.filter(s0); + auto s1 = (double) values[1]; // take y-axis value for now auto s2 = f_neg.filter(s1); auto s3 = f_ssf.filter(s2); auto s4 = f_ssd.filter(s3);