added a fixed-frequency interpolator

This commit is contained in:
2016-09-08 13:00:06 +02:00
parent d2ef90a3e3
commit 34e29b70c9
2 changed files with 122 additions and 0 deletions

View File

@@ -0,0 +1,61 @@
#ifdef WITH_TESTS
#include <cmath>
#include "../Tests.h"
#include "../../math/FixedFrequencyInterpolator.h"
#include <fstream>
TEST(FixedFrequencyInterpolator, test) {
FixedFrequencyInterpolator<float> ffi(Timestamp::fromMS(10));
std::ofstream out("/tmp/test.dat");
std::vector<float> data;
auto callback = [&] (const Timestamp ts, const float val) {
out << ts.ms() << " " << val << "\n";
data.push_back(val);
};
float x = 10;
// output should be a straight line
ffi.add(Timestamp::fromMS(55), x*55, callback);
ffi.add(Timestamp::fromMS(93), x*93, callback);
ffi.add(Timestamp::fromMS(102), x*102, callback);
ffi.add(Timestamp::fromMS(134), x*134, callback);
ffi.add(Timestamp::fromMS(212), x*212, callback);
ffi.add(Timestamp::fromMS(214), x*214, callback);
ffi.add(Timestamp::fromMS(216), x*216, callback);
ffi.add(Timestamp::fromMS(219), x*219, callback);
ffi.add(Timestamp::fromMS(220), x*220, callback);
ffi.add(Timestamp::fromMS(240), x*240, callback);
out.close();
const float d = 0.001;
ASSERT_NEAR(data[0], x*60, d);
ASSERT_NEAR(data[1], x*70, d);
ASSERT_NEAR(data[2], x*80, d);
ASSERT_NEAR(data[3], x*90, d);
ASSERT_NEAR(data[4], x*100, d);
ASSERT_NEAR(data[5], x*110, d);
ASSERT_NEAR(data[6], x*120, d);
ASSERT_NEAR(data[7], x*130, d);
ASSERT_NEAR(data[8], x*140, d);
ASSERT_NEAR(data[9], x*150, d);
ASSERT_NEAR(data[10], x*160, d);
ASSERT_NEAR(data[11], x*170, d);
ASSERT_NEAR(data[12], x*180, d);
ASSERT_NEAR(data[13], x*190, d);
ASSERT_NEAR(data[14], x*200, d);
ASSERT_NEAR(data[15], x*210, d);
ASSERT_NEAR(data[16], x*220, d);
ASSERT_NEAR(data[17], x*230, d);
ASSERT_NEAR(data[18], x*240, d);
}
#endif