Channel Propagation¶
Note
Layer 3 shipped, Pass-1. The Layer 3 implementation (emitters,
device-fingerprint, tx-impairments, propagation, rx-frontend) landed
on branch rfgen-impl-2026-06-25-105955 (PR #94). The class names,
Pydantic schemas, and Transformation enum members referenced below
match the shipped surface; Pass-1 stubs (GNU Radio OOT emitters,
cellular emitters, Sionna propagation backends) construct cleanly and
raise an EmitterError or ChannelError tagged with
stage="pass1_stub" until backend wiring lands. See
Reference / rfgen.emitters and
Reference / rfgen.channels for the shipped
class roster.
Scientific validation
The propagation backends have been scientifically validated against published references. See the validation report:
AWGN channel propagation: validated.
The report covers construct validity, mathematical correctness against cited equations, empirical comparison to published reference numbers, literature grounding, experimental methodology, operating envelope, and documented limitations.
Channel propagation is Group 2 of the four-group channel pipeline. It models what happens while a transmitter’s signal travels to a receiver: the signal weakens with distance, reaches the receiver through reflected paths, changes with motion, and may be blocked or attenuated by the local environment.
rfgen delegates that propagation physics to Sionna, NVIDIA’s open-source physical-layer simulator. Sionna exposes statistical channel models and ray-tracing (RT) models; rfgen provides one pluggable position, or slot, for one Sionna-backed BaseChannel per (emitter, receiver) pair.
Overview¶
Name |
ABC |
Default backends |
|
|---|---|---|---|
Channel propagation |
|
SionnaRT, SionnaCDL, SionnaTDL, SionnaUMa, SionnaUMi, SionnaRMa |
The transformation enum entry CHANNEL is T6 in the T1-T14 channel sequence. See Channels overview § Pipeline overview for the full numbering, group, and sample-rate map.
The slot is one plugin position. You pick one Sionna backend per scene, meaning one generated rfgen example made from one or more emitters and receivers. You do not stack two propagation backends in one channel-propagation chain.
Why one slot¶
Sionna’s channel model classes compute the propagation effects as one coupled model call from a single set of inputs: TX/RX positions, velocities, antenna patterns, and carrier frequency. In this page, those effects are:
Path loss: signal weakening with distance and carrier frequency.
Shadow fading: slower attenuation from obstacles or local environment effects.
Multipath: copies of the signal arriving over reflected or scattered paths with different delays.
Doppler: frequency shift or channel variation from motion.
Splitting those effects across separate pipeline slots would require rfgen to decompose and recompose Sionna’s internal state, adding complexity and risk without benefit. The one-slot design delegates the propagation computation entirely to Sionna.
Source: Sionna’s TR 38.901 UMa implementation documents topology inputs, carrier frequency, optional path loss, optional shadow fading, and path-coefficient / delay outputs in one channel model call; the TDL and CDL implementations likewise expose profile-level path coefficients and delays under the 3GPP TR 38.901 model family. The underlying standard is ETSI TR 138 901 / 3GPP TR 38.901, and the local validation tables are collected in Reference / TR 38.901 propagation tables.
Sample Rate and Carrier Frame¶
Channel propagation operates at R_emitter, the emitter component’s native baseband sample rate. Baseband IQ means complex-valued in-phase/quadrature samples centered at 0 Hz; the physical carrier frequency is stored in metadata rather than shifted into the sample values.
The channel object receives baseband IQ tagged with realized_carrier_hz in metadata. Sionna uses realized_carrier_hz, passed as the carrier frequency argument, for carrier-dependent propagation effects such as path-loss scaling and Doppler. The output IQ is still baseband IQ relative to realized_carrier_hz; no frequency shift occurs in the sample domain. The RX mixer in RX capture performs the T7 shift into the receiver frequency frame.
Source: Sionna’s TR 38.901 models take carrier_frequency and sampling_frequency as explicit call inputs and return path coefficients plus path delays rather than frequency-shifted passband samples. rfgen’s carrier-frame handoff is documented in Coordinate Systems § Frame Transitions.
Current Execution Model¶
The shipped composer applies propagation once per (emitter, receiver) pair. That is the semantic contract the rest of the pipeline relies on today: each pair gets its own ChannelContext, its own receiver parameters, and its own propagated component before the post-sum combine point.
Receiver-band batching is still a valid future optimization for Sionna-backed backends, but it is not the current implementation contract. If a later build vectorizes several pairs into one Sionna call, the observable contract must remain identical to the per-pair path documented here.
Default Backend Selection¶
Choose the backend by scenario type. 3rd Generation Partnership Project (3GPP) is the cellular-standards consortium whose TR 38.901 report defines the UMa, UMi, RMa, TDL, and CDL channel-model families used below.
Need |
Backend |
|---|---|
Outdoor cellular in a city center, 3GPP Urban Macro (UMa) |
|
Outdoor cellular on a residential street or street canyon, 3GPP Urban Micro (UMi) |
|
Rural or suburban cellular, 3GPP Rural Macro (RMa) |
|
Controlled single-link fading profile, 3GPP tapped-delay-line (TDL) or clustered-delay-line (CDL) |
|
A specific indoor or outdoor geometry with known materials and ray paths |
The statistical scenario backends (SionnaUMa, SionnaUMi, SionnaRMa) cover large-scale effects, such as path loss, shadow fading, and line-of-sight (LOS) or non-line-of-sight (NLOS) state, plus small-scale effects such as multipath and Doppler. Use them as the default for dataset generation.
Source: Sionna’s official UMa, UMi, and RMa modules identify these as 3GPP TR 38.901 system-level channel models, with topology setup, carrier-frequency input, path-loss and shadow-fading switches, and path coefficient / delay outputs. 3GPP TR 38.901 covers the urban macro, urban micro street-canyon, and rural macro scenario procedures in the channel model for 0.5-100 GHz.
SionnaTDL and SionnaCDL cover small-scale fading at profile level. They do not provide complete scenario path loss on their own; use them for controlled link-level ablation studies, not full deployment datasets.
Source: Sionna’s TDL and CDL modules document tapped-delay-line and clustered-delay-line models from 3GPP TR 38.901. The TDL implementation notes normalized power delay profiles, sum-of-sinusoids coefficient generation, mobility aging, and single-link operation; this is why rfgen treats TDL/CDL as profile-level fading backends rather than full scene scenario models.
SionnaRT wraps Sionna RT. Use it when geometry matters, such as urban canyons, indoor environments, vehicle-to-everything (V2X) intersections, reconfigurable intelligent surface (RIS) studies, or any scenario where a statistical population model is not sufficiently specific.
Source: Sionna RT’s official documentation describes the package as a differentiable ray tracer for radio propagation modeling, with scene, path, radio-map, material, and antenna-pattern APIs. The Sionna RT technical report documents the algorithms used for channel impulse responses and radio maps.
TX and RX Antenna Patterns¶
Channel propagation reads antenna-pattern metadata from the emitter and receiver records. The emitter carries its TX antenna pattern; the receiver carries its RX antenna pattern. Both are passed to the Sionna channel object, which uses them in its internal propagation computation. rfgen does not apply antenna patterns as a separate transformation.
Source: Sionna’s TR 38.901 examples construct PanelArray objects with 38.901 or omnidirectional antenna patterns before instantiating UMa, and Sionna RT exposes antenna-pattern and antenna-array APIs as part of the propagation scene. rfgen therefore passes antenna metadata into the Sionna backend rather than modeling antenna gain as a separate channel transformation.
Multi-TX / Multi-RX Semantics¶
Each emitter component retains its own TX position, propagation metadata, delay/spread state, and realized received power after channel propagation. Components are not summed during channel propagation. The sum occurs at the head of RX capture, after T9, the resampler, moves all in-band components to R_rx, the receiver sample rate.
Each (emitter, receiver) pair gets its own channel realization because path loss, multipath, and Doppler depend on the physical geometry of that pair. A vectorized Sionna call over many TX/RX pairs is an optimization; the semantic contract remains per-pair.
Minimal Example¶
Select a backend and include it in the pre-sum chain:
from rfgen.channel_pipeline import ChannelPipeline
from rfgen.propagation import SionnaRT, SionnaUMi
from rfgen.tx_impairments import (
LeesonTXPhaseNoise,
LinearCFO,
LinearDACQuantizer,
RappPA,
TorchSigTXIQImbalance,
)
pre_sum = ChannelPipeline([
LinearDACQuantizer(enob_bits=14),
RappPA(),
LeesonTXPhaseNoise(),
TorchSigTXIQImbalance(),
LinearCFO(f_offset_hz=250.0),
SionnaUMi(), # channel-propagation slot; carrier/topology come from scene config and ChannelContext
])
Site-specific alternative:
from rfgen.channel_pipeline import ChannelPipeline
from rfgen.propagation import SionnaRT
from rfgen.tx_impairments import (
LeesonTXPhaseNoise,
LinearCFO,
LinearDACQuantizer,
RappPA,
TorchSigTXIQImbalance,
)
pre_sum = ChannelPipeline([
LinearDACQuantizer(enob_bits=14),
RappPA(),
LeesonTXPhaseNoise(),
TorchSigTXIQImbalance(),
LinearCFO(f_offset_hz=250.0),
SionnaRT(), # scene assets and RTSolverConfig supply the RT scene and solver knobs
])
See Channels overview for the full pipeline including RX capture and RX hardware.
Design Notes¶
rfgen is a thin integration layer over Sionna for Group 2; the propagation physics lives in Sionna. rfgen owns the integration layer: converting scene metadata into Sionna topology calls, invoking Sionna deterministically, mapping Sionna outputs back to BaseChannel records, and keeping rfgen config names stable across Sionna API versions.
References¶
Channel propagation delegates RF propagation to Sionna and 3GPP TR 38.901 instead of implementing propagation formulas in rfgen. The citations below duplicate the inline sources for readers who want the bibliography in one place.
ETSI TR 138 901 V16.1.0, 5G; Study on channel model for frequencies from 0.5 to 100 GHz (3GPP TR 38.901 Release 16). https://www.etsi.org/deliver/etsi_tr/138900_138999/138901/16.01.00_60/tr_138901v160100p.pdf
NVIDIA Sionna.
sionna.phy.channel.tr38901.UMa. https://nvlabs.github.io/sionna/_modules/sionna/phy/channel/tr38901/uma.htmlNVIDIA Sionna.
sionna.phy.channel.tr38901.UMi. https://nvlabs.github.io/sionna/_modules/sionna/phy/channel/tr38901/umi.htmlNVIDIA Sionna.
sionna.phy.channel.tr38901.RMa. https://nvlabs.github.io/sionna/_modules/sionna/phy/channel/tr38901/rma.htmlNVIDIA Sionna.
sionna.phy.channel.tr38901.TDL. https://nvlabs.github.io/sionna/_modules/sionna/phy/channel/tr38901/tdl.htmlNVIDIA Sionna.
sionna.phy.channel.tr38901.CDL. https://nvlabs.github.io/sionna/_modules/sionna/phy/channel/tr38901/cdl.htmlNVIDIA Sionna. Ray Tracing (RT). https://nvlabs.github.io/sionna/rt/index.html
NVIDIA Research. Sionna RT: Technical Report. https://research.nvidia.com/publication/2025-04_sionna-rt-technical-report
See Also¶
Channels overview: semantic channel groups and transformation table.
TX impairments: the pre-propagation chain.
RX capture: mixing and filtering that follow channel propagation.
Reference /
rfgen.channels: BaseChannel contract and Sionna backend APIs.Background / Sionna stack: how Sionna PHY and RT map onto the framework.
Reference / TR 38.901 propagation tables: validation tables and source traceability.
Background / Design Decisions § Channel pipeline for the rationale behind keeping channel propagation a single ABC slot delegated to Sionna rather than splitting propagation into per-effect transformations.