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.

- 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.

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.



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.

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.
Continua a esplorare




