Week 3 — Ray-Traced Channel Simulation: Scenes, Scatterers, Synthetic CSI
A 100-minute lecture. Times are cumulative from the start of the session; the workbook sections referenced throughout are executed and print every derived number quoted here to the digit.
Where We Are (0:00–0:05)
Last week ended with a promise: the trajectory file the walker produced — five typed columns, one row per person per frame — would become the input of a completely different simulator. This week we cash that promise. The new program is a ray-traced radio-channel simulator: it takes a room, the materials its walls are made of, a transmitter, a receiver, and the moving crowd from last week's file, and it computes what a Wi-Fi radio between those two antennas would measure. The output is synthetic CSI — channel state information, the per-frequency fingerprint of everything the radio waves bounced off on their way across the room.
The contract discipline carries over unchanged: the channel simulator's published description lists the trajectory file as an incoming input, and its own output is again a typed table (one row per link per time step, complex channel values per subcarrier). What is new this week is the physics inside the box — and, more importantly, a lesson about how a simulator can keep producing plausible-looking output long after a single configuration choice has quietly disconnected that output from the scene it claims to simulate. The course throughline applies with full force: an instrument you cannot check is not evidence. This week the check failed once, silently, inside our own lab, and we will study exactly how it was caught.
One boundary, as always: the sister material on wireless sensing covers why CSI carries information about people. SIM507 covers how the simulator produces it, what its knobs cost, and what its outputs can and cannot prove.
First, the words
- Ray tracing — computing which geometric paths (straight segments, possibly bouncing off surfaces) carry radio energy from a transmitter to a receiver in a 3-D scene.
- Scene — the simulator's input world: geometry (walls, furniture) plus a material per surface, which sets how strongly the surface reflects.
- Path — one route the energy takes. Every path has an amplitude (how much survives the trip) and a delay (how long the trip takes).
- Phasor — a complex number representing one path's contribution: its length is the amplitude, its angle is the phase the delay imposes.
- CFR / CSI — the channel frequency response: one complex number per subcarrier telling you how the channel scaled and rotated that frequency. CSI is the measured form of the CFR that Wi-Fi hardware reports.
- Subcarrier — one of the narrow frequency slices a Wi-Fi channel is divided into (256 across an 80 MHz channel in this week's toy).
- Occlusion — a body standing on a path absorbs most of the energy travelling along it.
- Rician K factor — the power ratio between the deterministic part of the channel (the traced paths) and the diffuse part (weak scattered energy with random phase). High K: the traced paths dominate. Low K: scatter dominates.
- Backend — the compute engine the ray tracer runs on. Backends differ in speed and in numerical fidelity, and the difference is a scientific variable, not an implementation detail.
Eight of these words return with technical weight within the hour. "Backend" earns its place on the list: the same scene traced on two backends can support different scientific claims, and by the end of the lecture you will be able to say precisely why.
Part 1 · The Problem Nobody Ordered (0:05–0:15)
Start with the question that makes this week exist. Suppose you want to count the people in a room using nothing but the Wi-Fi already installed in it. You need to know how the channel between two antennas responds to bodies — one body, five bodies, a crowd. The honest way to find out is a measurement campaign: recruit participants, schedule rooms, walk people through them for hours, and repeat for every room geometry, wall material, antenna placement, and crowd size you care about. Each of those factors multiplies the cost. A four-factor study at even three levels per factor is eighty-one campaigns. Nobody funds that, and nobody should: most of those eighty-one cells exist only to answer structural questions — does the effect grow with N? does it survive a material change? — that do not need a human being anywhere near an antenna.
That is the job description of a channel simulator: a program that answers structural and sensitivity questions cheaply, so that the expensive measured campaigns can be spent where only reality will do. Keep that division of labour in mind all lecture; the final act is about what happens when people forget it.
A technique with a double life
The tool we reach for has one of the strangest résumés in computing. In 1980 Turner Whitted published a short paper showing that if you trace light rays backwards — from the eye, through each pixel, into a scene, recursively spawning reflection and refraction rays at each surface — you get images with mirrors, shadows, and glass that no previous rendering method could produce. The famous demonstration image of reflective spheres was notoriously slow to render on the minicomputers of the day. Computer graphics has been refining that idea ever since, to the point where your graphics card now does it in real time.
The radio community looked at the same mathematics and saw something else. A light ray and a radio ray are the same object — a solution of the wave equation in the high-frequency limit, travelling in straight lines, reflecting off surfaces according to material coefficients. Through the 1990s, as cellular operators needed to predict coverage street by street in cities where a simple distance-decay formula was useless, ray tracing became a propagation-prediction tool: trace the rays from a rooftop antenna, bounce them off building façades, and you get a site-specific map of signal strength. An industry of planning tools grew out of that insight — WinProp, Atoll, Wireless InSite and their relatives — and to this day, when an operator decides where a base station goes, a descendant of Whitted's algorithm is somewhere in the loop. The graphics community optimised for looking right; the radio community had to optimise for being right, because their outputs were checked against drive-test measurements. That difference in accountability is a preview of this week's moral.
The statistical alternative
Ray tracing is not the only way to model a channel, and it is worth meeting the competition early because our simulator will end up hiring it. The older tradition, going back to Lord Rayleigh's nineteenth-century analysis of random phasor sums and to Stephen Rice's wartime work on random noise, says: do not model the room at all. Model the channel as a random variable. If many comparable scattered contributions add with random phases, the resulting amplitude follows a Rayleigh distribution; if one dominant path rides above the scatter, it follows a Rician distribution, parameterised by the ratio K of dominant power to scattered power. Cellular standards bodies still specify test channels this way — statistical models with tabulated delay profiles, no geometry anywhere.
The statistical tradition is honest about what it ignores: it trades site-specific fidelity for universality. Ray tracing makes the opposite trade. The mature position — the one our simulator takes — is that they are not rivals but layers: trace the paths you can trace, and represent everything below the tracer's resolution statistically, as a diffuse component governed by exactly Rice's K. Hold that thought; K returns in Part 5 as the load-bearing parameter of the whole week.
Stop and convince yourself (concept check). A colleague proposes to skip simulation entirely and just measure. Name two questions from the counting problem above for which measurement is the wrong first tool, and one for which it is the only acceptable tool. (If your third answer is "final accuracy of the deployed system," you have already internalised half of Part 8.)
Part 2 · From Maxwell to Rays (0:15–0:30)
Before we trust straight lines, we owe ourselves ten minutes of honesty about when straight lines are legitimate. Radio propagation is governed by Maxwell's equations; a ray is what their solutions look like in the high-frequency limit, when the wavelength is small compared to the objects the wave meets. Our carrier sits at f_0 = 5.18 GHz, so the wavelength is
(Board arithmetic — worth doing live, because every validity argument this hour hangs on this one number.) Walls, doors, desks, and human torsos are all tens of wavelengths across: for them, geometric optics is a good description. Door handles, cable trays, chair legs and window frames are one-ish wavelength across: for them it is not, and the wave does things no ray can represent.
Two such things matter indoors. Diffraction: a wave bends around edges — this is why you still receive a signal standing behind a concrete pillar, in what a ray tracer calls a perfect shadow. Fresnel worked out the mathematics of edge-bending in 1818, and modern tracers bolt approximations of it (the uniform theory of diffraction) onto the ray framework, at real computational cost. Diffuse scattering: a surface that is rough at the scale of \lambda — a bookshelf, a radiator, a cluttered desk — does not produce one mirror-like reflected ray but a spray of weak energy in many directions. No practical tracer enumerates that spray path by path; it is exactly the part of reality the statistical layer from Part 1 must absorb. Remember the division: specular, ray-traceable structure versus sub-wavelength, statistical residue. The entire architecture of our simulator — and its one great failure — lives on that boundary.
The image method: a ray tracer you can run by hand
The production simulator answers the path question for thousands of paths against textured 3-D geometry — it is modelled after Sionna RT, which additionally makes the whole computation differentiable (Hoydis et al. 2023 ↗). But the mechanism fits on a blackboard. In an empty rectangular room the first-order answer is exact, via a construction called the image method.
Claim: the ray that leaves the transmitter TX, bounces once off a wall, and arrives at the receiver RX has the same length as the straight line from a mirror image of TX — TX reflected through the wall's plane — to RX. Convince yourself with the geometry: reflection preserves path length segment by segment (the wall acts as a mirror), and the angle-of-incidence-equals-angle-of-reflection law is exactly the statement that the bounced path unfolds into a straight line through the image. So: mirror TX across each of the four walls, draw four straight lines to RX, intersect each with its wall to find the bounce point, and you have all four first-order reflections, exactly, with no search.
Each path k then needs an amplitude and a delay. The delay is trivial: \tau_k = \ell_k / c where \ell_k is the path length. The amplitude has two factors:
Take the factors one at a time, because each is a piece of physics. The 1/\ell_k: a transmitter radiates power onto an expanding sphere, so power density falls as 1/\ell^2, and field amplitude — the square root of power — falls as 1/\ell. The \Gamma^{n_k}: each of the n_k wall bounces multiplies the field by the wall's reflection coefficient \Gamma \in [0, 1], the fraction of amplitude the material returns. Concrete here is \Gamma = 0.40; polished metal would be near 0.95. Note carefully: the material coefficient is the only place the scene's physical substance enters the numbers. Geometry sets lengths and delays; materials set how much survives. That single sentence is where this week's failure story will live.
We reuse Geometry A from last week (8 m × 12 m), put the transmitter at (1, 2) and the receiver at (7, 10), and obtain five paths:
| Path | Length (m) | Delay (ns) | Amplitude (dB) |
|---|---|---|---|
| Line of sight | 10.00 | 33.36 | -20.0 |
| West wall image | 11.31 | 37.74 | -29.0 |
| East wall image | 11.31 | 37.74 | -29.0 |
| South wall image | 13.42 | 44.75 | -30.5 |
| North wall image | 13.42 | 44.75 | -30.5 |
Check one row against the formula, on the board: the west-wall path, a = 0.40 / 11.31 = 0.0354, and 20 \log_{10} 0.0354 = -29.0 dB. The line of sight, a = 1/10, is -20 dB exactly. (One bookkeeping note: as written, a_k carries units of 1/length, and a logarithm wants a dimensionless ratio — the decibel values here and in every figure are quoted relative to a 1 m free-space reference, the convention the workbook's axis labels state as "dB rel. 1 m free space".) Sanity checks like this — one row, by hand, every time — are the cheapest instrument calibration you will ever perform.

Reproduce in Workbook §1.
Stop and convince yourself. Second-order reflections (two bounces) come from images of images — mirror the mirror. How many second-order paths does a rectangular room admit, and why does each carry \Gamma^2? What does that tell you about how fast the path count grows with reflection depth — and therefore what the max_depth knob in a production tracer is really trading away?
Part 3 · The Ray Sum: Paths In, CSI Out (0:30–0:42)
We now hold a list of five (amplitude, delay) pairs. The step from that list to CSI is one line of mathematics, and it deserves to be built slowly because everything downstream is a consequence of it.
Consider a single path of length \ell_k carrying a sinusoid of frequency f. The path delays the wave by \tau_k = \ell_k / c seconds, and a delay of \tau_k at frequency f is a phase rotation of 2\pi f \tau_k radians — the wave has oscillated f \tau_k times during the trip, each full oscillation being 2\pi of phase. So the path's contribution to the received field is a complex number, a phasor:
with length a_k (how much survived) and angle -2\pi f \ell_k / c (how far the delay wound the phase). The receiver cannot take delivery of paths separately; antennas sum fields. The channel at frequency f is therefore the coherent sum:
One complex number per subcarrier per instant — that is CSI. Nothing more is hidden in the definition: amplitude per path, phase set by path length, add the phasors. When Wi-Fi hardware "reports CSI", it is estimating exactly this function, sampled at the 256 subcarrier frequencies of the channel.
Why the sum ripples
Here is the first non-obvious consequence, and it is worth deriving rather than asserting. Take just two paths, lengths \ell_1 < \ell_2, difference \Delta\ell = \ell_2 - \ell_1. Their combined power is
(Expand |A + B|^2 = |A|^2 + |B|^2 + 2\,\mathrm{Re}(A\bar{B}) and the cross term produces the cosine — do it on the board once; it is three lines.) As f sweeps, the cosine cycles: the two phasors align, oppose, align again. The period in frequency is the value of \Delta f that advances the argument by 2\pi:
Board numbers for our room: the LoS-versus-west-wall pair has \Delta\ell = 1.31 m, giving a beat period near 230 MHz; LoS-versus-south-wall has \Delta\ell = 3.42 m, near 88 MHz. Our 80 MHz band therefore samples substantial fractions of several superposed beat cycles at once — five paths give four independent pairings with the LoS plus pairings among themselves — and the superposition of those cosines is the jagged, room-specific pattern we call frequency selectivity. Across the 256 subcarriers, the workbook measures a ripple of 10.5 dB between the strongest subcarrier (-16.6 dB) and the weakest (-27.1 dB).
There is a standard way to compress "how much structure does the channel have across frequency" into one number. Define the power-weighted mean delay and the RMS delay spread:
Every symbol is one we already own: a_k^2 is path power (the weights), \tau_k the delays; \tau_{\mathrm{rms}} is simply the standard deviation of arrival time, weighted by power. Delay spread and frequency structure are Fourier duals: a channel whose energy arrives spread over \tau_{\mathrm{rms}} seconds decorrelates in frequency over roughly the reciprocal. The convention this course uses is
(others put a 5 or a 50 in the denominator — the constant is conventional, the reciprocal scaling is physics). For our five paths, \tau_{\mathrm{rms}} = 3.8 ns, so B_c \approx 41 MHz: the ripple pattern decorrelates roughly twice across our 80 MHz band, which is exactly what fig2 shows.

Reproduce in Workbook §2.
Frequency selectivity is not noise; it is the room's geometry written into the spectrum, and it is the raw material of every CSI sensing feature the lab uses. A person moving in the room changes path lengths and amplitudes, the phasor sum shifts, and the ripple pattern deforms — that deformation is the signal.
Stop and convince yourself. If we moved the receiver so that all five paths had equal length, what would \tau_{\mathrm{rms}} be, what would B_c be, and what would the spectrum in fig2 look like? (Answer shape: zero spread, infinite coherence bandwidth, a perfectly flat line — a channel with no frequency structure to sense with. Geometrically, where would RX have to sit for even two of our paths to have equal length?)
Part 4 · A Body Crosses the Link (0:42–0:52)
Now put a person in the room. The production simulator represents each pedestrian as a lossy primitive with a body radius of 0.20 m — a deliberately narrow choice; the electromagnetic body-shadowing literature uses an absorbing screen of about 0.55 m width (Rampa et al. 2022 ↗), and the discrepancy is a known modelling decision, not an oversight. It is worth one board calculation to see what is at stake in that choice. The region around a ray that actually carries its energy is not a geometric line but the first Fresnel zone, an ellipsoid whose radius at distance d_1 from TX and d_2 from RX is
At the midpoint of our 10 m line of sight, with \lambda = 5.8 cm: r_1 = \sqrt{0.058 \times 5 \times 5 / 10} \approx 0.38 m. A 0.20 m body at mid-span does not even fill the first Fresnel zone; a 0.55 m screen more than does. The two models therefore disagree most exactly where a body blocks a path loosely — and agree best near the antennas, where the zone pinches to nothing. Keep the number 0.38 m in mind; it quietly underwrites the next figure.
When a body stands on a path, the path is attenuated: the lab's coupled chain — last week's trajectories driving moving scatterers through the ray tracer — measures about 29 dB of on-ray loss per person (in-silico). In one in-silico trace, a single body crossing took a link's amplitude from -60.5 dB to -90.1 dB and back.
Here is the question the toy model can answer that the single number cannot: how deep is the step in the total received amplitude? Not 29 dB in general — the step depends on how many paths the body blocks:
- Crossing A (mid-room) walks across the middle of the room and intersects the line-of-sight ray. The four wall reflections keep arriving, so the total amplitude falls by only 6.7 dB. Multipath fills the shadow in. The smaller shoulders around the main dip are the body clipping reflected paths on its way across.
- Crossing B (near the receiver) brushes 0.15 m past the receiver, through the neck where all five paths converge. Every path is attenuated at once, and the step is the full per-path loss: 29.0 dB, from -16.6 dB down to -45.6 dB.

Reproduce in Workbook §3.
Do the arithmetic that explains crossing A, because it is a two-line calculation that pays for itself all year. Before the crossing, all five phasors sum; during it, the LoS phasor is suppressed by 29 dB — effectively removed — and what remains is the sum of the four reflections, each around -29 to -30.5 dB. Four comparable phasors summing with their particular phases land, in this room, about 6.7 dB below the full five-path level. The person did not "attenuate the channel by 6.7 dB"; they removed one term from a sum, and the sum's new value is set by the surviving terms.
The lesson generalises: the depth of an occlusion step measures path multiplicity, not body opacity. The same person produces a shallow dent on a reflection-rich link and a cliff on a link they cross near an antenna. When you later see a simulated deployment where some links are exquisitely sensitive to a walking person and others barely react, this figure is the explanation — and it is also why the lab's -60.5 to -90.1 dB trace is a statement about one particular link geometry, not a universal constant.
Part 5 · Crowds as a Falling K (0:52–1:03)
One body is an occlusion event. A crowd is a statistical regime, and the simulator needs a principled way to represent it — this is where the statistical tradition from Part 1 gets hired. With N bodies in the room the channel splits into a deterministic part — the traced paths, occluded by whoever happens to stand on them — and a diffuse part — weak scattered energy off every body, arriving with effectively random phase. The Rician K factor is their power ratio:
We can derive how K should fall with N, and the derivation is short enough to do properly. Two mechanisms operate, and they compose cleanly in decibels.
Mechanism 1 — diffuse power accumulates. Each body scatters a weak contribution with a phase that is effectively random (its position is uncertain at the scale of \lambda = 5.8 cm — nobody stands still to a centimetre). For random-phase contributions, cross terms average to zero and powers add: N bodies give P_{\mathrm{diff}} \propto N. On a decibel scale that subtracts 10 \log_{10} N from K. Note this term is concave in N — steep from 1 to 2 bodies, nearly flat from 11 to 12.
Mechanism 2 — blocking eats the deterministic paths. Model each body as independently landing on any given path with some small probability p (its position is random; the path's Fresnel tube covers a small fraction of the room). If a blocking event multiplies the path's power by a factor \beta \ll 1 (our 29 dB gives \beta \approx 10^{-2.9}), then the expected power multiplier per path with N independent bodies is
To leading order — treating paths as independently attenuated and neglecting the re-weighting of cross terms in the coherent sum — deterministic power decays exponentially in N. And an exponential in linear units is a straight line in decibels: it subtracts c \cdot N dB from K, with c = -10 \log_{10}(1 - p(1-\beta)) a constant set by geometry.
Sum the two mechanisms: K_{\mathrm{dB}}(N) \approx K_0 - 10\log_{10} N - cN. For moderate N the linear term dominates the logarithmic one, so a straight line in dB is not a curve-fitting convenience — it is what independent random blockers produce. The workbook's Monte Carlo (300 random placements per crowd size, N = 1 to 12) measures the combined schedule in our toy room: K falls from 16.4 dB at one body to -3.2 dB at twelve, and the straight line fits well:
Notice what K crossing 0 dB means: below roughly nine bodies in this toy, the traced paths dominate; above, the random scatter does. The room has changed regime — from "a geometry with some noise on it" to "noise with some geometry left in it" — and any sensing feature built on the deterministic structure must degrade accordingly. The falling-K schedule is the simulator's quantitative statement of that regime change.

Reproduce in Workbook §4.
This is precisely the parameterisation the production simulator uses since its IP-119 revision: occupancy sets a channel-relative K through a linear-in-dB schedule, K_{\mathrm{dB}}(N) = k_0 - s\,N, and the per-link diffuse power is then derived from that link's own traced channel:
The toy's fitted slope (1.64 dB per person) is a property of one small room and one scattering constant — do not quote it as a physical truth. What the derivation earns you is the form. Why the diffuse power must be divided by the channel, rather than looked up in a table, is the next act — and it is the most consequential lesson of the week.
Stop and convince yourself. In the fitted schedule, which physical assumptions produce (a) the intercept k_0, (b) the linear slope, and (c) the small curvature the line misses at low N? If you doubled the room's area holding N fixed, which of the three would move, and in which direction?
Part 6 · The Setting That Silently Broke the Instrument (1:03–1:18)
The diffuse overlay needs a power level, and there are two ways to set it. The absolute way: pick a fixed power p_{d0} (with some decay exponent \gamma) from a table, the same for every link. The channel-relative way: derive it per link as |H_{\mathrm{det}}|^2 / K(N), so the overlay scales with the channel it perturbs. The production simulator originally shipped the absolute form. IP-119 replaced it, and the reason is arithmetic, not taste.
Links in a real scene spread their deterministic power over an enormous range — in the lab's full scenes, about 80 dB between the strongest and weakest. Sit with that number for a moment: 80 dB is a factor of one hundred million in power. It is not exotic — it is simply what you get when one receiver sits across open floor from the transmitter and another sits three plasterboard walls and a stairwell away. Any absolute diffuse level loud enough to matter on a strong link therefore buries the weak links entirely. The workbook reproduces the mechanism in miniature with two links (their deterministic powers only 3.8 dB apart — the toy compresses the range, the mechanism is identical) and a "table value" set 20 dB above link A's channel. The observed spectrum becomes overlay-dominated on both links, and the material sensitivity collapses: swapping the walls from concrete to metal changes the deterministic spectra by a relative L2 distance of 0.792 (link A) and 1.375 (link B), but under the absolute overlay the observed spectra differ by only 0.011 and 0.010. The channel-relative form, with the same K = 10 dB on both links, preserves 0.771 and 1.375.

Reproduce in Workbook §5.
In the production simulator the same failure was worse, because the swamping was total: with the overlay roughly 80 dB above the ray-traced channel, changing the scene's wall material produced byte-identical output tensors. The simulator ran, produced plausible CSI, and had silently stopped simulating its own scene. No crash, no warning — the only symptom was an absence: a sweep that should have shown drift showed exactly nothing. That is the failure mode to internalise: a simulator's most dangerous state is not "wrong", it is inert — decoupled from the inputs it claims to respond to, while its outputs still look right.
How was it caught? By a sweep that expected a difference and audited for it. A material-drift experiment moved wall materials between arms and diffed the output tensors — and the diff came back empty, byte for byte. An experiment designed with a stated expectation is an instrument check for free; an experiment run to "see what happens" would have seen nothing and reported nothing. Add this to your Week 2 toolkit next to seeds and discard rules: every sweep should contain at least one comparison whose sign you can predict in advance, precisely so its absence can raise an alarm.
After the reparameterisation, the scene matters again, and the numbers are worth quoting because they carry a thesis-level result. Concrete-versus-metal walls now produce a rel-L2 of 0.49 between output tensors. And the material-drift sweep — an in-silico experiment in which the environment's materials drift while a counting model tries to keep up — produces a clean ladder of count mean-absolute-errors: 0.559 with no calibration, 0.524 with reset-only handling (a 7 % recovery), 0.215 with calibration treated as a control loop (74 % recovery), and 0.096 for the oracle bound. That ladder is only possible to measure because the simulator responds to material drift at all. An inert simulator would have reported four identical numbers and called the question settled.
Interlude: the sibling discipline and the twin hype
Two neighbouring fields have lived versions of this story, and both are worth knowing by name.
The autonomous-driving community simulates lidar, radar and cameras inside virtual cities — CARLA, the open urban-driving simulator released in 2017, is the community's shared instrument, playing roughly the role Sionna plays for radio. They hit the same wall we did, at scale: perception models trained on beautiful synthetic sensor data degrade on real streets, and the degradation resists being patched by adding noise to the renders. What transferred instead, repeatedly, was variety — the domain-randomization line of work showed that training across many crudely varied scenes beats training on one lovingly tuned photorealistic one. Hold on to that; our own version of the finding arrives in Part 8 with numbers attached.
Meanwhile the industrial world sells the digital twin: a live simulated replica of a factory, a warehouse, a city — with platforms such as NVIDIA's Omniverse offering physically based rendering and, increasingly, radio propagation as a service. The renderings are gorgeous, and the phrase "physically accurate" appears in the marketing with striking confidence. This lecture equips you to ask the only question that matters of any twin: where is the validation bar? A twin that has never been diffed against measurements of the asset it twins is — in the exact sense of this act — an instrument of unknown inertness. Some of its knobs are surely connected to reality. Which ones? The demo does not say. After IP-119, you know the burden of proof runs the other way: a simulator's sensitivity to each of its own inputs is something you demonstrate, not something you assume because the output looks plausible.
Stop and convince yourself. The absolute overlay failed at ~80 dB above the channel and produced byte-identical tensors. Suppose it had been set only ~10 dB above the median link instead. Sketch what the material-drift sweep would have shown: which links drift, which are inert, and why this partial failure is harder to catch than the total one. (This is the exam question hiding inside the act.)
Part 7 · The Speed–Fidelity Trade (1:18–1:26)
The ray tracer runs on different backends, and the difference is a scientific variable. On Apple-silicon Metal the lab's benchmark runs about 12× faster than the CPU path — but in Float32, with path depth limited to ≤ 4 bounces, and with a documented defect: the Metal path solver loses deep-shadow paths, reporting heavily obstructed regions around 73 dB weaker than the reference LLVM backend. Connect this to Part 2: deep shadow is exactly where the surviving energy has bounced many times or diffracted — the highest-order, weakest paths, the first casualties of reduced depth and reduced precision. On top of that, the runner's default max_depth = 3 is one bounce lower than the four used by the WiSegRT dataset's reference tracer (Zhang et al. 2024 ↗) — recall from the Part 2 concept check how the path count, and hence the cost, explodes with depth; every tracer chooses a truncation, and the choice is part of the instrument's identity.
The operational rule that follows: the fast backend is fine for relative sweeps — comparing arm A to arm B under identical settings, where the missing deep-shadow energy subtracts out — and not acceptable for absolute deep-null claims, where the missing paths are the very quantity under study. Classifying your claim before choosing your backend is part of experiment design, exactly like choosing a seed policy or a discard rule was in Week 2. A 12× speedup that silently changes the answer is not a speedup; it is a different instrument.
The same cost-consciousness applies to the sensing radio you simulate. Systematic measurements (Cominelli et al. 2023 ↗) show that widening bandwidth from 20 to 160 MHz yields only marginal sensing gains, whereas the combined move to a 4-antenna 802.11ax receiver with finer spacing yields +30–40 % — a joint antenna-count-plus-geometry effect, not antennas alone. Part 3 explains why this had to be so: more bandwidth samples more of the same beat pattern (whose scale is set by B_c \approx 41 MHz — beyond a couple of coherence bandwidths, new subcarriers are largely redundant), while more antennas at new positions sample new phasor sums — genuinely independent looks at the room. When you spend simulation budget, spend it where the discriminability lives: spatial diversity first, bandwidth later. The platform's default of 5 GHz reflects the same logic — richer multipath structure per hertz than 2.4 GHz in indoor scenes.
Interlude: tracers as dataset factories
One more contemporary role for ray tracing deserves a named mention, because our simulator belongs to its lineage. Machine-learning research on wireless systems is starved of labelled channel data, and the community's answer has been to turn ray tracers into dataset factories: DeepMIMO generates parameterised MIMO channel datasets from ray-traced scenes for training and benchmarking; WiSegRT (Zhang et al. 2024 ↗) does it indoors with segmented, site-specific 3-D scenes. NVIDIA's Sionna sits at the centre of the surrounding 6G research ecosystem — an open-source, GPU-accelerated link-level toolkit whose ray tracer (Hoydis et al. 2023 ↗) is differentiable: gradients flow from the output channel back to material and geometry parameters, so a scene can be calibrated against measurements by gradient descent rather than by hand. Note the epistemic inversion hiding in that feature: differentiability lets measurements correct the scene — reality flowing into the simulator — which is exactly the direction of information flow the next act says is the only trustworthy one.
Part 8 · What Simulated Evidence Can and Cannot Say (1:26–1:35)
This is the epistemic spine of the week, so it gets its own act and its own bluntness.
A ray tracer solves an idealised propagation problem inside a scene you authored. However physical the solver, the simulation cannot confirm its own accuracy: the noise, the materials, and the crowd were all chosen by the same hands that will read the result. Simulated results are therefore structure and sensitivity evidence — "the counting signal survives a material swap", "the step depth depends on path multiplicity" — never accuracy claims about the real world.
The lab's simulated counting story has exactly one external anchor, and it is worth stating precisely. On real CSI from the public OPERAnet dataset, the mutual information between occupant count and the amplitude-variance feature is 0.174 nats (bootstrap CI [0.139, 0.208]) — inside the band the simulator had predicted, 0.15 to 0.31 nats. The same analysis shows counting rides on variance, not on level: the mean-amplitude feature carries only 0.04 nats. One number, produced by hardware the lab did not simulate, landing inside a pre-stated simulated band: that is what external validation looks like, and it is the only sentence in this lecture where simulation touches reality. Note the design detail that gives the sentence its force: the band was stated before the measurement was in hand. A band drawn afterwards around a known answer validates nothing.
The same validation exercise also documents where the simulator fails. A room-identification probe classifies which environment a CSI tensor came from with accuracy 0.99 on synthetic data but only 0.83 on real data — the simulator's scenes are too clean, so environment identity is over-coded. And the tempting fix does not work: injecting hardware-like impairments, whether at feature level or directly into the tensors, fails to close the gap (best 0.866, and only at an unrealistically aggressive gain-control setting; 0.974 at tensor level). The gap is not a missing noise knob — it is missing scene and material diversity, which is exactly what the WiSegRT ablation predicts: site-specific geometry detail, not stochastic impairment, dominates indoor propagation realism. And it is the same lesson the driving simulators learned as domain randomization: when your simulator disagrees with reality, the repair is usually more world, not more noise.
Two sentences you will never write in this course, stated once so they can be recognised and avoided. First: "the ray tracer solves Maxwell's equations, so its output is real" — a solver's physicality does not validate the scene you fed it; you spent Part 2 learning which parts of Maxwell the rays keep, and Parts 6 and 8 learning that the scene, not the solver, is where fidelity dies. Second: any sentence that quotes a simulation-derived accuracy as if hardware had produced it. The count-MAE ladder in Part 6 is an in-silico sensitivity result; the 0.174 nats is a measurement. Keeping that distinction audible in your prose is a graded skill.
Part 9 · Operating on the Platform, and What You Can Now Do (1:35–1:40)
The channel simulator follows the same operating contract you learned last week, so this section is short by design.
Inputs. The runner's published description declares a scene (geometry plus per-surface materials), emitter and receiver placements, and — for coupled runs — last week's trajectory file as an incoming input: each pedestrian becomes a moving lossy primitive of radius 0.20 m. Occupancy enters as the channel-relative K schedule with its two knobs, k_0 and the per-person slope.
Outputs. One typed table of per-link CSI over time (one row per link per time step, complex channel per subcarrier), plus the usual scalar-summary and figure artefacts. The role vocabulary is unchanged from Week 2 — trajectory in, per-window summaries and charts out — which is the whole point of the role vocabulary.
Operating checks. Before trusting a run: which backend produced it (fast-approximate or exact), which path depth, which K schedule — all three are recorded in the run's settings, and all three change what claims the output can support. The trace-back discipline is unchanged: any number you cite walks run → session → campaign → recorded page.
What you can now do. You can take a scene and produce, by hand, its first-order path list and the CSI those paths imply, and check any tracer's output against your own arithmetic. You can predict the shape of an occlusion event from link geometry before running anything. You can write down the K(N) schedule a crowd should follow and say which of its constants are physics and which are fit. You can look at a simulator configuration and identify whether a stochastic overlay is capable of decoupling the output from the scene — and design the one-comparison audit that would catch it. And you can sort any claim from this pipeline into one of three bins — derived, in-silico, measured — and defend the sorting. That last skill is the one the exam rewards most.
Key Results and Where to Reproduce Them
| Result | Where it comes from | Workbook |
|---|---|---|
| Five paths: LoS 10.00 m / -20.0 dB, wall images 11.31–13.42 m / -29.0 to -30.5 dB | Image method, Geometry A | §1, fig1_room_paths.png |
| 10.5 dB ripple across 256 subcarriers; delay spread 3.8 ns; coherence bandwidth ≈ 41 MHz | Five-path ray sum | §2, fig2_cfr_selectivity.png |
| Occlusion step: 6.7 dB mid-room vs 29.0 dB near the receiver, same 29 dB per-path loss | Toy crossings; per-path loss anchored to the lab's ~29 dB/person on-ray measurement | §3, fig3_occlusion_step.png |
| K falls 16.4 → -3.2 dB over N = 1..12; linear fit 14.8 - 1.64 N, R² = 0.950 | Monte Carlo, 300 placements per N | §4, fig4_k_vs_n.png |
| Absolute overlay crushes material rel-L2 (0.792 → 0.011; 1.375 → 0.010); channel-relative preserves it | Two-link toy | §5, fig5_overlay_vs_relative.png |
| Overlay ~80 dB above channel → byte-identical tensors under material drift; after IP-119: rel-L2 0.49, count-MAE ladder 0.559 / 0.524 / 0.215 / 0.096 | Lab in-silico sweeps (cited) | — |
| Metal backend ~12× faster, Float32, depth ≤ 4, deep-shadow paths ~73 dB low | Lab backend benchmark (cited) | — |
| I(count; amp-variance) = 0.174 nats, CI [0.139, 0.208], inside the predicted 0.15–0.31 band; mean-amp MI 0.04 | OPERAnet real-CSI validation (cited) | — |
Board-only arithmetic quoted in this lecture (wavelength 5.8 cm at 5.18 GHz; first Fresnel radius ≈ 0.38 m at the LoS midpoint; two-path beat periods c/\Delta\ell ≈ 88–230 MHz) is exact closed-form and is derivable in one line each from the constants in Workbook §0; it is not a workbook-printed scalar.
Exam-Style Questions
Q1 (derivation). Starting from the phasor representation of a single path, derive the two-path power expression |H(f)|^2 = a_1^2 + a_2^2 + 2 a_1 a_2 \cos(2\pi f \Delta\ell / c) and show that the interference pattern's period in frequency is c/\Delta\ell. For a room whose two dominant paths differ by 1.5 m, how many full beat cycles fit in an 80 MHz band? Model answer sketch: expand |A+B|^2 with A = a_1 e^{-j2\pi f \ell_1/c}, B = a_2 e^{-j2\pi f \ell_2/c}; the cross term 2\,\mathrm{Re}(A\bar B) yields the cosine of the phase difference 2\pi f \Delta\ell/c; period follows from setting the argument's increment to 2\pi. With \Delta\ell = 1.5 m, c/\Delta\ell \approx 200 MHz, so 80 MHz spans 0.4 of a cycle — a slow ripple, not a full fade-and-recover.
Q2 (occlusion reasoning). A link in a furnished room shows a 4 dB dip when a person crosses mid-room and a 27 dB dip when the same person passes close to the receiver. Using the path-multiplicity argument, explain both numbers, and state what you would predict for a third crossing close to the transmitter. Model answer sketch: mid-room, only the LoS (and briefly some reflections) is blocked; the surviving multipath sets the floor, hence a shallow dip — shallower than the toy's 6.7 dB, indicating this room is even richer in paths. Near RX all paths converge within a body radius, so blocking is total and the dip approaches the per-path loss. Near TX the same convergence argument applies by symmetry: predict a deep dip comparable to the near-RX case.
Q3 (K schedule). Derive the linear-in-dB decay of deterministic power under independent random blockers: show that expected power scales as (1 - p(1-\beta))^N and convert to decibels. Then explain which term of the full schedule K_{\mathrm{dB}}(N) = K_0 - 10\log_{10}N - cN dominates at small N and which at large N, and why the workbook's straight-line fit still achieves R^2 = 0.950. Model answer sketch: per body, a path keeps power with probability 1-p or is scaled by \beta with probability p; independence across N bodies gives the product form; 10\log_{10} of an exponential is linear in N. The -10\log_{10}N term is steep only for the first few bodies; from N ≈ 3 on, the linear term dominates, so a line fits the range 1–12 well despite the early curvature.
Q4 (the IP-119 failure). A colleague's channel simulator adds an absolute noise floor of fixed power to every link. Their material-drift sweep across 40 links reports "no significant effect of wall material." List three ways this result could be an instrument artefact rather than a finding, describe the audit that distinguishes the cases, and state the reparameterisation that removes the failure mode. Model answer sketch: (i) the floor may sit above most links' deterministic power, making them overlay-dominated and inert; (ii) partial inertness — only strong links respond — dilutes the effect below significance; (iii) tensors could even be bit-identical if swamping is total. Audit: per-link ratio of overlay to deterministic power, plus a predicted-sign comparison (e.g. concrete→metal must increase reflected energy) checked per link; diff output tensors across arms. Fix: channel-relative diffuse power P_{\mathrm{diff}} = |H_{\mathrm{det}}|^2/K(N), which pins the overlay a fixed ratio below each link's own channel.
Q5 (backend classification). For each claim, state whether the fast approximate backend (Float32, depth ≤ 4, deep-shadow paths lost) is acceptable, and defend the classification: (a) "calibration-as-control recovers 74 % of the oracle gap relative to no-calibration on the same scenes"; (b) "the deepest fade in the corridor NLOS region is -95 dB"; (c) "counting MAE is insensitive to wall material within each arm." Model answer sketch: (a) acceptable — a relative comparison under identical settings; the missing deep-shadow energy affects both arms alike; (b) not acceptable — an absolute deep-null claim in exactly the regime where the backend is ~73 dB off; (c) acceptable in form (relative), but flag that material effects in deep shadow may be under-represented, so a null result is weaker evidence than a positive one.
Q6 (epistemics). The lecture claims the lab's simulated counting story has "exactly one external anchor." State what that anchor is, what makes it external, and why the pre-registration of the 0.15–0.31 band matters. Then explain why the room-ID result (0.99 synthetic vs 0.83 real) is evidence about the simulator rather than about rooms. Model answer sketch: the anchor is the OPERAnet measurement I(count; amplitude-variance) = 0.174 nats, CI [0.139, 0.208] — external because the hardware, environment and subjects were not authored by the lab; the band's pre-statement excludes post-hoc fitting. The room-ID gap measures the simulator's over-coding of environment identity: synthetic scenes are separable in ways real ones are not, which is a statement about missing scene diversity in the instrument, not about the discriminability of physical rooms.
Looking Ahead
Week 4 steps back from physics to pattern: the notebook as a simulator. The walk-notebook that generated last week's trajectories is itself a parameterised, papermill-executed notebook obeying the same run/artefact/manifest contract as the heavyweight engines — which is what made this week's coupled chain (notebook → trajectories → moving scatterers → ray-traced CSI) composable in the first place. We will learn when a notebook is the right simulator class, and how interactive replays become citable artefacts.
Further Reading
- the channel simulator (sionna-csi-runner) — the curated note on the ray-traced channel program: its contract, the scene/emitters/scatterers inputs, the per-link CSI output, and the K-schedule parameters. Read Contract / Inputs / Outputs for operation; read it after this lecture and the knobs will have meanings.
- Hoydis et al. 2023 ↗ — the differentiable ray tracer the runner wraps; the source for the scene-to-paths-to-channel pipeline, and for the gradient path that lets measurements calibrate a scene.
- Cominelli et al. 2023 ↗ — the systematic measurement study behind the antennas-over-bandwidth design lever; read §Part 7 of this lecture first, then their sensitivity tables.
- Zhang et al. 2024 ↗ — the site-specific indoor ray-tracing dataset whose ablation shows geometry detail, not noise, drives realism; also the reference for path-depth choices, and the dataset-factory tradition our runner belongs to.
- Rampa et al. 2022 ↗ — the electromagnetic body-shadowing models against which the runner's 0.20 m body radius is a known narrow choice; the Fresnel-zone board calculation in Part 4 is the fastest way into their screen model.
- T. Whitted, "An improved illumination model for shaded display," Communications of the ACM, 1980 — the recursive ray tracer; not in the vault, but the historical root of everything in Part 1, and still a model of a short paper that changed two fields.
- For the statistical channel-model tradition (Rayleigh/Rician fading, delay-spread and coherence-bandwidth formalism), any standard wireless-communications text serves; the derivations in Parts 3 and 5 are self-contained versions of what those chapters do at length.