Fonctionnement du GPS
Le GPS calcule votre position a 3 metres pres en mesurant des temps de trajet de l'ordre de 0.07 seconde avec une precision de quelques nanosecondes. Decouvrez comment ce prodige technologique fonctionne !
Objectifs du cours
- Comprendre le principe de base du GPS : mesure de distances
- Maitriser le concept de temps de propagation des ondes
- Comprendre pourquoi 4 satellites sont necessaires
- Decouvrir le role crucial des horloges atomiques
- Simuler le calcul d'une position GPS en Python
Erreurs courantes a eviter
- Croire que le GPS envoie notre position (il ne fait que recevoir)
- Penser que le GPS a besoin d'Internet pour fonctionner
- Confondre le role des 3 segments (spatial, controle, utilisateur)
- Sous-estimer l'importance de la precision temporelle
**Comment le GPS mesure-t-il les distances ?**
Le GPS repose sur un principe physique simple : si on connait la vitesse d'un signal et son temps de trajet, on peut calculer la distance parcourue.
**La formule magique** : Distance = Vitesse x Temps
**Application au GPS** : - Les signaux GPS voyagent a la vitesse de la lumiere : c = 299 792 458 m/s - Un satellite a 20 200 km d'altitude - Temps de trajet : environ 0.067 seconde
**Calcul** : Distance = 299 792 458 m/s x 0.067 s = 20 086 km
**Le probleme de la mesure du temps** : - Il faut connaitre l'heure exacte d'emission du signal - Il faut connaitre l'heure exacte de reception - La difference donne le temps de trajet
**Precision requise** : - 1 nanoseconde d'erreur = 30 cm d'erreur de position - 1 microseconde d'erreur = 300 metres ! - C'est pourquoi les satellites ont des horloges atomiques
**Le signal GPS contient** : 1. L'identifiant du satellite (numero PRN) 2. L'horodatage precis (heure d'emission) 3. Les ephemerides (position exacte du satellite) 4. L'almanach (etat de la constellation)
**Ce que fait le recepteur** : 1. Recoit le signal 2. Note l'heure de reception 3. Calcule le temps de trajet 4. En deduit la distance au satellite
# Principe de base du GPS : mesure de distance
import math
print("=== PRINCIPE DU GPS : DISTANCE = VITESSE x TEMPS ===\n")
# Constantes
VITESSE_LUMIERE = 299792458 # m/s
ALTITUDE_GPS = 20200000 # metres (20 200 km)
print(f"Vitesse des signaux GPS : {VITESSE_LUMIERE:,} m/s")
print(f"(= vitesse de la lumiere)\n")
# Calcul du temps de trajet minimal (satellite au zenith)
distance_min = ALTITUDE_GPS
temps_min = distance_min / VITESSE_LUMIERE
print("CAS 1 : Satellite directement au-dessus (zenith)")
print(f" Distance : {distance_min/1000:,.0f} km")
print(f" Temps de trajet : {temps_min*1000:.3f} ms ({temps_min:.6f} s)")
# Calcul du temps de trajet maximal (satellite a l'horizon)
# Distance max = sqrt((R+h)^2 - R^2) ou R = rayon Terre, h = altitude
RAYON_TERRE = 6371000 # metres
distance_max = math.sqrt((RAYON_TERRE + ALTITUDE_GPS)**2 - RAYON_TERRE**2)
temps_max = distance_max / VITESSE_LUMIERE
print("\nCAS 2 : Satellite a l'horizon")
print(f" Distance : {distance_max/1000:,.0f} km")
print(f" Temps de trajet : {temps_max*1000:.3f} ms ({temps_max:.6f} s)")
# Impact des erreurs d'horloge
print("\n\n=== IMPACT DES ERREURS D'HORLOGE ===\n")
erreurs = [
("1 nanoseconde", 1e-9),
("10 nanosecondes", 10e-9),
("100 nanosecondes", 100e-9),
("1 microseconde", 1e-6),
("10 microsecondes", 10e-6),
("1 milliseconde", 1e-3)
]
print(f"{'Erreur de temps':<25} {'Erreur de position':<20}")
print("-" * 45)
for nom, erreur_temps in erreurs:
erreur_distance = VITESSE_LUMIERE * erreur_temps
if erreur_distance < 1:
dist_str = f"{erreur_distance*100:.1f} cm"
elif erreur_distance < 1000:
dist_str = f"{erreur_distance:.1f} m"
else:
dist_str = f"{erreur_distance/1000:.1f} km"
print(f"{nom:<25} {dist_str:<20}")
print("\nC'est pourquoi les satellites ont des HORLOGES ATOMIQUES !")
print("(Precision : 1 seconde de derive en 300 000 ans)")
# Simulation de reception de signal
print("\n\n=== SIMULATION : RECEPTION D'UN SIGNAL GPS ===\n")
import time
# Heure d'emission (simulee)
heure_emission = 1234567890.123456789 # timestamp en secondes
# Distance au satellite (simulee)
distance_satellite = 22000000 # 22 000 km
# Temps de trajet
temps_trajet = distance_satellite / VITESSE_LUMIERE
# Heure de reception
heure_reception = heure_emission + temps_trajet
print(f"Heure d'emission (satellite) : {heure_emission:.9f}")
print(f"Heure de reception (GPS) : {heure_reception:.9f}")
print(f"Temps de trajet : {temps_trajet:.9f} s")
print(f"Distance calculee : {temps_trajet * VITESSE_LUMIERE / 1000:.1f} km")Quiz de validation
1. Quelle formule permet de calculer la distance au satellite ?
2. Combien de satellites sont necessaires au minimum pour calculer une position GPS ?
3. Pourquoi le 4eme satellite est-il necessaire ?
4. Quelle est la precision d'une horloge atomique au cesium ?
5. Quel segment du GPS calcule les orbites precises des satellites ?
