Projekt

Allgemein

Profil

Aktionen

Fehler #127

geschlossen
JH

Aufzeichnung: Trainingspunkte mit ms-genauem Messzeitpunkt statt abgeschnittener ganzer Sekunden

Fehler #127: Aufzeichnung: Trainingspunkte mit ms-genauem Messzeitpunkt statt abgeschnittener ganzer Sekunden

Von Julius Haman vor 10 Tagen hinzugefügt. Vor 9 Tagen aktualisiert.

Status:
Erledigt
Priorität:
Normal
Zugewiesen an:
-
Zielversion:
Beginn:
Abgabedatum:
% erledigt:

0%

Geschätzter Aufwand:
Gefunden in Version:

Beschreibung

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 (TrainingPoint.Time) war die auf ganze Sekunden abgeschnittene Trainingszeit, und seit #115 gab es höchstens einen Punkt je Sekunde. Dadurch wich 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).

Lösung

Die Aufzeichnung speichert den echten Messzeitpunkt, statt Daten auf die ganze Sekunde geradezuziehen. Anpassungen an Zielformate geschehen im Export, nicht in den Rohdaten.

  • Zeit: TrainingPoint.Time hält Dezimalsekunden (NUMERIC, ms-genau, z.B. 42,437) statt ganzer Sekunden. Spaltentyp-Änderung in der Migration Version3140; Bestandswerte (ganze Sekunden) bleiben unverändert gültig. Training.Duration bleibt ganzzahlig.
  • Recorder: Zeit, Distanz, Geschwindigkeit, Mittelwerte und Kalorien beruhen auf der echten Tickzeit (Mittelwerte und Kalorien mit ms-Zeitdelta). Die Interpolation der Distanz auf die Sekundenmarke entfällt.
  • Poll-Timer: Der Timer feuert nicht mehr im festen Takt, sondern der nächste Tick wird erst nach dem vorigen angestoßen. Antwortet das Ergometer erst nach 5 s, folgt der nächste Poll etwa 1 s danach; es staut sich nichts auf, und es entsteht kein Burst nachlaufender Ticks. Der nächste Tick wird auf ein festes 1-s-Raster geplant, gekürzt um die Dauer des letzten Ticks (Latenz des Geräts), mindestens 500 ms nach Tickende. Ohne diese Kürzung wäre die Periode 1 s plus Tickdauer, und die auf ganze Sekunden abgeschnittene Trainingszeit sprang ab und zu um 2 s. Dauert ein Tick länger als das Intervall, wird nicht nachgeholt, sondern das Raster neu aufgesetzt. Der modale Erholungspuls-Dialog wird nicht mehr innerhalb des Ticks geöffnet (er blockierte sonst den Tick, die Messuhr stand). Der Simulator behält seinen eigenen Takt. Die serielle Verbindungslogik ist unverändert.
  • Profilzeit: Die Position in Puls- und Leistungsprofilen wird aus der Tretzeit in Sekunden berechnet (nur bei Trittfrequenz > 0, um das echte Zeitdelta fortgeschrieben) statt aus einem Tick-Zähler. Der Zähler setzte 1 Tick = 1 s voraus und ließ ein Profil bei Jitter oder Lücken zu langsam laufen.
  • Export TCX: Trackpoint-Zeit mit Millisekunden (das Format erlaubt Sekundenbruchteile), Rohdaten unverändert.
  • Export FIT, HRM, CSV: Diese Formate kennen nur ganze Sekunden bzw. ein festes 1-s-Intervall (FIT: RecordMesg.Timestamp ohne Millisekunden). Die Punkte werden deshalb beim Export auf ein 1-Hz-Raster gesetzt (TrainingPointInterpolation.ToWholeSeconds): Distanz, Höhe, Position und Geschwindigkeit linear interpoliert, Puls, Trittfrequenz und Leistung wie zuletzt gemessen. Das Raster reicht bis zur Sekunde des letzten Punkts (aufgerundet), damit der Datenstrom nicht vor der Gesamtdistanz endet.

Geprüft mit einem simulierten Kurztraining: Im TCX stimmen Distanzzuwachs je Zeitabstand und gespeicherte Geschwindigkeit überein (Abweichung ≤ 0,3 %, Rundung der Distanz); im FIT liegen die Records auf ganzen Sekunden mit gleichmäßigen Distanzzuwächsen, der letzte Record entspricht der Session-Distanz.

Offen

  • Bestandstrainings werden bewusst nicht korrigiert: Die echten Tick-Zeiten wurden nie gespeichert, eine Rekonstruktion wäre nur eine Näherung und würde Messdaten unwiderruflich ändern. Ihre Zeiten bleiben ganze Sekunden.
  • Ein Test mit echter Fahrt steht noch aus: Poll-Timer bei hängendem Gerät, Leistungs- und Pulsprofil (Profilzeit) und Upload der Dateien in Garmin Connect.
  • Training.Duration wird wie bisher abgeschnitten (5,997 s → 5). Die Session-Dauer im Export kann dadurch knapp 1 s kürzer sein als der Datenstrom; bewusst unverändert, weil eine Rundung auch Anzeige und Bestandslogik beträfe.
  • Version: 3.1.4.

JH Von Julius Haman vor 10 Tagen aktualisiert Aktionen #1

  • Zielversion wurde auf ErControl 3.1.4 gesetzt

JH Von Julius Haman vor 10 Tagen aktualisiert Aktionen #2

JH Von Julius Haman vor 10 Tagen aktualisiert Aktionen #3

  • Status wurde von Neu zu Erledigt geändert

JH Von Julius Haman vor 9 Tagen aktualisiert Aktionen #4

  • Thema wurde von Aufzeichnung: Distanz und Zeitstempel der Trainingspunkte konsistent halten zu Aufzeichnung: Trainingspunkte mit ms-genauem Messzeitpunkt statt abgeschnittener ganzer Sekunden geändert
  • Beschreibung aktualisiert (Vergleich)

Ticket komplett überarbeitet: Statt die Distanz auf die Sekundenmarke zu interpolieren, speichert die Aufzeichnung jetzt den ms-genauen Messzeitpunkt (Time als Dezimalsekunden); Poll-Timer ohne Aufstau, Profilzeit aus Tretzeit, Anpassung an ganze Sekunden nur noch im FIT-/HRM-/CSV-Export.

JH Von Julius Haman vor 9 Tagen aktualisiert Aktionen #5

Poll-Timer ergänzt: nächster Tick auf festem 1-s-Raster, um die Latenz des letzten Ticks gekürzt (min. 500 ms), damit die Trainingszeit nicht mehr um 2 s springt.

JH Von Julius Haman vor 9 Tagen aktualisiert Aktionen #6

Ergänzt: Erholungspuls-Dialog blockierte den Poll-Tick (modal), jetzt per Task.Yield nach dem Tick geöffnet.

Aktionen

Auch abrufbar als: PDF Atom