update of trace_signal_fitter.py and some doc
All checks were successful
CI-Build/Kettenoeler/pipeline/head This commit looks good

This commit is contained in:
2025-08-27 23:59:57 +02:00
parent 27993d72ee
commit a9053997a1
3 changed files with 780 additions and 230 deletions

View File

@@ -0,0 +1,90 @@
# HOW-TO_REVERSE Praxisleitfaden fürs CAN-Reverse-Engineering
Dieses How-To ist dein Werkzeugkasten, um aus nackten Frames echte Signale zu destillieren. Es ist kein Orakel, sondern ein **Experimentier-Protokoll**: miss, verifiziere, falsifiziere. Nutze es zusammen mit der GUI/CLI (Splitter, Explorer, Batch-Analyzer, Range-/Unsupervised-Fit).
---
## 0) Vorbereitungen (Daten sammeln wie ein Ingenieur)
- **Zustände trennen**: *Zündung an*, *Motor aus*, *Motor an Leerlauf*, *Schieben*, *aufgebockt Hinterrad drehen*, *kurze Fahrt*.
- **Aktoren toggeln**: Blinker, Bremse, Licht, Lüfter → generiere Ground-Truth für Bits/Flags.
- **Nur RX** analysieren, wenn deine Hardware parallel TX sendet (Störmuster vermeiden).
---
## 1) Frame- & ID-Ebene zuerst
- **Repetition Rate (Hz)**: Zyklische Sensor-IDs senden stabil.
- *Daumenwerte*: WheelSpeed 20100 Hz, RPM 1050 Hz, TPS/APS 20100 Hz, Lenkwinkel 50100 Hz, Temperaturen 110 Hz.
- **Jitter** der Periodizität: Streuung der Inter-Arrival-Times. Niedrig = sauberer Zyklus.
- **DLC-Stabilität**: schwankende Payload-Länge → ggf. ISO-TP / Multiplex.
- **Change-Density**: Anteil Frames mit Payload-Änderung. Zu hoch → Counter/Checksumme, zu niedrig → Status/Träge.
---
## 2) Byte/Bit-Signaturen
- **Bit-Flip-Rate** pro Bit: ~50% → Flag/Event; sehr regelmäßig → Pattern/Timer.
- **Rolling Counter**: 4/8-bit Sequenzen (0..15/255), oft konstant steigend.
- **Checksumme**: Byte hängt deterministisch von anderen Bytes ab; häufig letzte Position.
- **Endianness**: 16-bit LE/BE testen. Monotone Trends/kleine Deltas weisen auf richtige Byteordnung.
- **Quantisierung**: typische Schrittweiten (z. B. 0.5 °C, 0.25 km/h).
---
## 3) Physik als Filter (Slew-Rate & Grenzen)
Miss **ΔWert/Δt** robust (95-Perzentil, nicht Max):
- **Temperaturen**: sehr träge → ΔT/s ≪ 1 °C/s.
- **Fahrgeschwindigkeit**: 0→100 km/h < 1 s unrealistisch; grob 3050 km/h/s (Straße).
- **RPM**: schnelle Sprünge möglich, aber nicht teleport. 1k8k in 13 s plausibel.
- **Lenkwinkel**: schnell, aber begrenzt; **Jerk** (ΔΔ/Δt) nicht absurd.
Alles, was diese Checks bricht, ist selten dein gesuchtes physikalisches Signal (oder deine Skalierung ist falsch).
---
## 4) Korrelation & Kausalität
- **Cross-Korrelation**: RPM WheelSpeed (Gang drin), Brake-Bit Pressure, Blinker-Bit Blinkfrequenz (~12 Hz).
- **Gang** aus Ratio (RPM/Speed) ableiten und Kandidaten validieren.
- **Event-Marker** setzen und zeitgleichen Byte-Kipp suchen.
---
## 5) Protokoll & Multiplex
- **ISO-TP**: Muster `0x10 len …` (First Frame), `0x21…` (Consecutive). Enthält selten einzelne Sensorkanäle.
- **Multiplexer**: Ein Byte schaltet die Seite der Payload um. Erkennbar am Sprungverhalten.
---
## 6) Statistik-Fingerabdrücke
- **Unique-Ratio** = |unique|/n. Zu klein Flag/Konstante; moderat analog.
- **Entropy** pro Byte Daten/Checksumme vs. Status.
- **Plateaus/Hysterese**: aktualisiert nur bei ΔSchwelle.
---
## 7) Scale/Offset systematisch schätzen
- **Scale-Raster**: Dekaden + praxisnahe Werte (0.0625, 0.1, 0.25, 0.5, 0.75, 1, 2, 5, 10 …).
- **Offset** via **Intervall-Überdeckung**: wähle das Offset, das die meisten Samples in [rmin, rmax] bringt.
- **Vorzeichen prüfen**: signed/unsigned, ggf. negative Scales zulassen.
---
## 8) Workflow-Cookbook
1. **Splitten** (Logs Traces).
2. **ID-Explorer/Batch**: Periodizität, Change-Density, 8/16-bit Plots.
3. **Range-Fit** mit physikalischen Ranges *und* **Slew-Limits** (Δ/Δt) + **Rate/Jitter-Constraints**.
4. **Cross-Checks**: Kandidaten gegen andere Kanäle testen (RPMSpeed, BrakePressure).
5. **Iterieren**: Range/Constraints verfeinern, Plots sichten, Hypothesen anpassen.
---
## 9) Typische Fallen
- Falsche Endianness Teleports.
- Counter/Checksumme im selben 16-bit-Wort zuerst trennen.
- DLC<8 16-bit-Kombis fehlen; keine Dummies einstreuen.
- ×10/×100-Skalierung: Δ/Δt wirkt absurd groß.
- BCD/ASCII in Diag/Odometer nicht physikalisch.
---
## 10) Ziel: Berichte statt Bauchgefühl
Automatisiere Tests & Schwellen. Lass Skripts einen **Analysebericht** schreiben: PASS (smooth, low jitter, rate ok)“ vs. FAIL (jitter, slope99 zu hoch, hit-ratio zu klein)“.
Das minimiert Confirmation Bias und macht Ergebnisse reproduzierbar.