Module
| Champ | Valeur |
|---|---|
| Stage | GPSCleanerStage |
| Fichier | nostos/src/nostos/stages/d1_gps_cleaner.py |
| Version | 0.4 |
| Couche | D0 → D1 |
| Entrée | D0 brut (1-100 Hz, multi-rate, avec ou sans speed/gyro) |
| Sortie | D1 normalisé (speed_mps, dist_m, gps_blackout remplis) |
Fonctionnalités
v0.1 — Base
- Smoothing Savitzky-Golay sur lat/lon
v0.2 — Nettoyage avancé
- Détection de sauts GPS (outlier jumps via vitesse implicite)
- Marquage des blackouts GPS (séquences NaN > seuil)
- Correction de la dérive cold start (biais exponentiel décroissant)
- Smoothing adaptatif HDOP (fenêtre variable selon la qualité GPS)
v0.3 — Multi-rate
- Reconstruction de la vitesse à partir du GPS quand speed_mps est absent
- Calcul haversine entre points GPS valides non consécutifs (multi-rate)
- Forward-fill + lissage de la vitesse reconstruite
v0.4 — Adaptatif
- Détection automatique de la fréquence IMU et GPS
- Validation D0 en entrée (colonnes, ranges, monotonie)
- Forward-fill intelligent lat/lon (interpolation linéaire, max 30s gap)
- Distance hybride (speed * dt prioritaire, haversine en fallback)
- Paramètres de smoothing adaptatifs à la fréquence détectée
- Rapport de qualité enrichi dans les artifacts
Algorithmes clés
Détection de fréquence
- Fréquence IMU = 1 / médiane(dt) sur toutes les rows
- Fréquence GPS = 1 / médiane(dt) entre rows où lat/lon changent
- Multirate = IMU_Hz > GPS_Hz × 1.5
Reconstruction de vitesse (v0.3+)
- Identifier les indices des GPS valides (lat/lon non NaN)
- Pour chaque paire consécutive de GPS valides : distance = haversine(lat1, lon1, lat2, lon2) vitesse = distance / dt
- Écrêtage à 200 km/h (55.6 m/s)
- Forward-fill + lissage moyenne glissante (5 points)
Distance hybride (v0.4)
- Si speed_mps disponible (> 50% non NaN) : dist = |speed| × dt
- Sinon : haversine entre points GPS consécutifs
Tests unitaires (12 tests)
- Cohérence distance (dist_m vs speed*dt < 20%)
- Reconstruction vitesse multi-rate
- Détection rotation IMU (pitch 15°)
- Détection freinage brusque
- Hz detection 10/24/100 Hz (3 tests)
- Validation D0 (colonnes manquantes, OK)
- Forward-fill GPS
- GPS Cleaner v0.4 complet sur multi-rate
Datasets validés
| Dataset | Pays | Hz IMU | Hz GPS | Speed source | Résultat |
|---|---|---|---|---|---|
| UAH | Espagne | 10 | 1 | GPS direct | OK |
| AEGIS | Autriche | 24 | 1 | Reconstruit | OK (75.3 km) |
| PVS | Brésil | 100 | 1 | Forward-fill | OK |
| Accident | Inde | 1 | 1 | GPS direct | OK |
| RS3 | France | 10 | 1 | Reconstruit | OK |