RX Hardware¶
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 RX hardware transformations have been scientifically validated against published references. See the per-component reports:
RX phase noise and IQ imbalance: validated with documented limitations.
RX LNA noise, ADC quantization, AGC: validated with documented limitations.
Each report covers construct validity, mathematical correctness against cited equations, empirical comparison to published reference numbers, literature grounding, experimental methodology, operating envelope, and documented limitations.
RX hardware is the fourth and final group in the four-group channel pipeline. It runs once per receiver after RX capture has selected in-band emitters, summed them into one receiver waveform, and added low-noise-amplifier (LNA) thermal noise. This group models the receiver hardware that turns that waveform into final digitized in-phase/quadrature (IQ) samples for storage.
Overview¶
Name |
ABC |
Default backend |
|
|---|---|---|---|
Analog-to-digital converter (ADC) quantization |
|
Effective-number-of-bits (ENOB) quantizer |
|
RX phase noise |
|
Local-oscillator phase noise from a power-spectral-density profile |
|
RX IQ imbalance |
|
Gain and phase mismatch between in-phase and quadrature paths |
|
Automatic gain control (AGC) |
|
Scalar normalization toward a target root-mean-square amplitude |
The ADC_QUANTIZATION through AGC transformation tags continue the numbering used by the previous channel groups in Channels overview § Pipeline overview. All four are BaseChannel subclasses and are assembled by the scene-level ChannelPipeline, whose RX-hardware segment the composer applies once per receiver while still validating full-pipeline order.
Sample Rate and Carrier Frame¶
RX hardware receives complex-valued IQ samples at R_rx, the receiver sample rate in samples per second. The zero-frequency bin of those baseband samples corresponds to rx.center_freq_hz, the receiver’s configured carrier. No resampling or frequency shifting occurs in this group. The output is digitized composite IQ at R_rx, suitable for writing to a Record.
Default Implementations¶
ADC quantization¶
Models finite-resolution analog-to-digital conversion. The default implementation uses an effective-number-of-bits (ENOB) uniform quantizer. ENOB represents real-hardware noise sources that ideal bit-depth quantization does not capture, producing a more realistic noise floor.
The full-scale range and clipping threshold are configurable. Typical values: ENOB 8-10 for commodity software-defined radios (SDRs), ENOB 12-14 for research-grade receivers.
Source: IEEE Std 1241-2010 defines ADC terminology and ENOB test framing; see Reference / RF frontend models for the quantization equations used by this proposed backend.
RX phase noise¶
Models receiver local-oscillator phase fluctuations. The implementation mirrors TX phase noise but is applied at the receiver. The phase-noise power-spectral-density (PSD) profile is configurable; preset profiles for common SDR hardware classes are provided.
Phase noise is applied as a multiplicative complex exponential:
where \(x[n]\) and \(y[n]\) are complex IQ samples (I + jQ), and \(\theta[n]\) is the instantaneous phase error in radians. The phase error is drawn from a colored-noise process whose PSD matches the configured profile.
Source: Leeson’s oscillator phase-noise model is the grounding source for the PSD profile (DOI 10.1109/PROC.1966.4682); see Reference / RF frontend models for the shared RX/TX equation.
RX IQ imbalance¶
Models gain and phase mismatch in the receiver’s quadrature mixer, where the in-phase (I) and quadrature (Q) signal paths are imperfectly matched. The model is identical to TX IQ imbalance applied at the receive path. Parameters are gain_imbalance_db and phase_imbalance_deg; commodity receiver examples commonly use sub-dB gain mismatch and a few degrees of phase mismatch.
Source: Razavi, RF Microelectronics, 2nd ed., Pearson, 2011, ISBN 978-0137134731, covers quadrature mixer gain and phase mismatch; Analog Devices’ image-rejection discussion gives a practitioner-oriented summary of how I/Q mismatch produces image leakage. See Reference / RF frontend models for the model equation.
AGC¶
Models automatic gain control as a scalar normalization. The default implementation computes the root-mean-square (RMS) amplitude of the input and scales to a target RMS value on the IQ samples. This prevents clipping and normalizes signal levels across receivers with different path-loss conditions.
The scalar gain applied is recorded in metadata for downstream signal-to-noise-ratio (SNR) computation. A time-varying AGC implementation may be substituted by replacing BaseAGC.
Source: MathWorks’ digital AGC example and liquid-dsp’s AGC documentation describe gain-control blocks that adjust amplitude toward a target level. The default here is a settled scalar normalization rather than a dynamic feedback loop.
Plugin Slots¶
Each of the four transformations is a plugin slot. Replace any of them to customize the receiver hardware model. The values below are illustrative commodity-SDR settings; see Reference / RF frontend models for the proposed model equations.
from rfgen.channels import (
ChannelPipeline,
BaseADCQuantization,
BaseRXPhaseNoise,
BaseRXIQImbalance,
BaseAGC,
)
rx_hw_chain = ChannelPipeline([
BaseADCQuantization(enob=10.0),
BaseRXPhaseNoise(),
BaseRXIQImbalance(gain_imbalance_db=0.4, phase_imbalance_deg=2.0),
BaseAGC(target_rms=0.1),
])
Omit a transformation to run without it, or replace it with an identity pass-through for ablation studies.
Relationship to RX Capture¶
RX hardware runs after the sum point and after LNA noise injection. The distinction between LNA noise in RX capture and ADC quantization in RX hardware reflects the physical sequence: the LNA amplifies and adds thermal noise before the analog-to-digital converter digitizes the signal.
LNA noise and ADC quantization together produce the realistic noise floor. LNA noise figure (nf_db, in dB) determines the thermal noise power; ADC ENOB determines the quantization noise floor. For high-SNR signals, quantization noise can dominate. For low-SNR signals, thermal noise dominates.
Per-Receiver Configuration¶
RX hardware runs independently for each receiver, but the shipped transformation chain is scene-level, not per-receiver. ReceiverConfig carries RF and geometry inputs, not an rx_chain override. The composer applies the single scene-level ChannelPipeline to every receiver after building that receiver’s ChannelRxParams. Receiver-specific physical variation therefore comes from per-receiver parameters such as noise_figure_db, tuned center, bandwidth, sample rate, and pose, not from swapping a different RX-hardware chain per receiver inside one scene. rx_id remains a stable metadata label threaded through ChannelRxParams.tag; it does not by itself change the RF behavior.
Minimal Example¶
Post-sum chain containing RX capture and RX hardware. The receiver settings describe a 3.5 GHz carrier, 20 MHz capture bandwidth, and 30.72 million samples per second; the values are illustrative, not a required preset.
from rfgen.channel_pipeline import ChannelPipeline
from rfgen.config import ReceiverConfig
from rfgen.rx_frontend import (
LeesonRXPhaseNoise,
LinearADCQuantizer,
LinearAGC,
LinearLNANoise,
LinearRXMixer,
ScipyFIRIFFilter,
ScipyPolyResampler,
TorchSigRXIQImbalance,
)
rx_chain = ChannelPipeline([
# RX capture
LinearRXMixer(),
ScipyFIRIFFilter(cutoff_norm=0.4, num_taps=65, gain=1.0),
ScipyPolyResampler(up=1, down=1),
LinearLNANoise(noise_figure_db=5.0),
# RX hardware
LinearADCQuantizer(enob_bits=10),
LeesonRXPhaseNoise(),
TorchSigRXIQImbalance(),
LinearAGC(),
])
rx_cfg = ReceiverConfig(
rx_id="rx0",
center_freq_hz=3.5e9,
bandwidth_hz=20e6,
sample_rate_hz=30.72e6,
)
The rx_chain above is supplied once at scene-construction time. rx_cfg contributes only the receiver-specific RF and geometry fields the composer threads into ChannelRxParams. See Channels overview for the full pipeline including the pre-sum chain, TX impairments and channel propagation.
See Also¶
Channels overview: semantic channel groups and transformation table.
RX capture: the sum point and LNA noise that precede RX hardware.
Reference /
rfgen.channels: full ABC contracts for BaseADCQuantization, BaseRXPhaseNoise, BaseRXIQImbalance, and BaseAGC.Reference / RF frontend models: canonical equations for ENOB, IQ imbalance, and phase noise shared with TX impairments.
Records, Receivers, and Assets: how per-RX records are shaped and stored after RX hardware.
Background / Design Decisions § Channel pipeline for the rationale behind splitting RX into capture and hardware and why each per-RX hardware effect is a separate transformation rather than a coarse RX-frontend stage.
References¶
RX hardware reuses the impairment models in Reference / RF frontend models applied at the receive path. The citations below duplicate the inline sources for readers who want the bibliography in one place.
IEEE Std 1241-2010 IEEE Standard for Terminology and Test Methods for Analog-to-Digital Converters. https://ieeexplore.ieee.org/document/5692956 (ENOB definition; quantization SNR)
Leeson, D. B. A Simple Model of Feedback Oscillator Noise Spectrum, Proc. IEEE, 1966. https://doi.org/10.1109/PROC.1966.4682 (RX phase-noise PSD)
Razavi, B. RF Microelectronics, 2nd ed., Pearson, 2011, ISBN 978-0137134731. (IQ imbalance, image rejection ratio)
Analog Devices. Mirror, Mirror, on the Wall: Understanding Image Rejection and Its Impact on Desired Signals. https://www.analog.com/en/resources/analog-dialogue/articles/mirror-mirror-on-the-wall-understanding-image-rejection-and-its-impact-on-desired-signals.html (receiver I/Q mismatch and image rejection)
Pozar, D. M. Microwave Engineering, 4th ed., Wiley, 2011, ISBN 978-0470631553. (Receiver-chain ordering rationale)
MathWorks. Implement HDL Digital Automatic Gain Control for Single and Multicarrier Systems. https://www.mathworks.com/help/wireless-hdl/ug/implement-hdl-digital-automatic-gain-control-for-single-and-multicarrier-systems.html (digital AGC)
liquid-dsp. Automatic gain control. https://liquidsdr.org/doc/agc/ (software AGC behavior)