Signal Catalog

The supported emitter families with the parameter ranges, source backends, and example configs the framework provides out of the box.

Family

Coverage

Backend

Comms modulations

PSK, QAM, FSK, OFDM, AM, FM, chirp, CW tone

TorchSig v2.1.x · MIT

Radar

Pulsed (single pulsed label, radarsimpy-backed Pass-1 stub) and LFM chirp (lfm_chirp, scipy-backed)

Custom + radarsimpy + scipy

LoRa

Single lora class; SF / BW / CR knobs live on LoRaParams

gr-lora_sdr (default) or LoRaPHY

BLE / Wi-Fi / Zigbee

GNU Radio OOT-backed Pass-1 stubs

gr-bluetooth, gr-ieee802-11, gr-ieee802-15-4

ADS-B

Mode-S extended squitter (adsb_extended_squitter)

pyModeS-backed Pass-1 stub

Cellular LTE

LTE PUSCH/PDSCH (lte_pusch, lte_pdsch)

srsRAN over ZMQ Pass-1 stub

Cellular 5G NR

NR PUSCH (nr_pusch)

sionna.phy.nr Pass-1 stub

Deferred for future emitter expansion lists families and waveforms planned but not yet implemented in Layer 3 (drone family, GSM, captured playback, NR downlink, extended radar waveforms).


Comms modulations

Backend. TorchSig v2.1.x signals.builders.*, wired up as one rfgen emitter per modulation family rather than a single super-emitter. Each rfgen class lazy-imports its TorchSig submodule on construction. See Emitter Algorithms for the full builder-to-emitter mapping.

License. MIT.

Bandwidth. 1 kHz – 20 MHz.

Classes.

Family

rfgen emitter

Modulations

Constellation

TorchSigCommsEmitter

BPSK, QPSK, 8PSK, 16PSK, 16/32/64/256-QAM, OOK, 4/8-ASK

FSK

TorchSigFSKEmitter

2/4/8/16 {FSK, GFSK, MSK, GMSK}

OFDM

TorchSigOFDMEmitter

ofdm-{64, 72, 128, 180, 256, 300, 512, 600, 900, 1024, 1200, 2048}

AM

TorchSigAMEmitter

DSB-FC, DSB-SC, SSB-USB, SSB-LSB

FM

TorchSigFMEmitter

NB-FM, WB-FM

Chirp

TorchSigChirpEmitter

ChirpSS (LoRa-like), LFM data chirp

CW

TorchSigToneEmitter

CW tone

Reference datasets. RadioML 2018.01a, Sig53, HisarMod 2019.1.

Example.

# configs/emitter_zoo/comms_only.yaml
families:
  - family: comms
    classes: [bpsk, qpsk, 16qam, 64qam, ofdm-256]
    weight: 1.0
    params:
      symbol_rate: [50e3, 5e6]
      pulse_shape: rrc
      rrc_alpha: [0.2, 0.5]

Radar

The shipped radar surface is two classes with one waveform label each. Earlier drafts described a longer catalog of intrapulse codes (Barker B5/B7/B11/B13, polyphase Frank/P1/P2/P3/P4, PMCW Costas/Frank, FH Costas-array) and FMCW variants; those waveforms are planned for a future radar.py expansion (see Deferred for future emitter expansion) and not yet implemented.

Classes shipped.

rfgen emitter

supported_classes

Backend

ChirpRadarEmitter

("lfm_chirp",)

scipy.signal.chirp (always available)

PulsedRadarEmitter

("pulsed",)

radarsimpy.Transmitter; behind rfgen[radarsim]; Pass-1 stub

Knobs. PRI (typically 100 us - 10 ms), pulse width, num pulses per scene (see PulsedRadarParams and ChirpRadarParams). The intrapulse modulation choice is fixed per-class in this release.

Reference datasets. AIMC-Spec (arXiv:2601.08265), NIST CBRS Radar.

Example.

# Single LFM chirp pulse at X-band default parameters
families:
  - family: radar
    classes: [lfm_chirp]
    weight: 1.0
    params:
      bandwidth_hz: 10e6
      pulse_duration_s: 10e-6
      direction: up

LoRa

Backend. LoRaSdrEmitter (default) wraps the gr-lora_sdr GNU Radio OOT module via the rfgen[lora-sdr] extra. LoRaPHYEmitter (pure-Python fallback) wraps loraphy via the rfgen[lora-phy] extra. Both ship as Pass-1 stubs; generate() raises until the Pass-N backend wiring lands.

License. Implementation MIT; underlying GNU Radio OOT module GPL-3.0 (lazy-imported, not bundled).

Classes. A single "lora" class label. The SF / BW / CR knobs live on LoRaParams as per-emission fields (spreading_factor, bandwidth_hz, coding_rate, payload_bytes); they are not separate supported_classes entries. Backend selection happens at scene-config time via the LoRaBackend enum ("gr-lora-sdr" or "lora-phy").

