USE CASE

Build the image — then ship the imager to a $50 board.

Synthetic Aperture Radar turns a small antenna on a moving platform into a virtual one kilometres long: fly a track, fire chirped pulses, and the motion synthesizes an aperture that resolves the ground far finer than the real antenna ever could. The raw returns are an unfocused blur; focusing is what turns them into an image. This program builds that whole chain — and then does the part MATLAB needs a second toolbox for: it emits the focusing kernel as memory-safe Rust and cross-compiles it to a commodity ARM processor, bit-for-bit equivalent to the model.

Range-compressed azimuth smears on the left collapsing into three sharp focused point targets on the right after backprojection
>500×
azimuth focusing gain
0.875 m
range resolution (vs c/2B = 1.0 m)
5e-11
Rust-vs-model SIL error (f32)
aarch64
cross-compiled + attested kernel
10
design notebooks
5 / 5
requirements PASS
THE WAVEFORM

Resolution comes from the chirp, not the pulse length.

A radar's range resolution would normally need an impossibly short pulse. SAR cheats with a long linear-FM chirp and pulse compression: matched-filter the echo against the transmitted chirp and a long, low-power pulse collapses to a sharp peak whose width is set by the bandwidth, c/(2·B) — here 0.875 m on a 150 MHz chirp. The sidelobes of that compressed peak sit at −13 dB, and windowing trades them down to −42 dB at the cost of a slightly wider mainlobe.

A compressed radar pulse — a sharp mainlobe with sidelobes near -13 dB on a log scale
Pulse compression: matched-filtering a long LFM chirp produces a sharp impulse response with its first sidelobes at −13 dB. Range resolution is set by the chirp bandwidth (c/2B ≈ 0.9 m), not by the physical pulse length — the first trick SAR plays.
THE RAW DATA

A point on the ground is a smear in the raw image.

As the platform flies past a target, the round-trip range traces a hyperbola — so a single bright point spreads across many pulses and many range bins. The raw phase history is a textured blur in which nothing is recognizable. All the information is there; it's just not focused. Synthetic-aperture processing is what collapses every target's hyperbolic signature back to a point.

Raw SAR phase-history data — a textured band where targets are smeared across range and azimuth
Raw phase history: each ground point smears into a hyperbola across the collection, overlapping with its neighbours into an unfocused band. This is what the radar actually records — the image is latent, not visible.
Range-compressed azimuth smears collapsing into three sharp focused point targets after backprojection
The hero — backprojection focusing: range compression sharpens the targets in range but leaves them smeared in azimuth (left, an incoherent sum); coherently backprojecting every pulse onto the ground grid collapses each smear to a sharp point (right), a >500× focusing gain. The synthetic aperture beats the real antenna beamwidth.
A focused SAR image of point scatterers arranged to spell the letters SAR
The payoff on a scene: a field of point scatterers arranged to spell “SAR” focuses into a readable image. Same processor, an extended target instead of three points — the focusing is what turns a smear into something you can recognize.
WHEN THE PLATFORM WOBBLES

An unknown phase error blurs it — autofocus finds it.

Focusing assumes you know the platform's track exactly. Real motion has errors, and an unknown phase error across the aperture defocuses the image just like an out-of-focus camera. Autofocus recovers it from the data itself: search for the phase correction that maximizes image sharpness, apply it, and the blurred peak snaps back to its focused width — no external measurement of the error required.

A blurred impulse response from a phase error re-sharpening to the clean response after autofocus
Autofocus: an injected platform phase error spreads the focused peak (red); a contrast-maximizing search recovers the correction and the autofocused response (dotted) lands back on the clean one (green). The image fixes its own focus from the data.
THE PAYOFF

The focusing kernel becomes memory-safe Rust on commodity ARM.

Forming the image is half the story; deploying the imager is the other half. The deterministic per-pixel backprojection kernel is emitted as portable `#![no_std]` Rust, verified bit-for-bit against the Julia reference in software-in-the-loop (a relative error of 5×10⁻¹¹ in f32), cross-compiled to `aarch64-unknown-none` — the Raspberry Pi-class ARM that's the most widely-deployed 64-bit processor on earth — and bound to an in-toto attestation for supply-chain provenance. This is the autopilot→Rust firmware story (memory-safe Rust, not C, the answer to Embedded Coder) one compute tier up: from a microcontroller control loop to an edge-compute imaging kernel.

VALIDATION

Every number re-derived at sign-off.

The V&V notebook rebuilds the chain from scratch and re-derives each requirement, printing a PASS/FAIL board.

ResultRequirement
Range resolution vs c/2B0.875 m (12.5%)R-01 < 15%
Azimuth focusing gain>500×R-02 ≥ 15×
Sidelobes (rect / Hamming)−13.5 / −42 dBR-03 ≤ −13 dB
SIL Rust-vs-Julia (f32)5e-11R-04 ≤ 1e-6
Cross-compile + attestaarch64 + in-totoR-05
HONEST SCOPE

Simulated phase history, a real deployable kernel.

The raw data is simulated point-target and scene phase history, not real airborne or satellite returns; the geometry is stripmap and the focuser is backprojection (the gold standard and the natural codegen target — not the RDA/ω-k pipelines of a production processor). The de-risk surfaced the program's central lesson the honest way: at C-band the aperture under-sampled the azimuth phase and threw an ambiguity off-target, so the program runs at L-band where the sampling is unambiguous. The codegen is the hand-emitted no_std kernel with software-in-the-loop verification and an aarch64 cross-compile — not the GIR signal-block emitter, which targets streaming control loops, not batch imaging; running on a specific board needs a HAL (out of scope, same caveat as the autopilot). What's real and re-runnable: the full focusing chain, the >500× gain, the sidelobe budget, the bit-exact SIL, and the attested aarch64 kernel crate.

Form your own image — and deploy the imager.

Book a walkthrough and we'll set up your radar geometry, focus your scene, and generate and verify the deployable Rust kernel for your target hardware live.

DjiniousLabOne engineering notebook for model-based design — model, simulate, and generate on a living digital replica.