Djinious
Imaging radarAerospaziale e navale

Radar ad apertura sintetica

Formare un’immagine radar a fuoco a partire dai ritorni grezzi — il chirp e la compressione dell’impulso, la sfocatura grezza della storia di fase, la messa a fuoco per backprojection che batte la larghezza del fascio dell’antenna reale, l’autofocus, e infine il kernel di messa a fuoco emesso come Rust memory-safe e cross-compilato per ARM commodity.

DjiniousLab
Sfocature in azimut compresse in distanza a sinistra che collassano in tre bersagli puntiformi nitidi e a fuoco a destra dopo la backprojection
guadagno di messa a fuoco in azimut
>500×guadagno di messa a fuoco in azimut
risoluzione in distanza (vs c/2B = 1,0 m)
0,875 mrisoluzione in distanza (vs c/2B = 1,0 m)
Errore SIL Rust vs modello (f32)
5e-11Errore SIL Rust vs modello (f32)
kernel cross-compilato e attestato
aarch64kernel cross-compilato e attestato
notebook di progetto
10notebook di progetto
requisiti PASS
5 / 5requisiti PASS

Costruisci l’immagine — poi distribuisci l’imager su una scheda da 50 $.

Il radar ad apertura sintetica trasforma una piccola antenna su una piattaforma in movimento in un’antenna virtuale lunga chilometri: vola lungo una traccia, spara impulsi chirp, e il moto sintetizza un’apertura che risolve il terreno molto più finemente di quanto l’antenna reale potrebbe mai fare. I ritorni grezzi sono una sfocatura senza fuoco; la messa a fuoco è ciò che li trasforma in un’immagine. Questo programma costruisce l’intera catena — e poi fa la parte per cui MATLAB ha bisogno di un secondo toolbox: emette il kernel di messa a fuoco come Rust memory-safe e lo cross-compila per un processore ARM commodity, equivalente bit per bit al modello.

La risoluzione viene dal chirp, non dalla durata dell’impulso.

La risoluzione in distanza di un radar richiederebbe normalmente un impulso impossibilmente corto. Il SAR bara con un lungo chirp FM lineare e la compressione dell’impulso: filtra in modo adattato l’eco rispetto al chirp trasmesso, e un impulso lungo e a bassa potenza collassa in un picco netto la cui larghezza è fissata dalla larghezza di banda, c/(2·B) — qui 0,875 m su un chirp da 150 MHz. I lobi laterali di quel picco compresso si trovano a −13 dB, e il windowing li riduce fino a −42 dB al costo di un lobo principale leggermente più largo.

DjiniousLab
Un impulso radar compresso — un lobo principale netto con lobi laterali intorno a -13 dB su scala logaritmica
Compressione dell’impulso: il filtraggio adattato di un lungo chirp LFM produce una risposta impulsiva netta con i primi lobi laterali a −13 dB. La risoluzione in distanza è fissata dalla larghezza di banda del chirp (c/2B ≈ 0,9 m), non dalla durata fisica dell’impulso — il primo trucco che il SAR gioca.

Un punto a terra è una sfocatura nell’immagine grezza.

Mentre la piattaforma sorvola un bersaglio, la distanza di andata e ritorno traccia un’iperbole — così un singolo punto luminoso si sparge su molti impulsi e molte celle di distanza. La storia di fase grezza è una sfocatura strutturata in cui nulla è riconoscibile. Tutta l’informazione è lì; semplicemente non è a fuoco. L’elaborazione ad apertura sintetica è ciò che fa collassare la firma iperbolica di ogni bersaglio di nuovo in un punto.

DjiniousLab
Dati grezzi di storia di fase SAR — una banda strutturata dove i bersagli sono sfocati lungo distanza e azimut
Storia di fase grezza: ogni punto a terra si sfoca in un’iperbole lungo l’acquisizione, sovrapponendosi ai suoi vicini in una banda senza fuoco. Questo è ciò che il radar registra realmente — l’immagine è latente, non visibile.
DjiniousLab
Sfocature in azimut compresse in distanza che collassano in tre bersagli puntiformi nitidi e a fuoco dopo la backprojection
Il protagonista — la messa a fuoco per backprojection: la compressione in distanza rende nitidi i bersagli in distanza ma li lascia sfocati in azimut (a sinistra, una somma incoerente); la backprojection coerente di ogni impulso sulla griglia a terra fa collassare ogni sfocatura in un punto netto (a destra), un guadagno di messa a fuoco >500×. L’apertura sintetica batte la larghezza del fascio dell’antenna reale.
DjiniousLab
Un’immagine SAR a fuoco di diffusori puntiformi disposti a formare le lettere SAR
Il risultato su una scena: un campo di diffusori puntiformi disposti a formare “SAR” va a fuoco in un’immagine leggibile. Stesso processore, un bersaglio esteso invece di tre punti — la messa a fuoco è ciò che trasforma una sfocatura in qualcosa che puoi riconoscere.

