Scientific validation: production radar transmit waveforms

Verified against versioned deterministic fixtures. This report covers rfgen.emitters.radar_waveforms, not the older linear-FM chirp radar emitter.

Scope

RadarParamsV1 validates a closed RadarWaveform set: PULSE, LFM, FMCW_SAW, BARKER13, and FRANK. synthesize_radar_waveform() emits a read-only one-dimensional NumPy complex128 baseband record, exact (start_sample, pulse_index) placements, and the frozen validated input. The carrier is validated metadata in this transmit-baseband contract; it is not mixed into the emitted samples.

The synthesis contract owns discrete pulse placement, gating, and code-chip placement. measure_radar_waveform() uses SciPy correlation and NumPy FFTs to make deterministic acceptance measurements. It is not a target-scene, clutter, antenna, receiver, or hardware-impairment model.

Fixture experiment

The executable acceptance suite, tests/unit/test_layer24_radar_waveforms.py, loads and re-synthesizes every versioned fixture in tests/fixtures/radar/. Each fixture uses a 1 MHz sample rate, 20 microsecond pulse width, 100 microsecond PRI, four pulses, and exact starts (0, 0), (100, 1), (200, 2), (300, 3).

Fixture

Waveform

99% occupied bandwidth

PSL (dB)

Range-Doppler peak

pulse-v1.json

PULSE

640,000 Hz

-314.3962

(3, 26)

lfm-v1.json

LFM

660,000 Hz

-20.0039

(3, 26)

fmcw-v1.json

FMCW_SAW

660,000 Hz

-20.0039

(3, 26)

barker13-v1.json

BARKER13

960,000 Hz

-19.9625

(3, 26)

frank-v1.json

FRANK

980,000 Hz

-13.8939

(3, 26)

Every fixture fixes a deterministic unit-gain point-target measurement with an integer delay of seven samples and Doppler of 2,500 Hz. The gate permits at most 2% deviation in 99% occupied bandwidth, one sample in matched-filter peak position, 0.05 dB in waveform-specific PSL, and no range-Doppler-bin deviation. It also requires ambiguity-function magnitude symmetry relative RMS at or below 1e-12.

The LFM and FMCW fixtures independently estimate chirp slope from adjacent emitted complex samples. The measured slope must match bandwidth_hz / pulse_width_s within 0.5%, so a wrong phase sign, duration, or quadratic coefficient cannot pass by agreeing only with a source-side parameter.

Boundary and negative evidence

The parameter model fails closed for non-finite values, unknown fields, width greater than PRI, aliased or overlapping rounded pulse starts, oversized records, inconsistent chirp slope, invalid code lengths, and undersampled code chips. PSL uses a waveform-specific first-null mainlobe boundary, rather than a dB-threshold shortcut.

probe_radarsimpy_capability() reports an optional commercial target-simulation capability only when all conditions hold: RadarSimPy version >=15.0,<16.0, x86_64 Linux with Python 3.10 through 3.13, a recognized RFGEN_RADARSIMPY_LICENSE_TIER, and the required imported Transmitter, Receiver, Radar, and sim_radar APIs. Missing any one condition yields an unavailable result with a reason. The fixture results above remain valid without RadarSimPy because they validate transmit waveforms and deterministic measurements only; they do not claim RadarSimPy equivalence or target-scene realism.

Reproduce

PYTHONPATH=src python -m pytest -q tests/unit/test_layer24_radar_waveforms.py

See Also