Fehler #127
Von Julius Haman vor 10 Tagen aktualisiert
Distanz und Zeitstempel eines Trainingspunkts passen nicht sauber zusammen. Die Distanz wächst je Poll-Tick um Geschwindigkeit × echte Tick-Dauer (Timer-Jitter, etwa 0,9 bis 1,1 s). Der Zeitstempel ist die auf ganze Sekunden abgeschnittene Trainingszeit, und seit #115 gibt es höchstens einen Punkt je Sekunde. Dadurch weicht der Zeitabstand zweier Punkte um bis zu ±1 s von der Zeit ab, in der die Distanz gewachsen ist. ### Auswirkung Wer die Geschwindigkeit aus Distanz und Zeit ableitet, bekommt starke Schwankungen bei gleichmäßiger Fahrt. Beispiel Training20261001.fit: Intervalle mit 9,2 km/h direkt neben 36 bis 41 km/h, obwohl die Fahrt gleichmäßig war. Gesamtdistanz und Durchschnitt stimmen. Betroffen sind Distanz-Zeit-Auswertungen in anderen Programmen (z.B. Garmin Connect, wenn keine Geschwindigkeit in der Datei steht); die Exporte schreiben seit #122/#123 die gespeicherte Geschwindigkeit explizit und sind davon weniger betroffen. ### Lösungsansatz * Die Distanz je Trainingspunkt auf die Sekundenmarke interpolieren, statt den Wert des Ticks zu speichern: Der Punkt für Sekunde n bekommt die Distanz bei exakt n s (linear zwischen den Tick-Werten davor und danach). * Alternativ die Zeit des Punkts auf die echte Tick-Zeit runden statt abschneiden (kleinerer Eingriff, behebt aber nur einen Teil). * Geschwindigkeit, Mittelwerte, Kalorien und der Live-Tacho bleiben unverändert. ### Offen * Bestandstrainings werden bewusst nicht korrigiert: Die korrigiert (die echten Tick-Zeiten wurden nie gespeichert, eine Rekonstruktion aus der gespeicherten Geschwindigkeit wäre nur eine Näherung (und bei nachträglich berechneter Geschwindigkeit älterer Trainings gar nicht möglich) und würde Messdaten unwiderruflich ändern. Die Exporte schreiben die gespeicherte Geschwindigkeit seit #122/#123 ohnehin explizit. gespeichert). * Der Eingriff liegt in RecordTrainingPoint und braucht Tests für die Interpolation (Jitter-Fälle). Für das ViewModel gibt es kein Test-Gerüst, die Interpolation sollte deshalb in eine testbare Hilfsklasse. * Version: 3.1.4. Umgesetzt wurde die Interpolation Version offen: vermutlich nach 3.1.4, weil der Distanz (und davon abhängig Position/Höhe) auf Eingriff in die Sekundenmarke in einer testbaren Hilfsklasse (TrainingPointInterpolation); ein Aufzeichnung erst nach einem längeren Test mit echter Fahrt steht noch aus. freigegeben werden sollte.