Skip to content

RF Environment

A shared, deterministic slice of air that radio devices occupy — no pins, no wires

An RF Environment is the air between radios. Radio-capable boards, modules, and Wi-Fi Networks in the same environment contend for the same medium: path loss weakens signals, noise raises the floor, and transmissions that overlap in time can collide.

It has no pins. Radios join by membership rather than a wire because RF is a space devices share, not an electrical connection between two endpoints.

const room = graph.addComponent(Components.RF_ENVIRONMENT);
const c3 = graph.addComponent(Components.XIAO_ESP32C3);
const network = graph.addComponent(Components.WIFI_NETWORK);
room.joinRfEnvironment(c3, network);

A radio belongs to at most one RF Environment.

SX carries complete 802.11 MAC frames plus the Layer-1 metadata needed to decide whether a receiver can decode them: channel, transmit power, path loss, noise, rate, frame length, and timing overlap. It does not calculate I/Q samples or individual modulation waveforms.

A run has one simulation seed. Scheduler timing and RF outcomes derive from it, and RF randomness is keyed per transmission and receiver, so adding an unrelated radio does not reshuffle earlier devices’ random outcomes. Reusing the graph and seed reproduces the same simulated RF trace. Live Internet responses remain external and are not replayable.

Most users configure the room in real-world terms. These are the editor defaults:

ControlDefaultWhat it describes
EnvironmentTypical homeQuiet room, typical home, busy office, or industrial/noisy
Typical distance8 mRepresentative separation between devices
ObstaclesOne wallClear line of sight, one wall, several walls, or a metal enclosure
Nearby Wi-Fi networks3Decodable background 802.11 beacon and data traffic
Non-Wi-Fi interferenceNoneLight or heavy non-decodable RF energy, such as machinery or a microwave

The editor resolves those choices into exact channel values and saves both the friendly authoring intent and the resolved values. The resolved values remain authoritative, so a future profile update cannot change an existing graph.

Open Advanced RF settings only when a test needs exact radio conditions:

SettingTypical home valueMeaning
defaultPathLossDb66 dBRoom-wide signal loss between devices
defaultNoiseFloorDbm−92 dBmRoom-wide background noise
minimumDecodeOverlapPpm800000 (80%)Minimum packet overlap treated as a collision
captureMarginDb10 dBHow much stronger one signal must be to win a collision
links[]Directed, optionally time-varying signal-loss overrides between named radios
noiseSources[]Scheduled non-decodable energy with a center frequency and bandwidth
trafficSourcesgeneratedProtocol-aware ambient transmitters; normally generated by Nearby Wi-Fi networks

Use a directed link when one pair needs different conditions from the rest of the room—for example, sensor-a may reach gateway through one wall while the reverse path or another receiver has a different loss. A link schedule can change that loss at a simulated time to model walking out of range or roaming.

Use a noise source for energy that cannot be decoded as Wi-Fi. To model actual neighboring Wi-Fi, use Nearby Wi-Fi networks or a protocol-aware traffic source instead, because a Wi-Fi preamble affects carrier sense differently from generic energy.

Retained frame traces (traceCapacity, default 10000) is under Debugging & Performance. It controls memory and observability, not RF behavior.

trace_records, received_frames, ambient_traffic_sources, and ambient_frames_emitted are readable live with run.stream(room.id). last_trace explains the latest receiver decision, including transmitter and receiver IDs, timing, PHY/rate, frame length, transmit power, path loss, RSSI, noise, minimum SINR, packet-error probability, deterministic random roll, decision/reason, and the raw frame bytes.

run
.stream<{
last_trace?: { decision: unknown; rssi_mdbm: number } | null;
}>(room.id)
.subscribe(({ value }) => {
console.log(value.last_trace?.decision, value.last_trace?.rssi_mdbm);
});

The SDK can also inject exact or deliberately malformed 802.11 bytes at a scheduled simulated time. Injected frames take the normal airtime, interference, packet-error, receive, and trace path rather than bypassing the room.

  • Wi-Fi Network — infrastructure Wi-Fi, DHCP/DNS, Internet access, and a browser’s point of view