Merge C:/Users/david/Documents/src/lockstep/app/src/main/cpp/libpasada

This commit is contained in:
2026-06-14 16:25:11 +02:00
2 changed files with 12 additions and 8 deletions

View File

@@ -12,8 +12,8 @@
class StepListener { class StepListener {
public: public:
virtual ~StepListener() {} virtual ~StepListener() = default;
virtual void playBeat() = 0; virtual void playBeat(double t) = 0;
}; };
/** mean-filter the gravity vector, then take acceleration downwards */ /** mean-filter the gravity vector, then take acceleration downwards */
@@ -60,10 +60,14 @@ public:
* @param debug collect debug buffers (used in unit tests) * @param debug collect debug buffers (used in unit tests)
*/ */
StepDetector(double fps, StepListener *listener, bool debug = false); StepDetector(double fps, StepListener *listener, bool debug = false);
/** filter using raw accel samples (unevenly spaced and 3-dimensional) */ /**
* Push raw accelerometer values (unevenly sampled and 3-dimensional).
* @param ts timestamp in ns
* @param values acceleration values for x,y,z
*/
void filter(double ts, std::vector<float> values); void filter(double ts, std::vector<float> values);
/** filter using scalar accel samples in \vec{e_g} direction */ /** filter using scalar accel samples in \vec{e_g} direction */
void filter_a(double s1); void filter_a(double t, double s1);
std::vector<double> getBufSsd(); std::vector<double> getBufSsd();
std::vector<double> getBufSqi(); std::vector<double> getBufSqi();
std::vector<double> getBufOut(); std::vector<double> getBufOut();

View File

@@ -65,11 +65,11 @@ void StepDetector::filter(double ts, std::vector<float> values) {
// gravity filtering // gravity filtering
double a = f_grav.filter(samp); double a = f_grav.filter(samp);
// pass on accel sample // pass on accel sample
filter_a(a); filter_a(ts, a);
} }
} }
void StepDetector::filter_a(double s2) { void StepDetector::filter_a(double ts, double s2) {
auto s3 = f_ssf.filter(s2); auto s3 = f_ssf.filter(s2);
auto s4 = f_ssd.filter(s3); auto s4 = f_ssd.filter(s3);
auto q5 = f_sqi.filter(s2, s3, s4); auto q5 = f_sqi.filter(s2, s3, s4);
@@ -80,7 +80,7 @@ void StepDetector::filter_a(double s2) {
} }
// is step, step quality is OK, and we have a listener? // is step, step quality is OK, and we have a listener?
if(s4 > 0.0 && q5 > 0.0 && listener != nullptr) { if(s4 > 0.0 && q5 > 0.0 && listener != nullptr) {
listener->playBeat(); listener->playBeat(ts / 1e9);
} }
} }