Precision et Erreurs GPS
3 metres de precision annoncee, mais parfois 50 metres d'erreur en ville ! Pourquoi le GPS n'est-il pas toujours aussi precis qu'on le pense ? Decouvrez les sources d'erreurs et les techniques pour les corriger.
Objectifs du cours
- Identifier les sources d'erreurs du GPS (ionosphere, multipath, geometrie)
- Comprendre la notion de DOP (Dilution of Precision)
- Decouvrir les techniques d'amelioration (DGPS, RTK, PPP)
- Calculer un budget d'erreur GPS
- Connaitre les limites de la localisation (interieur, canyons urbains)
Erreurs courantes a eviter
- Croire que le GPS est toujours precis a 3 metres
- Ignorer l'impact de l'environnement sur la precision
- Ne pas comprendre la difference entre precision et exactitude
- Confondre erreur de mesure et erreur systematique
**Budget d'erreur GPS typique**
La precision GPS depend de nombreux facteurs. Voici les principales sources d'erreurs :
**1. Erreurs atmospheriques**
**Ionosphere (50-1000 km d'altitude)** : - Couche ionisee qui ralentit les signaux - Erreur : 2-50 metres (variable) - Depend de l'activite solaire, heure, saison - Corrigeable avec signaux bi-frequence
**Troposphere (0-12 km)** : - Vapeur d'eau, temperature, pression - Erreur : 0.5-5 metres - Plus stable mais moins previsible - Modelise par equations meteorologiques
**2. Erreurs des satellites**
**Horloges satellites** : - Derive des horloges atomiques - Erreur : ~2 metres - Corrige par le segment de controle
**Ephemerides (orbites)** : - Position exacte du satellite - Erreur : ~2.5 metres - Mise a jour toutes les 2 heures
**3. Erreurs du recepteur**
**Bruit du recepteur** : - Electronique imparfaite - Erreur : 0.3-1 metre - Depend de la qualite du materiel
**Multipath (trajets multiples)** : - Signal reflechi par surfaces (batiments, sol) - Erreur : 0.5-50 metres ! - Tres problematique en ville
**4. Erreurs geometriques (DOP)**
- Mauvaise repartition des satellites - Amplifie toutes les autres erreurs - DOP x erreur de base = erreur reelle
# Budget d'erreur GPS
import math
import random
print("=== BUDGET D'ERREUR GPS ===\n")
# Sources d'erreurs et leurs contributions
erreurs_gps = [
("Ionosphere", 5.0, "Couche ionisee, variable avec activite solaire"),
("Troposphere", 0.7, "Vapeur d'eau, temperature"),
("Horloges satellites", 2.0, "Derive residuelle des horloges atomiques"),
("Ephemerides", 2.5, "Erreur de position des satellites"),
("Multipath", 1.0, "Reflexions du signal (variable)"),
("Bruit recepteur", 0.5, "Electronique du recepteur")
]
print("SOURCES D'ERREURS (1 sigma, conditions normales) :\n")
print(f"{'Source':<25} {'Erreur (m)':<15} {'Description':<40}")
print("-" * 80)
total_variance = 0
for source, erreur, description in erreurs_gps:
print(f"{source:<25} {erreur:<15.1f} {description:<40}")
total_variance += erreur**2
# Erreur totale (RSS - Root Sum Square)
erreur_totale = math.sqrt(total_variance)
print("-" * 80)
print(f"{'ERREUR TOTALE (RSS)':<25} {erreur_totale:<15.1f} {'Racine somme des carres':<40}")
# Impact du DOP
print("\n\n=== IMPACT DU DOP (Dilution of Precision) ===\n")
dop_scenarios = [
("Ideal (satellites bien repartis)", 1.0, "Excellent"),
("Bon", 2.0, "Normal"),
("Modere", 4.0, "Acceptable"),
("Degrade (satellites groupes)", 6.0, "Mediocre"),
("Tres mauvais", 10.0, "A eviter")
]
print(f"DOP x Erreur de base ({erreur_totale:.1f} m) = Erreur reelle\n")
print(f"{'Scenario':<35} {'DOP':<8} {'Erreur reelle':<15} {'Qualite':<12}")
print("-" * 70)
for scenario, dop, qualite in dop_scenarios:
erreur_reelle = erreur_totale * dop
print(f"{scenario:<35} {dop:<8.1f} {erreur_reelle:<15.1f} {qualite:<12}")
# Conditions extremes
print("\n\n=== CONDITIONS PARTICULIERES ===\n")
conditions = [
("Champ ouvert, ciel degage", 1.5, 3.0),
("Zone suburbaine", 2.5, 8.0),
("Centre-ville (immeubles bas)", 3.0, 15.0),
("Canyon urbain (gratte-ciels)", 5.0, 50.0),
("Foret dense", 3.5, 25.0),
("Pres d'une falaise", 4.0, 30.0),
("Interieur batiment", None, None)
]
print(f"{'Environnement':<35} {'DOP typique':<15} {'Erreur typique':<15}")
print("-" * 65)
for env, dop, erreur in conditions:
if dop is None:
print(f"{env:<35} {'N/A':<15} {'Signal perdu':<15}")
else:
print(f"{env:<35} {dop:<15.1f} {erreur:<15.1f}")
# Simulation d'erreur en temps reel
print("\n\n=== SIMULATION : VARIATIONS D'ERREUR ===\n")
print("10 mesures successives (meme position) :\n")
position_reelle = (48.8566, 2.3522) # Paris
for i in range(10):
# Simuler les erreurs
erreur_x = random.gauss(0, 3) # metres
erreur_y = random.gauss(0, 3) # metres
erreur_totale = math.sqrt(erreur_x**2 + erreur_y**2)
# Convertir en coordonnees
lat_err = erreur_y / 111111 # ~111km par degre
lon_err = erreur_x / (111111 * math.cos(math.radians(position_reelle[0])))
lat_mesuree = position_reelle[0] + lat_err
lon_mesuree = position_reelle[1] + lon_err
print(f" Mesure {i+1:>2}: ({lat_mesuree:.6f}, {lon_mesuree:.6f}) - Erreur: {erreur_totale:.1f}m")Quiz de validation
1. Quelle couche atmospherique cause la plus grande erreur GPS variable ?
2. Que mesure le DOP (Dilution of Precision) ?
3. Quelle technique offre une precision centimetrique ?
4. Qu'est-ce que le multipath ?
5. Pourquoi le GPS ne fonctionne-t-il pas a l'interieur des batiments ?
