8 #include <Eigen/Geometry>
16 const std::string& name) :
17 debugObserver(debugObserver), name(name)
35 std::lock_guard g{mtx};
40 FrequencyReporter::report()
43 std::vector<int64_t> ts;
46 std::lock_guard g{mtx};
49 if (timestamps.size() < 2)
52 debugObserver->setDebugChannel(name,
65 std::adjacent_difference(ts.begin(), ts.end(), ts.begin());
70 const Vector v = Eigen::Map<Vector>(ts.data() + 1, ts.size() - 1);
71 const Eigen::ArrayXf dts =
v.cast<
float>();
73 const float dtMean = dts.mean();
74 const float dtMin = dts.minCoeff();
75 const float dtMax = dts.maxCoeff();
76 const float dtStddev =
std::sqrt((dts - dtMean).square().sum() / (dts.size() - 1));
78 const float frequencyMean = 1.0F / (dtMean / 1
'000'000);
79 const float frequencyMax = 1.0F / (dtMin / 1
'000'000);
80 const float frequencyMin = 1.0F / (dtMax / 1
'000'000);
81 const float frequencyStddev = 1.0F / (dtStddev / 1
'000'000);
83 debugObserver->setDebugChannel(