feat: iterate on SsfStepDetector
* use SSF signal instead of accelerometer signal
* use higher BEAT_CORR_THR_{12} for SSF signal
* add absolute SSF_THRESHOLD to ignore small accelero bumps
* compute ssf_threshold according to detected SSF peaks, not the mean (more robust vs. noise)
This commit is contained in:
@@ -13,13 +13,13 @@
|
||||
#define DEBUG_PRINT(expr) while(0) { expr; }
|
||||
#endif
|
||||
|
||||
Buf::Buf(size_t N): size(N), n(0) {
|
||||
Buf::Buf(size_t N): N(N), n(0) {
|
||||
data.resize(N);
|
||||
data.assign(N, 0.0);
|
||||
}
|
||||
void Buf::push(double val) {
|
||||
data[n] = val;
|
||||
n = (n+1) % size;
|
||||
n = (n+1) % N;
|
||||
}
|
||||
|
||||
Filt::Filt(size_t N, size_t shift, size_t offset, std::vector<double> taps): Buf(N), shift(shift), offset(offset), taps(taps) {
|
||||
@@ -31,9 +31,9 @@ double Filt::filter(double val) {
|
||||
}
|
||||
double Filt::peek() {
|
||||
double sum = 0;
|
||||
for (size_t i = offset; i < this->size; i++) {
|
||||
for (size_t i = offset; i < this->N; i++) {
|
||||
//size_t n = (this->n - i + shift - 1) % this->size; // unsigned % size ... bad if u is negative
|
||||
size_t n = (this->size + this->n - i + shift - 1) % this->size;
|
||||
size_t n = (this->N + this->n - i + shift - 1) % this->N;
|
||||
DEBUG_PRINT(std::cout << " t[" << i << "] * v[" << n << "]" << std::endl);
|
||||
sum += this->data[n] * this->taps[i];
|
||||
}
|
||||
@@ -42,6 +42,12 @@ double Filt::peek() {
|
||||
void Filt::push(double val) {
|
||||
Buf::push(val);
|
||||
}
|
||||
void Filt::prime(double val) {
|
||||
data.assign(this->N, val);
|
||||
}
|
||||
size_t Filt::size() {
|
||||
return this->N;
|
||||
}
|
||||
|
||||
IirFilter::IirFilter(std::vector<double> b, std::vector<double> a) : x(b.size(), 0, 0, b), y(a.size(), 1, 1, a) {
|
||||
if (b.size() != a.size()) throw std::invalid_argument("b.size() != a.size()");
|
||||
|
||||
Reference in New Issue
Block a user