Wall-aware attenuation
Each slab carries a density in userData. A ray pays
density × 110 dB/m × (thickness ÷ cos θ), so concrete casts a deep shadow while
drywall barely bends the field.
WiFo is a 3D mesh planner that also listens. Drag access points around a floor plan and watch ray-traced coverage rebuild in real time — then let the same channel reveal a fall, a long stillness, or a restless night.
Live simulation
Every colour on the floor is computed from the same geometry the walls were built from, so moving a wall or an access point changes the answer immediately. Press H in the demo to overlay the debug helpers — wall AABBs, probe rays, camera frustum and the body axes the model integrates over — and see exactly what the solver is looking at.
Each slab carries a density in userData. A ray pays
density × 110 dB/m × (thickness ÷ cos θ), so concrete casts a deep shadow while
drywall barely bends the field.
Rather than testing boxes inside a shader, the propagation model runs on the CPU into a
small DataTexture — one colour channel per mesh node — so the fragment
shader only ever samples and animates.
Concentric sine waves radiate from every node and are modulated by the interpolated strength at each pixel: bright and warm near a router, cold and silent in a dead zone.
The demo is honest about its layers: the simulation knows the ground truth so it can show it to you, while the detectors only ever see the radio channel.
A 64 × 48 grid of points is raycast from each node's antenna. Free-space loss follows FSPL = 20·log₁₀(d), and every wall crossed adds its absorption term. The result is compressed to 0–1 and blurred by one cell to imitate Fresnel diffraction.
Coverage at any point is whichever node is strongest there — the same rule a real client uses when it roams. Only the node you drag is re-traced, so a drag costs one field, not three.
Eight receivers associate with their best node. Each link's RSSI is its static baseline + body absorption + receiver noise, where a body is modelled as a foot-to-head axis that tilts to the floor during a fall.
Twice a second the detector solves the joint standing/lying hypothesis over all residents against the measured RSSIs, then applies a marginal test per person — "does the channel gain by insisting this one is lying, whoever else is doing what?". Sustained margins raise a fall alert in about 1.8 seconds.
This is a research and demonstration sandbox, not a medical device. Residents are simulated and the channel model is deliberately simplified. The point is to make the physics and the inference legible — enough to reason about placement, coverage and failure modes before anyone trusts a real deployment.
Falls are the leading cause of injury-related hospitalisation in older adults, and the window between a fall and help matters enormously. Wi-Fi sensing works through walls, in the dark, and needs no device on the person.
A posture change moves signal along the body axis. The forward model predicts that footprint per resident and matches it against what the channel actually did.
When a resident's local links stay flat far longer than a normal pause, an amber "no movement" notice is raised — the classic quiet emergency.
Sustained motion around one person — pacing, night-time wandering — surfaces as an "unusual activity" state rather than being averaged away.