From bfb3c991840615821f446babd14fa8c5ec90bf7b Mon Sep 17 00:00:00 2001 From: David Madl Date: Thu, 12 Mar 2026 21:28:50 +0100 Subject: [PATCH] fix: RunningQuality must add ssf, not add beat --- google-tests/test3.cpp | 7 ++++++- google-tests/test_helpers.cpp | 7 +++++++ google-tests/test_helpers.h | 1 + pasada-lib/ssf_filter.cpp | 11 ++++++----- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/google-tests/test3.cpp b/google-tests/test3.cpp index 787dae7..78cfd7c 100644 --- a/google-tests/test3.cpp +++ b/google-tests/test3.cpp @@ -81,10 +81,11 @@ TEST(SignalTest, ranges) { class DebugRunningQuality : public RunningQuality { protected: virtual void dispatchLocked() { locked = true; } - virtual void dispatchBeat(int idx, bool good, double posCorr) { corrs.push_back(posCorr); } + virtual void dispatchBeat(int idx, bool good, double posCorr) { goods.push_back(good); corrs.push_back(posCorr); } bool locked; std::vector corrs; + std::vector goods; public: DebugRunningQuality(): locked(false) {} @@ -92,6 +93,7 @@ public: virtual ~DebugRunningQuality() {} bool isLocked() { return locked; } std::vector getCorrs() { return corrs; } + std::vector getGoods() { return goods; } std::vector getBeatTemplate() { return this->beatTemplate; } }; @@ -210,4 +212,7 @@ TEST(SignalTest, RunningQuality_t2) { std::vector corrs(sqi.getCorrs()); npy_save("test3/ssf_t3_sqi_corrs.npy", corrs); + + std::vector goods(sqi.getGoods()); + npy_save("test3/ssf_t3_sqi_goods.npy", goods); } diff --git a/google-tests/test_helpers.cpp b/google-tests/test_helpers.cpp index bef2d96..e00b5ec 100644 --- a/google-tests/test_helpers.cpp +++ b/google-tests/test_helpers.cpp @@ -10,6 +10,13 @@ void npy_save(std::string path, std::vector& x) { d.shape = {(unsigned long) x.size()}; npy::write_npy(path, d); } +void npy_save(std::string path, std::vector& x) { + npy::npy_data_ptr d; + std::vector xx(x.begin(), x.end()); + d.data_ptr = xx.data(); + d.shape = {(unsigned long) x.size()}; + npy::write_npy(path, d); +} std::vector fetch_y_axis(npy::npy_data& acc) { // TODO: later on, we should use a vector projection towards gravity diff --git a/google-tests/test_helpers.h b/google-tests/test_helpers.h index 9b23828..479a98e 100644 --- a/google-tests/test_helpers.h +++ b/google-tests/test_helpers.h @@ -20,6 +20,7 @@ template static std::vector apply_filter(T& filter, std::ve } void npy_save(std::string path, std::vector& x); +void npy_save(std::string path, std::vector& x); std::vector fetch_y_axis(npy::npy_data& acc); diff --git a/pasada-lib/ssf_filter.cpp b/pasada-lib/ssf_filter.cpp index 88556f0..1ad5cec 100644 --- a/pasada-lib/ssf_filter.cpp +++ b/pasada-lib/ssf_filter.cpp @@ -6,6 +6,7 @@ #include "pd_signal.h" #include #include +#include #include static std::vector make_ones(size_t sw) { @@ -138,19 +139,19 @@ void RunningQuality::append(std::vector &rawBeat, std::vector &r if (beatTemplates.size() == 0) { // cannot correlate the first beat, no template yet std::cerr << "(0) first beat -> addTemplate()" << std::endl; - addTemplate(beat); + addTemplate(ssf); justLocked = false; } else if (beatTemplates.size() <= 2) { // restart if there is no clear correlation between beats if (goodBeat) { std::cerr << "(2) good initial beat -> addTemplate()" << std::endl; - addTemplate(beat); + addTemplate(ssf); if (beatTemplates.size() > 2) justLocked = true; // TODO why not set? wrong compiler optimization? (is it unaware of member change?) //std::cerr << " (2) beatTemplates.size()=" << beatTemplates.size() << " justLocked=" << ((int) justLocked) << std::endl; } else { - std::cerr << "(2) bad initial beat -> replaceTemplate()" << std::endl; - replaceTemplate(beat); + std::cerr << "(2) bad initial beat idx=" << idx << " -> replaceTemplate() corr=" << std::fixed << std::setw(7) << std::setprecision(4) << corr << " checkedSsf=" << checkedSsf << std::endl; + replaceTemplate(ssf); //badBeatRanges.clear(); justLocked = false; } @@ -159,7 +160,7 @@ void RunningQuality::append(std::vector &rawBeat, std::vector &r std::cerr << "(3) running mode, good=" << ((int) goodBeat) << " justLocked=" << ((int) justLocked) << std::endl; if (goodBeat) { - addTemplate(beat); + addTemplate(ssf); } else { // badBeatRanges.add(s, e) // numNoisy++