Show HN : projet de fabrication d’un récepteur GPS
(axleos.com)- gypsum est un projet de fabrication de récepteur qui décode les signaux GPS depuis zéro pour obtenir une position, et la 1re partie d’une série en 4 volets se concentre sur la détection de signaux satellites enfouis sous le bruit
- Le GPS est un signal de diffusion émis par environ 30 satellites vers l’ensemble de la Terre, si bien que les satellites ne peuvent pas savoir qui écoute, et qu’un datacenter ne peut pas non plus se substituer à la réception radio de l’utilisateur
- Le signal GPS qui atteint une antenne au sol peut avoir une puissance 100 000 fois inférieure au bruit ambiant, et être 100 millions de fois plus faible qu’un signal cellulaire classique, au point d’être presque invisible tel quel
- Le récepteur compare de façon répétée le code C/A connu à la fois du satellite et du récepteur afin de moyenner le bruit aléatoire, et de retrouver un signal de données à 50 bps sur un code PRN à 1 Mbps
- L’acquisition est une étape gourmande en calcul qui explore pour chaque satellite le PRN, le décalage Doppler de ±5 kHz et la phase du code afin d’identifier les satellites visibles ainsi que le retard temporel approximatif et la vitesse relative
Projet d’écoute directe des signaux GPS
- gypsum est un projet de récepteur GPS développé from scratch
- Cette série en 4 parties traite du processus de décodage des signaux GPS pour obtenir une position, et la 1re partie correspond à l’étape de recherche du signal et d’acquisition des satellites
- Le GPS repose sur environ 30 satellites qui émettent des signaux vers toute la Terre, et ces signaux sont toujours présents autour de nous, quelle que soit l’altitude ou la météo
- Le GPS a été lancé en 1978, et au moment de la rédaction cela fait 45 ans
Une balise discrète et un calcul de position impossible à déporter sur serveur
- Le signal d’un satellite GPS a, à l’émission, une intensité comparable à celle d’une ampoule domestique, mais devient extrêmement faible lorsqu’il atteint le sol
- Le GPS fonctionne presque en mode send-and-forget, de sorte que le satellite ne peut pas savoir qui l’écoute
- La radio FM et la télévision hertzienne ont des caractéristiques similaires
- Cette architecture rend difficile pour quiconque de facturer l’accès au GPS lui-même
- Le calcul de position ne correspond pas à un modèle où un service web ferait le traitement à la place de l’utilisateur
- Le GPS exige d’écouter directement les ondes radio qui arrivent à l’endroit où se trouve l’utilisateur
- Un datacenter ne peut pas écouter à la place de l’utilisateur les ondes qui arrivent à sa position
Explorer les fréquences GPS avec un SDR
- Pour recevoir un signal GPS par logiciel et le post-traiter, il faut un récepteur RF réglable, c’est-à-dire une radio logicielle (SDR)
- Le spectre est exploré avec SDR++
- Quelques notions sont nécessaires lors de l’utilisation d’un SDR
- bias tee : circuit interne au SDR qui fournit une alimentation DC à l’antenne connectée en SMA. Sur le SDR utilisé, cette fonction était désactivée par défaut et a dû être activée manuellement
- automatic gain control (AGC) : circuit matériel ou fonction logicielle visant à amplifier les signaux faibles pour améliorer le rapport signal/bruit (SNR) des données reçues
- IQ samples : I désigne la composante in-phase, Q la composante quadrature ou imaginaire, ce qui permet un traitement selon le temps, l’amplitude et la polarité
- Le SDR produit un gros pic à la fréquence centrale sélectionnée
- Pour un débutant, cela peut donner l’impression qu’il y a un signal fort partout où l’on regarde
- On peut réduire ce pic en se décalant légèrement de la fréquence centrale, ou via l’IQ correction du logiciel
Comment retrouver un signal enfoui sous le bruit
- À l’antenne au sol, le signal GPS arrive avec une puissance 100 000 fois inférieure à l’énergie et aux signaux ambiants
- Le signal GPS peut être jusqu’à 50 dB en dessous du plancher de bruit thermique
- Les satellites GPS modernes sont conçus pour transmettre un signal qui arrive au récepteur autour de -130 dBm
- Dans la bande C/A, le plancher de bruit thermique d’un environnement résidentiel typique est d’environ -110 dBm
- À titre de comparaison, un signal cellulaire est autour de -50 dBm, soit 100 millions de fois plus fort qu’un signal GPS
- Pour identifier et décoder un signal ainsi enfoui sous le bruit, le GPS utilise la technique du spread-spectrum
Écouter un signal inaudible avec le code C/A et les PRN
- Les satellites GPS transmettent, en plus des données inconnues du récepteur, un signal connu à la fois du satellite et du récepteur
- Ce signal est appelé code C/A, code PRN ou chipping code, et le satellite le répète 1 000 fois par seconde
- C/A signifie coarse acquisition
- Dans le GPS initialement conçu pour l’usage militaire, le code C/A servait d’étape basse résolution pour se verrouiller sur le code P, plus précis
- Aujourd’hui, le code C/A est à la base de la plupart des usages GPS civils, tandis que le code P reste réservé au domaine militaire
- Si les récepteurs civils ne peuvent pas utiliser le code P, c’est parce qu’ils ne connaissent pas les valeurs de la séquence de chipping
- Si la formule de génération du code P était publique, il serait possible de s’y verrouiller avec la même technique que pour le code C/A
- Le code P est plus précis car il fonctionne à un chipping rate plus élevé
- Le récepteur additionne et compare de façon répétée le PRN attendu avec le signal réellement reçu
- Le bruit aléatoire se moyenne vers 0 au fil du temps
- Le signal PRN, lui, continue de s’accumuler et de croître
- Le GPS utilise le code-division multiple access (CDMA) pour gérer simultanément plusieurs satellites
- Le signal de données réel est transmis mélangé au code PRN
- Le code PRN fonctionne à 1 Mbps
- Le signal de données est transmis à une vitesse bien plus faible de 50 bps
- Grâce à ce faible débit, le code PRN reste un signal de référence stable sur des durées relativement longues
Génération du code C/A propre à chaque satellite
- Comme il y a plusieurs satellites, le récepteur doit déterminer lesquels sont visibles
- Chaque satellite GPS possède un code PRN unique et stable
- Ce code est défini dans le
Table 3-I (Code Phase Assignments)de la spécification GPS civile IS-GPS-200L - On trouve en ligne de nombreuses ressources expliquant comment générer les codes PRN, mais peu de documents reproductibles permettant de comparer l’ensemble des codes PRN
Étape d’acquisition : trouver les satellites visibles
- Pour trouver les satellites visibles dans le ciel, le récepteur GPS génère une copie du PRN émis par chaque satellite et recherche ce PRN dans les données collectées par l’antenne
- Cette étape est l’acquisition, dont l’objectif est de se verrouiller sur les satellites présents au-dessus de l’utilisateur
- Le récepteur capture un court snapshot d’environ 1 seconde des données d’antenne, puis calcule la corrélation avec chaque PRN répliqué
- S’il existe une forte corrélation entre le PRN répliqué et les données réelles, cela indique que le satellite correspondant émet bien un signal au-dessus de nous
- Le signal reçu en pratique diffère du PRN idéal
- Le signal GPS s’affaiblit en traversant l’atmosphère terrestre
- Comme les satellites se déplacent rapidement, le signal reçu subit un décalage Doppler
- La vitesse orbitale des satellites GPS est bien connue, ce qui permet d’anticiper la plage de Doppler
- Un satellite qui s’approche peut produire une hausse de fréquence allant jusqu’à +5 kHz
- Un satellite qui s’éloigne peut produire une baisse de fréquence de -5 kHz
- Le démarrage de la réception ayant lieu à un instant arbitraire, on peut commencer à écouter en plein milieu de la transmission d’un PRN
- L’étape d’acquisition explore simultanément trois axes
- le code PRN de chaque satellite
- la plage attendue de décalage Doppler
- la phase qui décale le PRN répliqué pour l’aligner sur le PRN reçu
- Le volume de calcul est important, mais lorsqu’on trouve les bons paramètres, un pic de corrélation net apparaît
Mise en œuvre et résultat de la 1re partie
- L’implémentation convertit chaque PRN du domaine temporel vers le domaine fréquentiel, puis corrèle la fréquence des données satellites entrantes avec le spectre de chaque code PRN
- Cette approche correspond à une cross correlation dans le domaine fréquentiel
- Comme un décalage de phase dans le domaine temporel se traduit par un déplacement des composantes fréquentielles, la recherche du décalage Doppler et celle de la phase peuvent être traitées dans le même calcul
- Pour le décalage Doppler, la méthode converge de manière proche d’une binary search afin de trouver, pour chaque satellite visible, la valeur qui produit le pic de corrélation le plus fort
- À l’issue de cette 1re partie, on peut déterminer quels satellites GPS se trouvent actuellement au-dessus de l’utilisateur, ainsi que leur phase / retard temporel approximatif et leur décalage Doppler / vitesse relative
- L’étape suivante mène à Part 2: Tracking Pinpricks
1 commentaires
Avis de Hacker News
On peut trouver des récepteurs à échantillonnage RF direct ou à conversion RF directe suffisamment rapides pour le GPS. Ex. : Xilinx RFSoc https://www.mouser.com/datasheet/2/903/ds889_zynq_usp_rfsoc_..., article de National Instruments https://www.ni.com/en/solutions/aerospace-defense/radar-elec..., matériel prêt à l’emploi associé https://www.ni.com/en-us/shop/category/flexrio-custom-instru...
C’est un peu étonnant que NI considère la conversion RF directe comme rentable tout en vendant l’équipement 30 000 dollars, mais si l’on prototype une réception large bande à cohérence de phase autour de 3 GHz, avec un vrai labo et un budget adapté, cela peut valoir la peine d’en acheter quelques-uns. En production de masse, on attendrait sans doute que le coût d’une carte maison baisse davantage, ou on regarderait si un récepteur hétérodyne traditionnel peut faire l’affaire.
Si, dans un contexte militaire, on s’inquiète d’armes de suivi RF avancées, un récepteur à conversion directe peut être intéressant, car il n’y a pas de fuite d’oscillateur local détectable par l’équipement adverse.
Quand je vois l’expression « from scratch », je me demande toujours à quel point c’est vraiment parti de zéro, et j’ai été un peu déçu de voir que le matériel était un RTL-SDR. Cela dit, le décodage du protocole est très intéressant et le résultat est excellent.
Le GPS a démarré en 1978, mais jusqu’en 2000 le signal a été intentionnellement dégradé par un mécanisme appelé « disponibilité sélective ». À cause de cela, le GPS était pratiquement inutilisable pour de nombreux usages, clairement inadapté à la navigation routière, et seulement utile de façon limitée pour l’exploration en zones isolées ou la navigation maritime.
Le fait que gypsum parvienne, en démarrage à froid, à obtenir une position et l’heure exacte après moins d’une minute d’écoute du signal d’antenne est très impressionnant, et semble même meilleur que les récepteurs commerciaux actuels. Au début des années 2000, lors de voyages en voiture, il fallait attendre 15 à 20 minutes sur le bas-côté avant que le récepteur GPS obtienne une position ; si cela ne marchait pas, on partait simplement avec une carte papier.
Quarante-six ans plus tard, la couche radio conserve une compatibilité ascendante et descendante complète, et des indicateurs clés comme le temps jusqu’au premier fix et l’erreur de distance équivalente utilisateur se sont améliorés de 10 à 1000 fois sans changement incompatible du protocole.
La puissance d’émission RF totale qui fournit le service à toute la Terre est inférieure à la consommation électrique d’un foyer américain typique, bien plus faible que celle de la 5G, de la télévision ou de la radio AM/FM, et sous le plancher de bruit. C’est possible grâce à l’utilisation de codes de Gold empilés.
Le système a aussi été conçu pour permettre le partage de fréquences avec des systèmes concurrents comme Galileo, ce qu’on voit rarement dans les réseaux mobiles. Les données modulées et la phase de la porteuse étant fixes, des techniques comme le décodage de phase de porteuse sont devenues possibles, ce qui permet d’obtenir une meilleure pseudo-distance et une meilleure précision.
Dans l’ensemble, les concepteurs avaient soit une clairvoyance incroyable, soit une chance incroyable, soit les deux.
Ce que je voulais dire ici, c’est que je suis parti d’un matériel qui ne sait rien du GPS, c’est-à-dire d’un appareil seulement capable d’échantillonner des champs électromagnétiques, puis que j’ai construit le récepteur par-dessus.
La lenteur du temps jusqu’au premier fix sur les anciens matériels tient fondamentalement aux progrès de la capacité de traitement. Les récepteurs GPS traditionnels devaient télécharger l’« almanach » de tous les satellites, et, à cause du format et du débit de transmission des données GPS, cela prenait au minimum 12,5 minutes même dans de bonnes conditions.
Avec la puissance de traitement moderne, les récepteurs, gypsum compris, peuvent trouver les satellites visibles en explorant l’espace de recherche par force brute, au lieu d’attendre les indices transmis depuis le ciel. C’est la méthode décrite à la fin de la première partie.
En 1999, j’ai fait un voyage en voiture avec un récepteur GPS Delorme Earthmate Hyperformance en version RS-232 connecté à un Toughbook, en faisant tourner quelque chose comme Delorme Street Atlas USA 6.0.
Sur une traversée du pays, cela fournissait des indications routières tout à fait utilisables. Il n’y avait pas de guidage par voie, mais il annonçait les virages avant chaque changement de direction, avec le nom des rues.
Cette version avait aussi de la reconnaissance vocale : si l’on disait quelque chose comme « on est encore loin ? », elle donnait l’heure d’arrivée estimée au prochain waypoint et à la destination finale, ainsi que la position actuelle, et c’était assez amusant.
Si, sous disponibilité sélective, l’erreur circulaire probable maximale typique était d’environ 30 m, c’est suffisamment précis pour la navigation routière sauf dans les zones très denses. Même là, il suffisait de jeter un œil à la carte, et sur route dégagée c’était excellent.
Les anciens récepteurs GPS mettaient en avant le nombre de canaux de suivi comme argument marketing : les récepteurs bon marché n’avaient du matériel que pour suivre 6 à 8 satellites, tandis que les modèles haut de gamme pouvaient en suivre 12.
Ce récepteur défini par logiciel implémente donc une bonne partie de ce qui aurait auparavant été pris en charge par le matériel, et il peut suivre tous les satellites visibles.
L’approche logicielle présente de solides avantages. Par exemple, l’acquisition initiale des satellites consiste à calculer l’intercorrélation entre le signal reçu et plusieurs codes de Gold ; en traitant cela dans le domaine de Fourier, on peut acquérir le signal assez rapidement.
Si vous voulez un récepteur GPS DIY hardcore qui descend jusqu’au niveau des transistors, https://lea.hamradio.si/~s53mv/navsats/theory.html devrait être une lecture intéressante. C’est un récepteur GPS DIY façon années 1990, avec schémas dessinés à la main, PCB dessiné à la main, et même antenne artisanale.
En plus, à la fin des années 1990, ce n’était pas idéal en environnement urbain dense, mais c’est un domaine où les récepteurs modernes souffrent souvent aussi, et la correction GPS différentielle pour automobile était possible. C’était utilisable dans des zones côtières métropolitaines très peuplées comme NYC.
Les anciens systèmes de navigation automobile étaient rudimentaires et les données cartographiques globalement médiocres, mais en raison de la disponibilité sélective, il est difficile de dire qu’ils étaient « clairement inutiles ».
Bien sûr, j’admets que c’était assez mauvais. Mais la disponibilité sélective n’était qu’un facteur ; avec la puissance de traitement actuelle et de meilleures cartes, on aurait pu corriger plus facilement même avec l’erreur de position due à la disponibilité sélective.
Le libellé juridique de la réglementation mise à jour https://www.space.commerce.gov/itar-controls-on-gps-gnss-rec... est tellement complexe qu’il est difficile de comprendre si cela s’applique encore.
À propos de SDR, l’ITAR est aussi la raison pour laquelle le module GNU Radio de radar passif de l’équipe Kraken RF a été retiré.
J’aime aussi https://ciechanow.ski/gps/, qui propose de superbes visuels à consulter en parallèle de cette explication.
Ces graphiques interactifs sont imbattables.
Ajouté à sa capacité à créer le logiciel qui aide à l’analyse et implémente la solution finale, cela donne un superbe projet. J’ai étudié le GPS et travaillé dessus professionnellement pendant des années, mais je ne sais toujours pas tout. J’ai hâte de regarder le code.
Avec le recul, j’ai vraiment l’impression d’avoir bien fait. J’ai désormais l’impression de comprendre le domaine RF de façon beaucoup plus concrète et de pouvoir l’utiliser comme un outil. Cela me rappelle des aspects que j’aime dans les ordinateurs eux-mêmes.
Si la formule de génération du code P était publique, les récepteurs GPS civils pourraient s’y verrouiller avec les mêmes techniques que pour le code C/A.
Je n’ai pas tout lu, mais je suis curieux : existe-t-il une méthode, par force brute ou autre astuce, pour obtenir la séquence de chips du code P afin d’avoir un GPS plus précis ?
Si l’histoire du développement du GPS vous intéresse, “GPS Declassified” de Richard Easton était un livre qui la racontait de façon intéressante.
Le GPS fonctionne même en mode avion, et littéralement dans un avion. Il fonctionne sans service cellulaire ni Wi‑Fi. Les États-Unis contrôlent la constellation de satellites GPS, peuvent couper le GPS dans certaines régions quand c’est nécessaire, et l’ont déjà fait. C’est pour cela que d’autres pays ont lancé leurs propres constellations GNSS.
Il est aussi amusant de constater que les satellites GPS ne transmettent pas une position, mais seulement le temps. Faire cela avec les données reçues par un téléphone est un exercice vraiment amusant, et le téléphone est directement connecté aux satellites.
À ce propos, j’ai récemment appris les principes de base de la navigation par les étoiles ; le mécanisme est complètement différent, mais j’ai trouvé intéressante la symétrie du fait qu’elle dépend elle aussi fortement du maintien d’une heure précise.
Les premiers récepteurs GPS que j’ai utilisés étaient des appareils autonomes sans aucune connexion de données, donc il m’a toujours semblé évident que le GPS n’avait pas besoin de données.
Cela dit, les appareils comme les téléphones reçoivent généralement ces données depuis d’autres sources, parce que c’est beaucoup plus rapide que d’attendre la transmission des données GPS.
La possibilité de couper le GPS à volonté dans une région donnée, d’après ce que je comprends, n’existe plus sur les satellites GPS plus récents, et peut-être même sur aucun des satellites actuellement en service.
Avec l’iPhone, après l’atterrissage, ces photos sont associées à l’endroit où elles ont été prises. Ça permet de retrouver plus tard des reliefs intéressants aperçus par hasard.
Il inclut même les requêtes de recherche utilisées et le monologue intérieur. Ce n’est pas simplement apprendre à pêcher : c’est plutôt montrer comment se procurer les pièces pour fabriquer soi-même une machine à pêcher, ce qui en fait mon type de tutoriel préféré.
Mais je te remercie vraiment d’avoir apprécié cette approche.