Skip to content

Latest commit

 

History

History
90 lines (72 loc) · 3.84 KB

File metadata and controls

90 lines (72 loc) · 3.84 KB

omega-K (WKA) imaging with SAR-DSL

The complete wavenumber-domain (omega-K / WKA) SAR imaging algorithm as a single SAR-DSL kernel, validated against a NumPy reference and demonstrated on both synthetic point targets and a real ALOS-1 dataset.

File Purpose
algorithm.py The WKA chain in the DSL (build_kernel, make_inputs)
reference.py NumPy reference implementation (WKAProcessor)
run_point_target_cpu.py Full cpu-backend flow: simulate, focus, save a PNG
run_point_target_hls.py Full hls-backend flow: HLS C++ design + csim package (hls_project/)
run_alos_cpu.py Focus the real ALOS-1 San Francisco dataset (16384x16384)
run_alos_hls.py Emit the ALOS-geometry artifact set (see below)
assets/ Reference imagery

Processing chain

raw --> range FFT --> corner turn --> azimuth FFT --> corner turn
    --> bulk compression (reference phase multiply)
    --> Stolt interpolation (sar.stolt_interp)
    --> range window --> azimuth window
    --> range IFFT --> corner turn --> azimuth IFFT --> corner turn --> |.|

Everything runs inside one compiled kernel; the host only passes the band-matched Hann tapers as inputs. Acquisition metadata -- scalar radar parameters (fc, Vr, R0, Kr, ...) and the frequency axes -- bakes into the IR at trace time.

Synthetic scene (either backend)

# from the repository root, after `make build`
python examples/wka/run_point_target_cpu.py --n 512          # focus + PNG
python examples/wka/run_point_target_hls.py --n 256     # design + csim package

The CPU runner reports where the brightest target landed and its impulse response; at --n 512 each target focuses to roughly one resolution cell:

peak at (333, 358), expected (333, 358), error (+0, +0)
  range: IRW  2.12 samples, PSLR  -31.7 dB, ISLR  -28.6 dB
azimuth: IRW  2.20 samples, PSLR  -27.1 dB, ISLR  -22.9 dB

The HLS runner writes hls_project/wka/: the design wka.cpp, the testbench wka_tb.cpp, golden data in wka_tb_data/, the csim and csynth scripts (wka_csim.tcl, wka_csynth.tcl) and Vitis header stand-ins in stubs/. C simulation matches the NumPy reference to 2.3e-10 over all 65536 output samples.

synthetic point targets

Real data (ALOS-1)

# from the repository root; the dataset is shared by all three algorithms
python examples/data/extract_alos.py   # CEOS L1.0 -> alos_raw_...bin (2 GiB)
python examples/wka/run_alos_cpu.py        # tens of GiB of RAM at full size
python examples/wka/run_alos_hls.py   # emit the artifacts at that geometry

The full 16384x16384 scene focuses in 4.6 s on a 240-core machine (fused element-wise kernels under OpenMP; multithreaded FFT/interpolation runtime), reaching an urban-area contrast of 0.810 (benchmarks/metrics.py:urban_contrast, higher is sharper). The effective radar velocity in ALOS_PARAMS is autofocus-calibrated by image-contrast maximization over the urban area:

San Francisco Bay

run_alos_hls.py writes hls_project/wka_alos/ with two designs, because no single design can be both synthesizable at scene size and simulatable:

Artifact What it is
wka_alos_axi.cpp + _axi_csynth.tcl the 16384x16384 design, axi_interface=True: streamed planes become AXI master ports, with its synthesis script
wka_alos.cpp + _tb.cpp + _csim.tcl + _csynth.tcl + _tb_data/ + stubs/ csim package at --csim-n (default 1024), same radar parameters

Why the AXI design is not simulated, and how the csim package keeps the acquisition's radar constants while rescaling only t_shift, is covered in examples/README.md. At 1024x1024 the reduced package focuses to IRW 1.65 samples in range (PSLR -30.9 dB) and csim-matches the reference to 4.7e-10 over 1048576 samples.