diff --git a/google-tests/test3.cpp b/google-tests/test3.cpp index 49bc59b..787dae7 100644 --- a/google-tests/test3.cpp +++ b/google-tests/test3.cpp @@ -5,6 +5,8 @@ #include "npy.hpp" //#include #include +#include + #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 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 x {0.9, 1.5, 2.0, 3.0, 5.0, 4.0, 1.0, 0.5, 0.3, 0.2}; + std::vector 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 x {0.9, 1.5, 2.0, 3.0, 5.0, 4.0, 1.0, 0.5, 0.3, 0.2}; + std::vector 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 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 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 i; diff --git a/pasada-lib/pd_signal.cpp b/pasada-lib/pd_signal.cpp index 0b6ea18..f394ac5 100644 --- a/pasada-lib/pd_signal.cpp +++ b/pasada-lib/pd_signal.cpp @@ -90,7 +90,7 @@ void interp(std::vector& y, std::vector& x, std::vector& void resample(std::vector &out, std::vector &x, int beat_len) { std::vector t; std::vector 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); }