Un errore di fase sconosciuto la sfoca — l’autofocus lo trova.

La messa a fuoco presuppone di conoscere esattamente la traccia della piattaforma. Il moto reale ha degli errori, e un errore di fase sconosciuto lungo l’apertura sfoca l’immagine proprio come una fotocamera fuori fuoco. L’autofocus lo recupera dai dati stessi: cerca la correzione di fase che massimizza la nitidezza dell’immagine, la applica, e il picco sfocato torna di scatto alla sua larghezza a fuoco — senza bisogno di alcuna misura esterna dell’errore.

DjiniousLab
Una risposta impulsiva sfocata da un errore di fase che torna nitida fino alla risposta pulita dopo l’autofocus
Autofocus: un errore di fase della piattaforma iniettato allarga il picco a fuoco (rosso); una ricerca che massimizza il contrasto recupera la correzione e la risposta autofocalizzata (punteggiata) ricade su quella pulita (verde). L’immagine corregge da sola il proprio fuoco a partire dai dati.

Il kernel di messa a fuoco diventa Rust memory-safe su ARM commodity.

Formare l’immagine è metà della storia; distribuire l’imager è l’altra metà. Il kernel di backprojection deterministico per pixel viene emesso come Rust `#![no_std]` portabile, verificato bit per bit rispetto al riferimento Julia in software-in-the-loop (un errore relativo di 5×10⁻¹¹ in f32), cross-compilato per `aarch64-unknown-none` — l’ARM di classe Raspberry Pi che è il processore a 64 bit più diffuso al mondo — e vincolato a un’attestazione in-toto per la provenienza della supply chain. È la storia dell’autopilota→firmware Rust (Rust memory-safe, non C, la risposta a Embedded Coder) un livello di calcolo più in alto: da un anello di controllo su microcontrollore a un kernel di imaging edge-compute.

Ogni numero ricavato di nuovo all’approvazione finale.

Il notebook di V&V ricostruisce la catena da zero e ricava di nuovo ogni requisito, stampando un quadro PASS/FAIL.

Risultato

  • Risoluzione in distanza vs c/2B: 0,875 m (12,5%)
  • Guadagno di messa a fuoco in azimut: >500×
  • Lobi laterali (rect / Hamming): −13,5 / −42 dB
  • SIL Rust vs Julia (f32): 5e-11
  • Cross-compilazione + attestazione: aarch64 + in-toto

Requisito

  • Risoluzione in distanza vs c/2B: R-01 < 15%
  • Guadagno di messa a fuoco in azimut: R-02 ≥ 15×
  • Lobi laterali (rect / Hamming): R-03 ≤ −13 dB
  • SIL Rust vs Julia (f32): R-04 ≤ 1e-6
  • Cross-compilazione + attestazione: R-05

Storia di fase simulata, un kernel reale e distribuibile.

I dati grezzi sono storia di fase simulata di bersagli puntiformi e di scena, non ritorni reali aviotrasportati o satellitari; la geometria è stripmap e il focalizzatore è la backprojection (lo standard di riferimento e il target naturale per il codegen — non le pipeline RDA/ω-k di un processore di produzione). Il de-risking ha fatto emergere onestamente la lezione centrale del programma: in banda C l’apertura sottocampionava la fase in azimut e generava un’ambiguità fuori bersaglio, quindi il programma gira in banda L, dove il campionamento è privo di ambiguità. Il codegen è il kernel no_std emesso a mano con verifica software-in-the-loop e una cross-compilazione aarch64 — non l’emettitore di blocchi di segnale GIR, che punta ad anelli di controllo in streaming, non all’imaging batch; l’esecuzione su una scheda specifica richiede una HAL (fuori ambito, stessa avvertenza dell’autopilota). Ciò che è reale e rieseguibile: l’intera catena di messa a fuoco, il guadagno >500×, il budget dei lobi laterali, il SIL bit-esatto, e il crate del kernel aarch64 attestato.