fix: resample(): adjust trailing i

This commit is contained in:
2026-03-12 20:59:26 +01:00
parent 9aaec182a8
commit ee77180994
2 changed files with 38 additions and 1 deletions

View File

@@ -5,6 +5,8 @@
#include "npy.hpp"
//#include <utility>
#include <deque>
#include <iomanip>
#include "pd_signal.h"
#include "ssf_filter.h"
#include "test_helpers.h"
@@ -31,6 +33,41 @@ TEST(SignalTest, interp_t1) {
}
}
TEST(SignalTest, cross_corr_t1) {
std::vector<double> sig {0.9, 1.5, 2.0, 3.0, 5.0, 4.0, 1.0, 0.5, 0.3, 0.2};
double corr = pd_signal::crossCorr(sig, sig);
ASSERT_NEAR(1.0, corr, 1e-7);
}
TEST(SignalTest, cross_corr_t2) {
std::vector<double> x {0.9, 1.5, 2.0, 3.0, 5.0, 4.0, 1.0, 0.5, 0.3, 0.2};
std::vector<double> y {0.4, 0.7, 0.9, 1.5, 2.5, 2.0, 0.5, 0.25, 0.15, 0.1};
double corr = pd_signal::crossCorr(x, y);
ASSERT_NEAR(0.999, corr, 1e-3);
}
TEST(SignalTest, resample_t1) {
std::vector<double> x {0.9, 1.5, 2.0, 3.0, 5.0, 4.0, 1.0, 0.5, 0.3, 0.2};
std::vector<double> y_e {0.9, 1.2, 1.5, 1.75, 2.0, 2.5, 3.0, 4.0, 5.0, 4.5, 4.0, 2.5, 1.0, 0.75, 0.5, 0.4, 0.3, 0.25, 0.2};
std::vector<double> t;
linspace(t, 0, (double) x.size()-1, y_e.size(), false);
// interp t=0.000 0.500 1.000 1.500 2.000 2.500 3.000 3.500 4.000 4.500 5.000 5.500 6.000 6.500 7.000 7.500 8.000 8.500 9.000
/*
std::cout << "interp t=";
for (size_t n = 0; n < t.size(); n++) {
std::cout << std::fixed << std::setw(5) << std::setprecision(3) << t[n] << " ";
}
std::cout << std::endl;
*/
std::vector<double> y;
pd_signal::resample(y, x, y_e.size());
double corr = pd_signal::crossCorr(y, y_e);
ASSERT_NEAR(1.0, corr, 1e-3);
}
TEST(SignalTest, ranges) {
const double abs_error = 1e-5;
std::vector<double> i;

View File

@@ -90,7 +90,7 @@ void interp(std::vector<double>& y, std::vector<double>& x, std::vector<double>&
void resample(std::vector<double> &out, std::vector<double> &x, int beat_len) {
std::vector<double> t;
std::vector<double> i;
linspace(t, 0, (double) x.size(), beat_len, false);
linspace(t, 0, (double) (x.size()-1), beat_len, false);
linspace(i, 0, (int) (x.size()-1), (int) x.size(), false);
interp(out, t, i, x);
}