Il radar FMCW delle automobili: rampa e battimento, velocità tra le rampe, schiera MIMO virtuale e mappa distanza-velocità
Come un radar a 77 GHz misura distanza, velocità e angolo: la frequenza di battimento dimostrata, risoluzione e portata, la velocità dalla fase tra le rampe, la schiera MIMO virtuale, la simulazione di un fotogramma con doppia FFT.
Il radar è uno dei sensori principali delle automobili moderne: il cruise control adattivo, la frenata automatica d’emergenza, il controllo dell’angolo cieco e l’avviso di traffico in retromarcia lo usano, e un’auto con guida assistita ne ha spesso cinque o più. A differenza delle telecamere funziona al buio, con la nebbia e con la pioggia, e misura direttamente la velocità. Quasi tutti i radar automotive sono FMCW (frequency modulated continuous wave) a 77 GHz, realizzati in un unico chip con antenne stampate. Questa lezione ricava come un radar FMCW misura distanza, velocità e angolo, dimostra le formule di risoluzione e portata, spiega la schiera MIMO virtuale, e simula un fotogramma completo con l’elaborazione a doppia FFT.
L’idea in parole semplici
Un radar FMCW non trasmette impulsi: trasmette sempre, ma con una frequenza che sale continuamente, come una sirena che sale di tono. Quando l’eco torna, è la “sirena” di qualche istante prima, quindi ha un tono un po’ più basso di quello che il radar sta emettendo in quel momento. Più il bersaglio è lontano, più l’eco è “vecchia” e più grande è la differenza di tono. Il radar mescola i due segnali e ascolta la differenza, il battimento: è un tono basso, di qualche megahertz, la cui frequenza dice direttamente la distanza.
Per la velocità si usa lo stesso trucco della lezione sul Doppler: si ripete la rampa molte volte e si guarda come gira la fase del battimento da una rampa all’altra. Per l’angolo, si confrontano le fasi ricevute da antenne affiancate. Tre FFT (una per la distanza, una per la velocità, una per l’angolo) trasformano i campioni grezzi in una mappa di tutto ciò che c’è davanti all’auto.
La rampa e il battimento
Il radar trasmette in continuazione una serie di rampe (chirp): la frequenza cresce linearmente da
a
in un tempo
, con pendenza
. L’eco di un bersaglio a distanza
torna con un ritardo
, quindi in ogni istante ha una frequenza un po’ più bassa di quella che si sta trasmettendo. Il ricevitore moltiplica l’eco per il segnale trasmesso (un mescolatore) e ottiene la differenza delle due frequenze, il segnale di battimento.
Teorema. La frequenza di battimento è
: proporzionale alla distanza.
Dimostrazione. La fase del segnale trasmesso è
. L’eco è lo stesso segnale ritardato di
:
. Il mescolatore dà la differenza delle fasi:
. La parte che varia nel tempo è
: una sinusoide di frequenza
. I termini costanti danno una fase iniziale
(che servirà per la velocità) e un termine trascurabile. ∎
La distanza si misura quindi con una FFT del battimento: ogni bersaglio diventa un picco a una frequenza diversa. Con un ADC che campiona a
(in quadratura), la frequenza massima misurabile dà la portata massima
, e la risoluzione della FFT su una rampa (
in frequenza) dà la risoluzione in distanza
![]()
indipendente dalla durata della rampa: conta solo la banda. Con
MHz, 25 cm; i radar ad alta risoluzione per il parcheggio usano fino a 4 GHz (3,75 cm) nella banda 77-81 GHz. Il battimento è a qualche megahertz: un bersaglio a 30 m con
MHz/μs dà 2,4 MHz. È un grande vantaggio pratico: un segnale a 77 GHz viene elaborato con un ADC economico a pochi megahertz.

La velocità: da una rampa all’altra
Lo spostamento Doppler di un’auto (qualche kilohertz) è piccolo rispetto alla frequenza di battimento, e in una sola rampa si confonde con la distanza. Lo si misura invece tra le rampe, come nel pulse-Doppler della lezione sul Doppler.
Teorema. Tra due rampe consecutive, separate da
, la fase del battimento di un bersaglio con velocità radiale
cambia di
; quindi con
rampe la velocità si misura con una FFT, con risoluzione
e campo non ambiguo
.
Dimostrazione. La fase costante del battimento è
. In una rampa successiva il bersaglio si è spostato di
, quindi la fase è cambiata di
. La sequenza delle fasi è una sinusoide lungo le rampe di frequenza
(il Doppler), campionata a
: la FFT su
campioni ha risoluzione
in frequenza, cioè
in velocità, e senza ambiguità finché
, cioè
. ∎
A 77 GHz (
mm) con
μs e 128 rampe: 0,30 m/s di risoluzione, ±19,5 m/s senza ambiguità (le velocità maggiori si risolvono con rampe di durate diverse, o con l’inseguimento). Organizzando i campioni in una matrice (righe: rampe; colonne: campioni della rampa) e facendo una FFT per colonne e una per righe si ottiene la mappa distanza-velocità di tutta la scena in un fotogramma di pochi millisecondi.
L’angolo e la schiera MIMO virtuale
Con più antenne riceventi, l’eco arriva a ognuna con una fase diversa,
tra antenne a distanza
(la geometria della schiera a fase, lezione sulle schiere di fase): una terza FFT lungo le antenne dà l’angolo. La risoluzione angolare cresce con il numero di antenne, ma un chip ha pochi canali. Il trucco è il MIMO: con
antenne trasmittenti che trasmettono a turno (o con codici diversi), e
riceventi, ogni coppia trasmettitore-ricevitore si comporta come un’antenna “virtuale” nella posizione somma delle due.
Proprietà. Se le trasmittenti sono distanziate di
e le riceventi di
, le posizioni virtuali
formano una schiera uniforme di
elementi a passo
.
Infatti la fase dell’eco dipende dalla somma del percorso di andata (dalla trasmittente) e di ritorno (alla ricevente), cioè da
. Con 3 trasmittenti e 4 riceventi si ottengono 12 canali virtuali, con una risoluzione angolare di circa
radianti, 9,5°; i radar “4D” più recenti, con decine di canali reali, arrivano a centinaia di canali virtuali e misurano anche l’elevazione (separando un ponte da un’auto ferma sotto di esso).

