Radar del traffico aereo: primario e secondario, modi A, C e S, garble e FRUIT, ADS-B, multilaterazione e IFF
Radar primario e secondario, interrogazioni a 1030 MHz e risposte a 1090 MHz, modi A e C, garble sincrono e FRUIT asincrono, il modo S, l'ADS-B con la decodifica di un messaggio reale e il controllo CRC, la multilaterazione e l'IFF militare.
Il cielo europeo vede ogni giorno decine di migliaia di voli, e ognuno è seguito in ogni istante dai centri di controllo. Lo strumento principale non è un radar “classico” che ascolta l’eco, ma un sistema cooperativo: il radar interroga l’aereo, e un apparato a bordo, il transponder, risponde con la propria identità e quota. Questa lezione descrive i sistemi di sorveglianza del traffico aereo: radar primario e secondario, i modi A, C e S, i problemi delle risposte sovrapposte (sincrone) e di quelle indesiderate (asincrone), la sorveglianza automatica ADS-B, la multilaterazione e l’identificazione militare IFF. Il codice decodifica un messaggio ADS-B reale e calcola una posizione per multilaterazione.
L’idea in parole semplici
Un radar normale è come chi cerca qualcuno al buio con una torcia: vede chi è illuminato, ma non sa chi sia. Il controllo del traffico aereo usa invece un sistema più simile a una chiamata: il radar “chiama” (interroga) e ogni aereo “risponde” con un messaggio che contiene chi è e a che quota vola. L’apparecchio di bordo che risponde si chiama transponder. Siccome la risposta è un segnale trasmesso dall’aereo, e non un’eco debole, arriva forte anche da lontano.
Le difficoltà nascono quando gli aerei sono tanti: due risposte possono sovrapporsi, un aereo risponde anche alle chiamate di altri radar, e il sistema deve distinguere tutto. Il modo S (ogni aereo ha un indirizzo personale, come un numero di telefono) e l’ADS-B (l’aereo trasmette da solo la propria posizione GPS) hanno risolto molti di questi problemi.
Radar primario e secondario
Il radar primario (PSR) è un radar normale: riceve l’eco riflessa dalla carlinga. Vede qualunque oggetto, anche non cooperativo (un aereo con il transponder guasto, un drone, uno stormo), ma non sa chi è né a che quota vola (a meno di avere anche un fascio in elevazione). Gli aeroporti hanno radar primari di avvicinamento in banda S, con portata di 50-60 miglia nautiche e un giro d’antenna ogni 4-5 secondi; i radar di rotta, in banda L, arrivano a 200-250 miglia con un giro ogni 10-12 secondi.
Il radar secondario (SSR, secondary surveillance radar) trasmette un’interrogazione a 1030 MHz; il transponder dell’aereo risponde a 1090 MHz. Vantaggi decisivi:
- la risposta è generata dall’aereo, quindi la potenza ricevuta cala come
e non come
: bastano potenze molto più basse per portate maggiori; - frequenze diverse in andata e ritorno: niente clutter, niente eco del terreno;
- la risposta contiene informazioni: identità e quota.
Di solito l’antenna del secondario è montata sopra quella del primario e gira con essa, e i dati dei due vengono combinati.

