Scientific validation: primary physical RX frontend¶
Validated with documented limitations.
1. The component¶
The primary RX frontend is the rfgen-owned post-sum receiver pipeline for one complex IQ stream. IQ is a pair of real-valued in-phase and quadrature sample rows representing one complex waveform. It does not include TorchSig benchmark augmentation.
The approved CPU-only chain is:
ChannelPipeline([
RXLOFrequencyError(frequency_error_hz=125.0),
LinearRXMixer(),
ScipyFIRIFFilter(cutoff_norm=0.2, num_taps=33),
ScipyPolyResampler(up=1, down=1),
LinearLNANoise(noise_figure_db=6.0),
LinearADCQuantizer(enob_bits=10),
LeesonRXPhaseNoise(),
LinearRXIQImbalance(),
LinearAGC(),
])
The local-oscillator error is an independent, constant receiver error in Hz. The mixer then performs intended carrier-to-receiver-center tuning. The automatic-gain-control (AGC) stage is digital and post-ADC; analog pre-ADC VGA/AGC is excluded.
The validation environment was macOS CPU, Python 3.12, PyTorch 2.3.0, SciPy 1.17.0, NumPy 2.4.1, and Pydantic 2.13.3. Byte identity applies only to this pinned environment, not other dependency versions, CPU architectures, or GPU execution.
2. What we validated¶
This validation establishes five load-bearing claims. Each is supported in section 3.
Pipeline order (section 3.1): the configured chain has the approved physical stage order.
Receiver application point (section 3.2): RX stages run once on each summed receiver buffer.
Pinned-environment determinism (section 3.3): one seed gives a byte-identical CPU result.
Component-model grounding (section 3.4): stages have explicit models and sources.
Realized provenance (section 3.5): the transformation log records configured and realized LNA quantities.
Limits and exclusions appear in section 4; references are in section 5.
3. Evidence per claim¶
3.1 Pipeline order¶
Claim. The configured direct chain produces transformation ordinals [30, 31, 32, 33, 34, 41, 42, 43, 44]: receiver LO error, intended mixer, IF filter, resampler, LNA noise, ADC, phase noise, IQ imbalance, and digital AGC.
Evidence. A direct probe constructed the exact nine-stage chain in section 1 and applied it through ChannelPipeline. The result logged [30, 31, 32, 33, 34, 41, 42, 43, 44]. Transformation assigns the LO error to ordinal 30 and the remaining ordered stages through AGC at ordinal 44. ChannelPipeline.from_config() resolved RX_LO_FREQUENCY_ERROR through the registered rx_lo_frequency_error entry point.
Interpretation. The executable chain matches the approved sequence. LO error and intended tuning have separate log entries even though their complex rotations commute, preserving their distinct physical meanings.
3.2 Receiver application point¶
Claim. RX capture and RX hardware stages apply to the summed receiver stream once per receiver, not once per emitter.
Evidence. DefaultSceneComposer._apply_rx_chain constructs the post-sum list from pipeline.rx_capture and pipeline.rx_hardware, then applies it to each receiver row. The focused validation suite includes composer tests for one LNA and ADC application per receiver. The complete focused command passed 337 tests with five expected environment skips.
Boundary. The test suite does not yet contain one public-scene test that asserts all nine stages, exact order, per-receiver application, seeded bytes, and complete transformation provenance together. The direct probe validates the complete chain but is not that public-scene integration test.
3.3 Pinned-environment determinism¶
Claim. Two direct evaluations of the complete chain with seed 20260723 produced byte-identical (2, 1024) torch.float32 IQ tensors.
Evidence. The direct probe returned torch.equal(x.iq, y.iq) == True. The LNA and phase-noise stages receive the supplied torch.Generator; individual component tests also check same-input/same-seed behavior.
Boundary. The FIR and resampler use SciPy CPU primitives. This is not a GPU or cross-version identity contract.
3.4 Component-model grounding¶
Claim. The pipeline uses explicit physical or numerical models rather than an opaque impairment bundle.
Evidence. Existing tests cover complex frequency translation, FIR response, rational resampling, thermal-noise power, mid-tread ADC quantization, Leeson-spectrum phase noise, differential I/Q imbalance, and digital AGC convergence. FIR design and resampling use SciPy firwin and SciPy resample_poly. The ADC convention follows IEEE Std 1241-2010; phase noise follows Leeson (1966).
Boundary. LinearLNANoise is a single equivalent noise-figure model, not a multi-stage Friis cascade or a universal receiver claim.
3.5 Realized provenance¶
Claim. Every stage appends a structured transformation log entry, including the inputs needed to reconstruct LNA realized noise.
Evidence. The direct probe produced nine entries. Its LNA entry was:
{
"noise_figure_db": 6.0,
"effective_bandwidth_hz": 100000.0,
"noise_power": 1.5939741740607946e-15,
"sigma": 2.82309597256345e-08,
"noise_floor_applied": False,
}
This records the configured noise figure, effective bandwidth, calculated power, per-real-component standard deviation, and numerical-floor decision.
4. Limits and what is not validated¶
No analog pre-ADC AGC is modeled. The supported gain-control stage is digital and post-ADC; an analog VGA/AGC needs a distinct transformation and configuration contract.
No multi-stage Friis cascade is modeled. The LNA is a single equivalent noise-figure stage.
No universal frontend claim is made. The accepted physical scope is only the listed stage sequence and units.
No cross-platform identity claim is made. GPU execution, different CPU architectures, and different library versions are outside the deterministic envelope.
No one-test public-scene proof combines every nine-stage acceptance criterion. The direct probe and focused component/composer suite jointly establish the claim; a future public-scene integration test could consolidate this evidence.
5. References¶
SciPy, PyPI distribution scipy, version 1.17.0. SciPy signal documentation, used for IF filtering and rational resampling.
IEEE Std 1241-2010, IEEE Standard for Terminology and Test Methods for Analog-to-Digital Converters. IEEE standard page.
D. B. Leeson, “A Simple Model of Feedback Oscillator Noise Spectrum,” Proceedings of the IEEE, 1966, DOI 10.1109/PROC.1966.4682.
PyTorch, PyPI distribution torch, version 2.3.0. PyTorch documentation, used for IQ tensor operations and seeded random draws.
NumPy, PyPI distribution numpy, version 2.4.1. NumPy documentation, used by the digital AGC implementation.