La simulazione di un fotogramma
Radar a 77 GHz,
MHz,
μs, 512 campioni per rampa, 128 rampe. Tre bersagli: un’auto a 30 m che si allontana a 10 m/s, e a 55 m due oggetti alla stessa distanza, uno che si avvicina a 5 m/s e uno che si allontana a 12 m/s (per esempio un’auto e una moto affiancate). Le prestazioni teoriche: 25 cm di risoluzione, 128 m di portata, 0,30 m/s di risoluzione in velocità, ±19,5 m/s di campo.
La doppia FFT trova i tre bersagli a (29,98 m; 10,04 m/s), (54,96 m; −5,17 m/s) e (54,96 m; 12,17 m/s): le distanze e le velocità vere, arrotondate alla cella della griglia. I due oggetti a 55 m, inseparabili in distanza, sono ben separati in velocità: è uno dei motivi per cui il radar riconosce i veicoli anche in mezzo al traffico.

Configurazione dei bersagli e problemi reali. Gli oggetti grandi (camion, guardrail) danno molti punti, gli oggetti piccoli pochi; il guardrail e gli oggetti fermi a bordo strada sono la principale fonte di clutter; i percorsi multipli (riflessioni sul fondo stradale e sui veicoli) creano bersagli fantasma; e con milioni di auto equipaggiate, l’interferenza tra radar diventa un problema (una rampa altrui che attraversa la propria crea un impulso di disturbo che alza il rumore). Il filtraggio di questi effetti è nella lezione sul clutter, la costruzione degli oggetti dai punti nella lezione che segue.
In sintesi
- Il radar FMCW trasmette rampe di frequenza; il battimento tra eco e trasmesso ha frequenza
, proporzionale alla distanza. - La risoluzione in distanza è
, solo la banda conta; la portata dipende dal campionamento del battimento. - La velocità si misura dalla rotazione della fase tra rampe: risoluzione
, campo
. - La schiera MIMO virtuale moltiplica i canali:
elementi con
antenne. - Doppia (o tripla) FFT: la mappa distanza-velocità(-angolo) di un fotogramma in pochi millisecondi.
Il codice
import numpy as np
c = 299792458.0
fc, B, Tc, Nc, Ns = 77e9, 600e6, 50e-6, 128, 512 # portante, banda, durata rampa, rampe, campioni per rampa
S, lam = B / Tc, c / fc # pendenza della rampa, lunghezza d'onda
fs = Ns / Tc # campionamento (in quadratura)
t = np.arange(Ns) / fs
bersagli = [(30.0, 10.0, 1.0), (55.0, -5.0, 0.5), (55.0, 12.0, 0.3)] # distanza, velocità, ampiezza
rng = np.random.default_rng(0)
dati = np.zeros((Nc, Ns), complex) # una riga per rampa
for m in range(Nc):
for R, v, a in bersagli:
Rm = R + v * m * Tc # la distanza cambia da una rampa all'altra
dati[m] += a * np.exp(1j * (2 * np.pi * 2 * S * Rm / c * t + 4 * np.pi * Rm / lam))
dati += (rng.normal(size=dati.shape) + 1j * rng.normal(size=dati.shape)) * 0.05
mappa = np.fft.fft(dati * np.hanning(Ns), axis=1) # FFT in distanza (lungo la rampa)
mappa = np.fft.fftshift(np.fft.fft(mappa * np.hanning(Nc)[:, None], axis=0), axes=0) # FFT in velocità
P = 20 * np.log10(np.abs(mappa) + 1e-12); P -= P.max()
dR, dv = c / (2 * B), lam / (2 * Nc * Tc)
print(f"risoluzione {dR * 100:.0f} cm, portata {Ns * dR:.0f} m, risoluzione in velocità {dv:.2f} m/s, campo +-{lam / (4 * Tc):.1f} m/s")
for _ in range(3): # i tre picchi più alti
i, j = np.unravel_index(np.argmax(P), P.shape)
print(f"bersaglio: {j * dR:6.2f} m, {(i - Nc / 2) * dv:6.2f} m/s, {P[i, j]:5.1f} dB")
P[max(0, i - 4):i + 5, max(0, j - 4):j + 5] = -200 # toglie il picco trovato
print(f"battimento a 30 m: {2 * S * 30 / c / 1e6:.2f} MHz; MIMO 3x4: {3 * 4} canali virtuali, circa {np.degrees(2 / 12):.1f} gradi")L’esecuzione stampa 25 cm, 128 m, 0,30 m/s e ±19,5 m/s, i tre bersagli con 0, −7,2 e −11,6 dB, 2,40 MHz e 12 canali con 9,5°.





