I sistemi di posizionamento satellitare, come il GPS, sono utilizzati in una vasta gamma di settori: in passato limitati ad applicazioni ben specifiche, come i navigatori, questi strumenti sono oggi adottati in molteplici app. Addirittura, quando si scatta una foto, l'immagine contiene le coordinate geografiche del punto in cui la si è acquisita. In un altro articolo abbiamo spiegato cos'è EXIF e cosa contengono le foto che scattiamo.
I satelliti GPS trasmettono informazioni relative a posizione e tempo verso la superficie terrestre. La trasmissione del "precise time" dai satelliti GPS è essenziale per consentire ai ricevitori sulla Terra di calcolare con accuratezza la propria posizione utilizzando proprio i segnali GPS.
Funzionamento del GPS: i segnali sono davvero molto deboli
I satelliti GPS emettono onde radio estremamente deboli, con la potenza del segnale che raggiunge il ricevitore a Terra quantificabile addirittura nell'ordine dei -130 dBm. Phillip Tennen, sviluppatore di un'app di posizionamento basata su GPS chiamata gypsum, paragona la ricezione di un segnale GPS a "guardare una lampadina accendersi e spegnersi a 20.000 km di distanza un milione di volte al secondo".
Intorno al nostro pianeta "viaggiano" molteplici tipologie di onde radio e c'è molto rumore, più forte del segnale emesso dai satelliti GPS. Gli smartphone che abbiamo tra le mani e i sistemi di navigazione per auto devono trovare il segnale GPS scovandolo nel "mare di rumore" che contraddistingue le comunicazioni. I segnali GPS possono trovarsi fino a 50 dB al di sotto del rumore termico di fondo.
L'immagine è tratta da Hearing Whispers (Phillip Tennen)
Come funziona il GPS, in breve
Il sistema GPS, acronimo di Global Positioning System, è un sistema di navigazione satellitare che consente di determinare la posizione, la velocità e il tempo in qualsiasi punto della Terra, 24 ore su 24, in qualsiasi condizione atmosferica e in qualunque luogo, purché si abbia una visuale non ostruita del cielo. Il funzionamento del sistema GPS si basa su una costellazione di satelliti in orbita intorno alla Terra.
Come abbiamo spiegato nell'articolo sulle problematiche relative alla privacy legate all'uso del GPS e dei sistemi di geoposizionamento, il GPS statunitense è disponibile in Europa fin dagli anni '90 ma dal 1998 l'Unione Europea ha sviluppato Galileo, entrato in piena operatività più di recente.
Il processo di determinazione della posizione tramite il sistema GPS, avviene in tre fasi principali: acquisizione, tracciamento e calcolo della posizione:
- Acquisizione: Durante questa fase, il ricevitore GPS rileva i segnali trasmessi dai satelliti. Questi segnali sono ricevuti dall'antenna del dispositivo GPS e passati al ricevitore interno. Il ricevitore cerca attivamente i segnali dei satelliti visibili e acquisisce informazioni sulle loro posizioni e sui dati temporali.
- Tracciamento: Una volta acquisiti i segnali dei satelliti, il ricevitore GPS inizia la fase di tracciamento. Durante questa fase, il ricevitore segue costantemente i segnali dei satelliti e misura le variazioni nel tempo dei segnali dovute allo spostamento Doppler. Inoltre, il ricevitore determina la posizione approssimativa dei satelliti utilizzando le informazioni ricevute durante la fase di acquisizione.
- Calcolo della posizione: Utilizzando i dati raccolti dai satelliti visibili e le informazioni sui loro movimenti, il ricevitore GPS calcola la sua posizione sulla superficie della Terra utilizzando il principio della trilaterazione. Questo processo coinvolge la misurazione del tempo impiegato dai segnali GPS per raggiungere il ricevitore. Conoscendo la velocità a cui viaggiano i segnali (la velocità della luce) e misurando il tempo impiegato dai segnali per arrivare al ricevitore, il dispositivo GPS può determinare la distanza effettiva da ciascun satellite. Con almeno quattro satelliti visibili, il ricevitore può calcolare la sua posizione tridimensionale utilizzando algoritmi matematici.
Codici PRN e acquisizione del segnale
Ci sono 32 satelliti GPS in funzione e informazioni accurate sulla posizione possono essere calcolate ricevendo i segnali da quattro di essi. Ogni satellite GPS emette un segnale unico chiamato codice PRN 1.000 volte al secondo. Un ricevitore GPS può identificare da quale satellite GPS proviene il segnale leggendo il codice PRN.
Per effettuare un'esplorazione alla ricerca di satelliti, i ricevitori GPS devono generare una copia di ciascun PRN emesso da ciascuno dei 32 satelliti, quindi cercare ognuno di questi PRN nei dati raccolti dall'antenna. Questa fase è chiamata acquisizione perché l'obiettivo consiste appunto nell'"agganciare" qualunque satellite sia "visibile" nella porzione di cielo al di sopra del ricevitore.
Ciascun ricevitore GPS esamina una breve istantanea dei dati provenienti dall'antenna (un secondo circa) e provvede a correlare i dati ricevuti con ciascuno dei codici PRN replicati. Se c'è una forte correlazione tra la replica e i dati in arrivo in tempo reale, è possibile sapere con certezza che il satellite associato a quel PRN sta trasmettendo dati.
Poiché i satelliti GPS si muovono ad alta velocità in orbita, i segnali che trasmettono sono soggetti all'effetto Doppler. I ricevitori GPS devono tenere conto anche di questo fenomeno quando confrontano le informazioni sul codice PRN con le informazioni arrivate da onde radio.
Per chi volesse approfondire, il documento Hearing Whispers è incentrato proprio sulla difficoltà legata all'acquisizione dei segnali GPS, per loro natura così deboli.
Le fasi di tracciamento e decodifica del segnale
I satelliti GPS sono dispositivi estremamente precisi che trasmettono segnali su un'onda portante. La fase successiva, altrettanto cruciale per il funzionamento GPS, è quella di tracciamento.
Durante questo momento, si segue attentamente il segnale di ciascun satellite nel tempo: è importante comprendere la natura dell'onda portante e com'è modulata per trasportare le informazioni.
Comincia poi la parte più divertente, ovvero la lettura e la decodifica dei bit trasmessi dai satelliti GPS. Leggere i bit dal satellite richiede una metodologia "ad hoc" a causa del modo in cui i bit di dati sono posizionati al di sopra del codice PRN e dell'onda portante.
La decodifica del segnale GPS è una sfida tecnologica affascinante che richiede un'approfondita comprensione della fisica del segnale, dell'ingegneria del software e dei protocolli di comunicazione. Superare le sfide presentate dall'ambiguità di fase, dalla temporizzazione precisa e dalla decodifica dei messaggi di navigazione richiede ingegnosità e dedizione: Tennen dimostra l'approccio utilizzato traducendolo poi in un software "pronto per l'uso", come vediamo nel paragrafo seguente.
Creare un ricevitore GPS software-defined con gypsum
A valle della sua profonda conoscenza del funzionamento dei satelliti GPS, Tennen ha sviluppato gypsum, un ricevitore GPS software-defined scritto in Python. È in grado di ottenere la posizione precisa dell'utente sulla superficie terrestre in meno di 60 secondi, utilizzando solamente i dati provenienti dall'antenna.
Il software implementa uno stack di elaborazione del segnale GPS che non si appoggia ad altri componenti, se non a numpy. Quest'ultima è una libreria Python ampiamente utilizzata per il calcolo scientifico e numerico. Fornisce un supporto per la gestione efficiente di array multidimensionali e offre una vasta gamma di funzioni matematiche per operare su tali array.
gypsum trasforma qualsiasi modulo SDR (Software Defined Radio), facilmente reperibile sul mercato, in un ricevitore GPS. Tennen ha tipicamente utilizzato un RTL-SDR, ma il progetto è compatibile anche con componenti HackRF. Entrambi possono essere possono essere collegati a qualsiasi antenna patch sensibile alla frequenza di 1,57542 GHz, utilizzata per la trasmissione dei segnali GPS. Un'antenna patch è un tipo di antenna che può essere progettata per funzionare a frequenze specifiche, come quella del segnale GPS in questo caso.
Il ricevitore include anche un pannello di controllo basato sul Web che permette all'utente di monitorare la qualità del segnale, seguire il progresso di acquisizione, la cronologia delle posizioni e tracciare i satelliti GPS.
Come provare gypsum
A questo indirizzo, Tennen ha messo a disposizione degli interessati un campione di dati registrati tramite antenna. È possibile scaricare il file e posizionarlo nella cartella /gypsum/vendored_signals/
.
Per installare gypsum è necessario che Python e pip siano presenti sul sistema in uso e aggiornati alle ultime versioni. Si può quindi procedere impartendo i comandi che seguono:
pip install -r requirements.txt
pip install -r requirements-webapp.txt
I due comandi installano le dipendenze necessarie; il secondo va utilizzato se si desiderasse servirsi del pannello di amministrazione Web.
Per eseguire gypsum utilizzando i campioni di antenna memorizzati, si può utilizzare la seguente sintassi (la ricerca dei satelliti è limitata a quelli indicati per velocizzare le operazioni):
python3 gypsum-cli.py --file_name nov_3_time_18_48_st_ives --only_acquire_satellite_ids 25 28 31 32 --present_web_ui
Per avviare il server Web:
gunicorn -b :8080 --timeout 0 web_dashboard:application
Il ricevitore risulta personalizzabile nei vari suoi comportamenti agendo sul file di configurazione config.py
.
Credit immagine in apertura: iStock.com – alexsl