fix: a loaded recording is filtered into its buffer, not truncated

The loader pushed one slot per file row while the plan decimated by
eight, so a 10 M-row file overran the ring and only its last 4.19 s
survived -- a 20 s recording that read as a 4 s one. Each group of
`time_stride` rows is now averaged into one slot at the group's mean
stamp, as the packet path already does, and the load line reports
rows and decimation so a filtered file cannot be mistaken for a
truncated one.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Martino FerrariandClaude Opus 4.6 committed 2026-10-14 00:54:31 +02:00
1 parent 50a1ddca62
commit 345145c52b
7 files changed
+104 -11

No files matched your search

+7
View File
@@ -58,7 +58,14 @@ class WaveformReader {
/// What a load put into the model, for the log and the status line.
struct WaveformLoadReport {
std::size_t signals = 0;
/// Slots actually stored, which is the file's row count divided by `decimation`.
std::size_t samples = 0;
/// Records the file held, and the group size each stored slot is the mean of. They differ when the
/// recording does not fit the buffer at its own rate: `samples * decimation == rows` (up to the
/// last, partial group), and a `decimation` above 1 is the only honest way to read a `samples`
/// below `rows`.
std::size_t rows = 0;
std::uint64_t decimation = 1;
double span_s = 0.0;
double rate_hz = 0.0;
double first_time = 0.0;