Scenario Presets

Named end-to-end Hydra recipes ship as package data under src/rfgen/cli_data/presets/. Each file carries metadata plus a config that validates through GenerationConfig.

Canonical preset differences

Preset

num_samples

Density mode

Channel transformations

Geometry backend

Geometry asset kind

dense_urban_2_4ghz

100000

poisson

PROPAGATION

sionna_rt

sionna_builtin_scene

contested_ew_lband

50000

range

PROPAGATION

none

none

rural_ads_b

100000

range

PROPAGATION

none

none

device_fingerprint_lora_25

250000

range

TX_PHASE_NOISE, TX_IQ_IMB, CFO

none

none

multimodal_drone_sim

50000

range

PROPAGATION

sionna_rt

sionna_builtin_scene

narrowband_classifier_baseline

100

range

TX_PHASE_NOISE, TX_IQ_IMB

none

none

sionna_builtin_munich_rt

10000

range

none

sionna_rt

sionna_builtin_scene

sionna_builtin_etoile_rt

10000

range

none

sionna_rt

sionna_builtin_scene

opengert_mitsuba_asset_rt

10000

range

none

sionna_rt

opengert_mitsuba_xml_bundle

rfgen generate --config-dir src/rfgen/cli_data/presets --config-name <name>

dense_urban_2_4ghz

Scenario. Dense 2.4 GHz ISM band. Wi-Fi a/g, BLE advertising/data, Zigbee, microwave-oven leakage, plus a handful of LoRa beacons. ~50 emitters per 100 MHz scene.

Channel. Sionna RT over an OSM scene (default: Munich downtown). Multi-bounce reflections enabled.

Annotations. Full suite (caption, QA, reasoning, scene_report, contrastive).

Size. _md 100K samples, _lg 1M, _xl 10M.

Intended downstream task. Wideband detection + dense-emitter coexistence research; CLIP-for-RF training.


narrowband_classifier_baseline

Scenario. Single-emitter narrowband classification smoke test. The emitter zoo is comms_only: binary phase-shift keying (BPSK), quadrature phase-shift keying (QPSK), 16-state quadrature amplitude modulation (16-QAM), and 64-state quadrature amplitude modulation (64-QAM).

Channel. TorchSig-compatible impairment preset for quick local checks.

Annotations. None by default. Add annotator=caption_only to append caption text after Phase 1 generation.

Size. 100 samples in the quickstart, _xs for 10-sample integration tests, _md for 100K-sample release gates.

Intended downstream task. First-run validation and narrowband modulation classification examples.


contested_ew_lband

Scenario. L-band radar (1–2 GHz) under jamming. One pulsed search radar, one tracking radar (FMCW), 2–4 jammers (barrage noise + sweep), occasional comms downlink.

Channel. TDL-A (mostly LOS) + per-emitter AoA via 4-element ULA. Multi-RX.

Annotations. Reasoning + scene_report only (this preset feeds RF-LLM evaluation, not bulk pretraining).

Size. _md 50K samples (smaller because reasoning annotations are expensive).

Intended downstream task. Electronic-warfare scene understanding; multi-RX direction-finding research.


rural_ads_b

Scenario. Sparse aviation surveillance. ADS-B 1090 MHz with 1–10 simultaneous aircraft over a 1-second window, plus the occasional mode-S transponder. Realistic 1-Hz emission cadence per aircraft.

Channel. Sionna-backed propagation preset: SionnaRT for geometry-aware runs or SionnaUMi / SionnaUMa for statistical urban runs. Single-RX by default.

Annotations. Caption + scene_report.

Size. _md 100K, _lg 1M.

Intended downstream task. ADS-B baseline + sparse-emitter detection.


device_fingerprint_lora_25

Scenario. 25 distinct LoRa devices on a single channel (SF7-SF12, BW 125-500 kHz). Per-device CFO, IQ imbalance, phase noise, PA nonlinearity drawn from a fixed seed table, so the same device produces the same fingerprint across samples.

Channel. AWGN + TorchSig impairments level 2.

Annotations. Caption + attribute QA (with device-level questions).

Size. _md 250K (10K per device).

Intended downstream task. RF fingerprinting and SEI (specific emitter identification) research.


multimodal_drone_sim

Scenario. Single drone in flight: OcuSync downlink (video + telemetry) + 2.4 GHz controller uplink, optionally a co-located Wi-Fi access point, simulated in 100 ms windows.

Channel. Sionna RT with a moving TX (the drone) over an outdoor scene. Doppler-aware.

Annotations. Full suite, with reasoning chains that include the drone’s flight state (ascending, hovering, descending).

Size. _md 50K.

Intended downstream task. Drone detection / classification; multimodal RF + telemetry research.


How presets compose

Each preset is a Hydra config file under src/rfgen/cli_data/presets/:

# src/rfgen/cli_data/presets/dense_urban_2_4ghz.yaml
defaults:
  - /emitter_zoo: heterogeneous_dense_24ghz
  - /channel: sionna_rt_munich
  - /scene: dense
  - /label: joint
  - /annotator: full_suite
  - /storage: zarr_gcs
  - /orchestration: spark_serverless
  - _self_

run:
  num_samples: ${oc.select:size_lg, 1000000}
  shard_size: 1000

scene:
  sample_rate_hz: 200e6
  bandwidth_hz: 100e6
  center_hz: 2.45e9
  duration_s: 0.1
  density:
    mode: poisson
    poisson_rate: 50
    max_emitters: 100

Override at the CLI:

# Use the small variant
rfgen generate +preset=dense_urban_2_4ghz size=md

# Override one knob
rfgen generate +preset=dense_urban_2_4ghz scene.density.poisson_rate=30

Open questions

  1. Variant suffix syntax. _md / _lg / _xl as preset suffix or as a size=md override? Current lean: suffix in the file name + Hydra-resolvable variable.

  2. Should presets ship channel-realization seeds for reproducibility? Pinning a seed makes the preset reproduce identically; it also makes “another sample from the same preset” mean “the same sample.” Lean: don’t pin scene seed; do pin channel-realization-table seed for fingerprint presets.