Reference datasets. OSU LoRa, Pycom LoRa.

Example.

families:
  - family: lora
    classes: [lora]
    weight: 1.0
    backend: gr-lora-sdr
    params:
      spreading_factor: 7
      bandwidth_hz: 125e3
      coding_rate: 1
    fingerprint:
      enabled: true
      num_devices: 25            # for SEI research

BLE / Wi-Fi / Zigbee

GNU Radio OOT-backed Pass-1 stubs. Each pins a single supported_classes label; backend wiring is deferred to a future pass.

rfgen emitter

supported_classes

Backend

BLEEmitter

("ble",)

GNU Radio OOT; rfgen[ble]

WifiEmitter

("wifi",)

GNU Radio OOT; rfgen[wifi]

ZigbeeEmitter

("zigbee",)

GNU Radio OOT; rfgen[zigbee]


ADS-B

Backend. AdsBEmitter wraps pyModeS for Mode-S message encoding via the rfgen[adsb] extra. Ships as a Pass-1 stub; generate() raises until the pyModeS wiring lands.

Classes. A single ("adsb_extended_squitter",) label. Sub-message selection (DF11 all-call, DF17 extended squitter sub-types, DF18 TIS-B) is planned for a future cadence-and-message-mix expansion; the current Pass-1 stub does not yet distinguish them at the class-label level.

Reference datasets. Daytona ADS-B.


Cellular LTE

Backend. LTEEmitter delegates to srsRAN over ZMQ via the rfgen[lte] extra. Ships as a Pass-1 stub.

Classes. ("lte_pusch", "lte_pdsch"). The class labels name the protocol/channel; bandwidth and modulation/coding-scheme knobs live on LTEParams as runtime parameters (n_prb, mcs).

Reference datasets. NIST CBRS Radar (LTE component).


Cellular 5G NR

Backend. NRPuschEmitter wraps sionna.phy.nr via the rfgen[sionna] extra. Ships as a Pass-1 stub.

Classes. ("nr_pusch",). Bandwidth and subcarrier-spacing knobs live on NRPuschParams (n_rb, mcs, subcarrier_spacing_hz).

PDSCH, SSB, PRACH, CSI-RS, and NR test-model emitters are planned for a future cellular expansion; see Deferred for future emitter expansion.


Deferred for future emitter expansion

The items listed below are planned for a future release but are NOT shipped today. A reader who needs any of these for current work should NOT expect the listed class labels to work in this Layer 3 release; the class names are reserved for the planned expansion and not yet bound to a concrete emitter.

Each deferred item below has a planned home (a new module or an expansion of an existing module) noted alongside.

Drone family

Planned new emitter module covering DJI OcuSync (multiple model variants), DJI Lightbridge, FPV analog video (NTSC/PAL VSB), MAVLink telemetry (433/915 MHz FSK), and Crossfire/ELRS (LoRa-like FHSS). The EmitterFamily.DRONE enum value already exists for these classes but no concrete emitter binds to it yet. Planned for a future release.

GSM / 2G GMSK

GSM/2G GMSK 200 kHz is a planned cellular-emitter expansion alongside LTE and NR PUSCH. No GSM emitter ships today. Planned for a future release.

CapturedPlaybackEmitter (replay-from-IQ-files)

First-class emitter that replays IQ from SigMF + HDF5 captures, implementing the BaseEmitter contract so synthetic and captured signals compose interchangeably in scenes. This was the basis for the planned hybrid synth+capture path for the higher-fidelity drone shells. Planned for a future utility-emitter release.

Extended radar waveforms

The shipped radar surface is ("pulsed",) and ("lfm_chirp",). The following intrapulse codes and waveform families are planned for a future radar.py expansion: FMCW (up/down/triangle/sawtooth), frequency-hopping radar (Costas-array dwell sequences), Barker codes (B5, B7, B11, B13), polyphase codes (Frank, P1, P2, P3, P4), and PMCW phase-coded chirps (Costas, Frank polyphase). None of these are accepted as class_label arguments today.


Adding a new emitter family

See How-to / Add a custom emitter for the step-by-step. The contract is BaseEmitter.

Coverage roadmap

v1 (shipped): the families listed above (comms, radar, LoRa, BLE/Wi-Fi/Zigbee, ADS-B, cellular LTE, cellular 5G NR PUSCH).

Planned future expansions (in addition to the Deferred for future emitter expansion list above):

  • 802.11n/ac/ax with MIMO

  • DVB-S/S2 satellite

  • GPS L1/L2/L5

  • Iridium / Globalstar (LEO)

  • TETRA / DMR (LMR)

  • AIS

Reach out if your downstream task needs a family not listed; the framework’s plugin model makes additions cheap.