Receiver-background validation¶
Validated with documented limitations.
1. The component¶
ReceiverBackgroundPolicy adds an opt-in thermal-noise contribution after the
configured RX-capture chain and before RX hardware. It delegates generation to
the existing LinearLNANoise transform. A receiver (RX) is the capture
endpoint; its low-noise amplifier (LNA) model contributes thermal noise to
the complex in-phase/quadrature (IQ) samples. A noise figure is the factor by
which a receiver adds noise beyond an ideal thermal source. Disabled is the
default, so an empty scene retains all-zero IQ.
class ReceiverBackgroundPolicy:
def __init__(self, config: ReceiverBackgroundConfig, *, scene_bandwidth_hz: float) -> None: ...
def apply(self, master_iq: torch.Tensor, *, scene_id: str,
rx_params: tuple[ChannelRxParams, ...], rng: torch.Generator
) -> tuple[torch.Tensor, BackgroundProvenance]: ...
Input or output |
Type, unit, or default |
Meaning |
|---|---|---|
|
JSON bool; |
Enables the additional contribution. |
|
finite float, dB; |
Equivalent single-stage receiver noise figure. |
|
positive float, K; |
Thermal reference temperature. |
|
positive float, Hz, or null |
Uses this bandwidth or the scene capture bandwidth. |
|
exactly |
The only V1 executable selector. |
provenance |
immutable V1 record |
Shared policy plus mean background-only power across receivers. |
master_iq is a torch.complex64 tensor of shape (R, N): one master IQ row
with N samples for each of R receivers. When enabled, rx_params must be a
tuple of exactly R ChannelRxParams values in that same row order. apply
returns a torch.complex64 tensor with the identical (R, N) shape and one
BackgroundProvenance. Disabled configuration returns the supplied tensor
unchanged and does not require receiver rows.
policy = ReceiverBackgroundPolicy(
ReceiverBackgroundConfig(enabled=True, background_type="thermal_receiver"),
scene_bandwidth_hz=1e6,
)
iq, record = policy.apply(
torch.zeros((1, 2048), dtype=torch.complex64), scene_id="fixture",
rx_params=(ChannelRxParams(0.0, 1e6, 2e6, 0.0),),
rng=torch.Generator().manual_seed(1337),
)
assert record.background_power_w > 0
2. What we validated¶
This validation establishes five load-bearing claims. Each has evidence in section 3.
Disabled compatibility (§3.1): the default preserves empty-scene IQ.
Thermal relation (§3.2): the transform uses its stated kTBF relation in its ordinary operating range.
Receiver-local draws (§3.3): each receiver receives a replayable independent draw.
Pipeline order (§3.4): addition occurs between RX capture and RX hardware.
Strict record (§3.5): V1 stores executable choices and measured mean power.
3. Evidence per claim¶
3.1 Disabled compatibility¶
Claim. Disabled configuration leaves supplied IQ unchanged and reports only
disabled record fields. Evidence.
test_disabled_policy_is_an_exact_zero_iq_oracle compares every IQ value and
all version-1 fields. This preserves the control capture used by existing
generation jobs.
3.2 Thermal relation¶
Claim. In the ordinary operating range, the selected transform uses
the kTBF relation, shorthand for thermal power from Boltzmann’s constant,
temperature, bandwidth, and the receiver’s linear noise factor:
P = k T B 10^(NF_dB / 10), where k is Boltzmann’s constant, T is
reference temperature, B is effective bandwidth, and NF_dB is noise
figure in dB. Evidence.
test_absolute_kTBF_complex_power_in_ordinary_range measures the mean
per-real-component power for 1 MHz, 290 K, and 0 dB as
2.00e-15 W within 6% of kTB/2; the two real components together therefore
measure the stated complex power. The scaling test independently checks the
NF, temperature, and bandwidth ratios.
At tiny positive bandwidths, the implementation deliberately floors the
complex noise power at 1e-24 W to retain a meaningful float32 draw. This is
a numerical operating boundary, not a changed physical claim:
test_tiny_positive_bandwidth_uses_documented_floor measures half that value
per real component at 1 µHz. Finite parameter combinations whose computed
draw exceeds the V1 float32 envelope fail before allocation with
background_parameter_invalid. The wrapper limits each real-component
standard deviation to float32_max / 8, reserving eight-standard-deviation
headroom for the Gaussian draw. At 1 MHz and 290 K this admits noise figures
through about 899.56 dB; 917.176748 dB is rejected before allocation.
3.3 Receiver-local draws¶
Claim. A multi-receiver scene has one deterministic independent draw per
receiver. Evidence.
test_multi_rx_background_has_distinct_draws_and_shared_mean_power verifies
two rows differ and that the record equals their mean |IQ|^2.
test_enabled_zero_emitter_scene_is_deterministic_nonzero_and_records_artifact
compares two same-seed builds exactly.
3.4 Pipeline order¶
Claim. Background is added after RX capture and before RX hardware.
Evidence. test_composer_behaviorally_orders_capture_then_background_then_hardware
uses a capture multiplier of two and a hardware multiplier of three. Those
operations do not commute with additive noise. With a zero-emitter capture,
the observed output is exactly three times a same-seed background-only build:
capture leaves zero, background adds the draw, and hardware triples it. The
other placements produce either six times the draw or a post-hardware draw.
3.5 Strict record¶
Claim. The artifact is an auditable policy record rather than a calibration
claim. Evidence.
test_invalid_background_selector_uses_structured_chain_error rejects unknown,
empty, and duplicate selectors. test_enabled_policy_rejects_row_and_parameter_count_mismatch
rejects incompatible receiver rows. read verifies the canonical path and
exact field set. V1 stores one shared policy and mean multi-receiver power.
4. Limits and operating boundary¶
The model is an ideal independent complex-Gaussian equivalent-noise source. It
does not provide receiver calibration, a Friis multi-stage cascade, antenna
temperature, spatially correlated noise, or ambient-capture replay.
ambient_explicit has no ambient source: it produces the same equivalent
thermal draw as thermal_receiver and only changes the recorded category.
The V1 record is a shared multi-receiver summary. A configured
LinearLNANoise remains active; this policy adds to it rather than replacing
it.
BackgroundProvenance is JSON object schema version 1. Its exact keys are
schema_version, enabled, enabled_default, background_type,
noise_figure_db, reference_temperature_k, effective_bandwidth_hz,
background_power_w, and background_chain. Disabled records contain
enabled_default: false, background_type: "disabled", and numeric
noise_figure_db: 0.0; temperature, effective bandwidth, background power,
and chain are null. Enabled records contain finite positive physical/power values and the
single-element chain ['linear_lna_noise']. write creates only
artifacts/plans/<scene_id>/background.json; read rejects any other path,
invalid JSON, extra or missing keys, malformed values, and records that fail
these state predicates.
5. References¶
H. T. Friis, “Noise Figures of Radio Receivers,” Proceedings of the IRE, 1944. DOI 10.1109/JRPROC.1944.232049.
H. Nyquist, “Thermal Agitation of Electric Charge in Conductors,” Physical Review, 1928. DOI 10.1103/PhysRev.32.110.
PyTorch, distribution
torch, version2.3.0exercised by the focused suite. Random sampling documentation.NumPy, distribution
numpy, version2.4.1exercised for the scalar square-root calculation. Square-root documentation.