I modi A e C
L’interrogazione è fatta di due impulsi, P1 e P3, la cui distanza dice che cosa si chiede: 8 μs per il modo A (identità), 21 μs per il modo C (quota). La risposta è delimitata da due impulsi di cornice, F1 e F2, distanti 20,3 μs, con in mezzo fino a 12 impulsi di codice a intervalli di 1,45 μs:
combinazioni.
- Modo A: il codice d’identità a quattro cifre ottali (da 0000 a 7777), assegnato dal controllore al pilota (lo “squawk”). Alcuni codici sono riservati: 7500 dirottamento, 7600 avaria radio, 7700 emergenza.
- Modo C: la quota barometrica, a passi di 100 piedi (codice di Gillham), letta direttamente dall’altimetro.
La soppressione dei lobi secondari. L’antenna del radar ha lobi laterali: un aereo vicino potrebbe ricevere l’interrogazione da un lobo laterale e rispondere, comparendo in una direzione sbagliata. Per evitarlo il radar trasmette un impulso P2, 2 μs dopo P1, con un’antenna omnidirezionale: se l’aereo riceve P2 più forte di P1, sa di non essere nel fascio principale e non risponde.
Risposte sincrone e asincrone: garble e FRUIT
Il sistema A/C ha due difetti, legati proprio alla distinzione tra sincrono e asincrono.
- Garble sincrono: due aerei nello stesso fascio, a distanze dal radar che differiscono meno della lunghezza di una risposta, rispondono alla stessa interrogazione e le loro risposte si sovrappongono nel tempo. La risposta dura 20,3 μs, che corrispondono a una differenza di distanza di
km (circa 1,6 miglia nautiche): due aerei più vicini di così, visti nella stessa direzione, producono una risposta confusa, con codici che si mescolano. È frequente nelle zone di attesa vicino agli aeroporti. - FRUIT (false replies unsynchronized in time): un transponder risponde a tutti i radar che lo interrogano. Il radar riceve quindi anche le risposte agli altri radar, che non sono sincronizzate con le sue interrogazioni: arrivano in istanti casuali e sembrano bersagli a distanze casuali. Il rimedio è il defruiter: una vera risposta compare alla stessa distanza in interrogazioni successive, una risposta asincrona no; confrontando più interrogazioni si scartano le risposte non correlate.
Il modo S
Il modo S (selective, dagli anni Novanta) risolve alla radice entrambi i problemi. Ogni aereo ha un indirizzo univoco di 24 bit (l’indirizzo ICAO, oltre 16 milioni di valori, assegnato dallo Stato di registrazione). Il radar può interrogare un aereo alla volta, per indirizzo: niente risposte sovrapposte e molte meno risposte superflue. Le risposte sono messaggi digitali di 56 o 112 bit a 1 Mbit/s, modulati in posizione d’impulso, protetti da un codice di controllo CRC di 24 bit (sommato all’indirizzo, così che un messaggio per un altro aereo dia un controllo sbagliato). Il modo S trasporta anche dati: identificativo del volo, quota a passi di 25 piedi, rotta, velocità, intenzioni del pilota. È la base del sistema anticollisione di bordo (TCAS/ACAS), che interroga i transponder degli aerei vicini e consiglia manovre di salita o discesa coordinate.
ADS-B: l’aereo che dice da solo dove è
Con l’ADS-B (automatic dependent surveillance, broadcast) l’aereo non aspetta di essere interrogato: trasmette spontaneamente, circa due volte al secondo, la propria posizione GNSS, quota, velocità e identificativo, con messaggi modo S estesi (1090ES, formato DF17 di 112 bit). Chiunque abbia un ricevitore a 1090 MHz può riceverli: è così che funzionano i siti che mostrano i voli in tempo reale, alimentati da migliaia di ricevitori amatoriali. La sorveglianza è “dipendente” perché la posizione viene dalla navigazione di bordo, non da una misura del radar: per questo l’ADS-B si affianca ai radar ma non li sostituisce del tutto, e la posizione dichiarata si verifica con misure indipendenti.
Il messaggio DF17: 5 bit di formato (17), 3 bit di capacità, 24 bit di indirizzo ICAO, 56 bit di dati (il cui primo campo, il “type code”, dice il tipo: 1-4 identificativo, 9-18 posizione in volo, 19 velocità) e 24 bit di parità. La posizione usa una codifica compatta (CPR) con due tipi di messaggi alternati, pari e dispari, che vanno combinati.
Il codice qui sotto decodifica il messaggio di esempio 8D4840D6202CC371C32CE0576098, ampiamente usato nella documentazione dell’ADS-B: il controllo CRC dà resto zero (messaggio integro), formato 17, indirizzo ICAO 4840D6, type code 4 (identificativo), e i caratteri da 6 bit dell’identificativo danno KLM1023. Cambiando un solo bit, il resto del CRC non è più zero: il messaggio verrebbe scartato.
La multilaterazione
La multilaterazione (MLAT, o WAM, wide area multilateration, su aree estese) localizza un aereo senza radar rotante: più stazioni a terra, sincronizzate con precisione (con il GNSS), ricevono la stessa risposta del transponder e ne misurano l’istante di arrivo. La differenza dei tempi di arrivo tra due stazioni definisce un’iperbole (in tre dimensioni, un iperboloide) su cui si trova l’aereo; con quattro o più stazioni le iperboli si intersecano in un punto. Funziona con qualunque transponder (anche senza ADS-B), e serve anche a verificare la posizione dichiarata dall’ADS-B. Con un errore di sincronizzazione e misura di 20 ns (6 m di percorso), quattro stazioni ai vertici di un quadrato di 40 km localizzano un aereo con un errore di pochi metri (2,4 m nella simulazione del codice qui sotto; su 500 ripetizioni con rumori diversi l’errore medio è 5,4 m, e nel 95 % dei casi resta sotto 11 m).
IFF: amico o nemico
L’IFF (identification friend or foe) militare usa lo stesso principio e le stesse frequenze del radar secondario, con modi propri:
- modi 1 e 2: codici di missione e d’identità del velivolo militare;
- modo 3/A: coincide con il modo A civile, per l’inserimento nel traffico aereo;
- modo 4 (ormai sostituito) e modo 5: risposte crittografate. Il velivolo amico risponde correttamente solo se conosce le chiavi del giorno; un velivolo che non risponde o risponde in modo errato non è “amico”. Il modo 5 si basa sul formato del modo S e può includere la posizione GNSS.
La crittografia è essenziale: un IFF senza autenticazione potrebbe essere imitato da un avversario. I dettagli dei modi crittografati non sono pubblici; i principi qui descritti sono quelli della letteratura aperta.
In sintesi
- Il radar primario vede tutto per eco ma non identifica; il secondario interroga a 1030 MHz e riceve a 1090 MHz identità e quota.
- Modi A (codice a 4 cifre) e C (quota); l’impulso P2 sopprime le risposte ai lobi laterali.
- Garble (risposte sovrapposte alla stessa interrogazione) e FRUIT (risposte ad altri radar) limitano il sistema A/C; il modo S li risolve con l’indirizzo di 24 bit e il CRC.
- ADS-B: l’aereo trasmette da solo posizione GNSS e identificativo; MLAT localizza dai tempi d’arrivo; IFF identifica i velivoli militari con risposte crittografate.
Il codice
import numpy as np
# 1) ADS-B: controllo CRC-24 e decodifica dell'identificativo
msg = "8D4840D6202CC371C32CE0576098"
bit = bin(int(msg, 16))[2:].zfill(112)
GEN = "1111111111111010000001001" # polinomio generatore del CRC del modo S (25 bit)
def resto_crc(b):
b = list(map(int, b)); g = list(map(int, GEN))
for i in range(len(b) - 24): # divisione polinomiale modulo 2
if b[i]:
for j in range(25):
b[i + j] ^= g[j]
return b[-24:]
print("resto del CRC:", sum(resto_crc(bit)), "(0 = messaggio integro)")
formato, indirizzo, tipo = int(bit[0:5], 2), msg[2:8], int(bit[32:37], 2)
CAR = "#ABCDEFGHIJKLMNOPQRSTUVWXYZ##### ###############0123456789######"
nome = "".join(CAR[int(bit[40 + 6 * i:46 + 6 * i], 2)] for i in range(8))
print(f"formato {formato}, indirizzo ICAO {indirizzo}, type code {tipo}, identificativo '{nome.strip()}'")
sbagliato = bit[:50] + ("1" if bit[50] == "0" else "0") + bit[51:]
print("con un bit sbagliato il resto è diverso da zero:", sum(resto_crc(sbagliato)) > 0)
print(f"garble sincrono sotto {299792458 * 20.3e-6 / 2 / 1e3:.2f} km di differenza di distanza")
# 2) multilaterazione: 4 stazioni, tempi di arrivo con 20 ns di errore, minimi quadrati (Gauss-Newton)
c = 299792458.0
rng = np.random.default_rng(0)
stazioni = np.array([[0, 0], [40e3, 0], [0, 40e3], [40e3, 40e3]], float)
aereo = np.array([15e3, 27e3])
arrivi = np.linalg.norm(stazioni - aereo, axis=1) / c + rng.normal(0, 20e-9, 4)
p = np.array([20e3, 20e3]) # punto di partenza: il centro
for _ in range(20):
r = np.linalg.norm(stazioni - p, axis=1)
residui = (r - r[0]) - c * (arrivi - arrivi[0]) # differenze di distanza misurate e previste
J = (p - stazioni) / r[:, None] - (p - stazioni[0]) / r[0]
p = p - np.linalg.lstsq(J[1:], residui[1:], rcond=None)[0]
print(f"posizione stimata {np.round(p)} m, errore {np.linalg.norm(p - aereo):.1f} m")L’esecuzione stampa resto 0, formato 17, indirizzo 4840D6, type code 4, identificativo KLM1023, la verifica del bit sbagliato, 3,04 km per il garble, e una posizione con 2,4 m di errore.





