Radar fall detection for senior living

A naive fall detector catches every fall in this demo. It also raised seven false alarms in the same night shift, and a muted panel detects nothing.

Sensitivity was never the bottleneck. Vigil is the intelligence layer between a radar sensor and the nurse-call system: a five-stage cascade that returns ALERT, SUPPRESS, or ROUTE TO HUMAN and logs the feature value behind every one of those decisions. What you can watch here is a runnable demo over a synthetic radar feature stream, not a deployment.

0 vs 7

false alarms on the demo shift

Engine against the naive baseline, one seeded synthetic shift

1.0 vs 0.167

confounder specificity

Fixed 360-event synthetic golden set, not production accuracy

1 of 2

real falls alerted

The second, a multi-occupancy space, was routed to a staff check

The walkthrough replays one seeded synthetic night shift in a memory-care wing. No live radar hardware, no real facility, no residents, no PHI.

A system nobody trusts gets muted, and a muted system detects nothing.

Alarm fatigue is the leading reason fall-detection deployments fail. A Director of Nursing choosing between an unmonitored bathroom and a panel that fires on the ceiling fan is choosing between two ways of missing a fall with injury, which averages about $30,000.

The bathroom is the gap

It is the highest-risk space and the one place a camera is not a usable option. Nineteen US states have enacted laws governing cameras in nursing-home rooms, generally permitting them in a resident's room with consent, while bathrooms remain excluded in practice on privacy grounds.

The long lie is the injury

Half of elderly people who lie on the floor for over an hour die within six months. A fall found on the 4 AM round is a different clinical event from one dispatched while the resident is still on the floor.

The incumbent fails on refusal

Off-the-shelf motion sensors and bed mats run at 5 to 15 false alarms per room per day. What they cannot do is tell a hard sit onto a toilet from a fall, so night staff mute the panel and the system detects nothing at all.

Five cascade stages, then dispatch and evidence.

Vigil runs its cascade over a per-frame radar feature stream and hands the result to a policy gate that sits outside every model. Models advise, code decides: the deterministic narrative conditions have to hold first, and only then is the classifier's confidence consulted, against a fixed floor the model does not set. A model can never manufacture an alert on its own.

01 / FEATURE EXTRACTION

Kinematics, impact, breathing, target class

From the synthetic radar feature stream the engine derives descent kinematics (start height, peak velocity, final centroid height), a broadband-energy impact marker, post-impact motion residual, breathing-band energy, and a radar cross-section and aspect-ratio proxy for target class. No image and no video exist at any point in the pipeline.

02 / PER-ROOM CLUTTER MAP

The fan's voxel is known and masked

Each space carries its own map. What this build consumes are the fixed-location Doppler masks for ceiling-fan and window-AC entries, masked at their known voxel. Per-room seat and bed heights sit in the room file as calibration data but are not read by any V1 code path, which is a fair picture of how much of per-room calibration is still integration work.

03 / DUAL-STREAM CLASSIFIER

Four features, one calibrated score

A learned logistic model reads exactly four features (floor proximity, impact energy, descent drop, and radar cross-section) and fuses them into a calibrated P(fall). The fusion step is numpy you can read end to end. The production swap to a CNN, PointNet and attention fusion is documented, and the feature semantics do not change under it.

04 / TEMPORAL NARRATIVE VERIFIER

Four conditions in one 8-second window

Deterministic code requires all four to hold inside the same 8-second window, with standing established in its opening fifth: a median centroid above 1.2 m, a descent of more than 0.6 m together with a peak velocity above 1.8 m/s, a sustained broadband impact (a 3-frame rolling mean above 0.50, so a single-frame spike cannot satisfy it), and a centroid that actually reaches floor level below 0.30 m.

05 / DETERMINISTIC POLICY GATE

Fixed thresholds, three verdicts

The decision path outside every model is plain code with fixed, documented thresholds: floor level below 0.30 m, a breathing floor of 0.20, and a fall-confidence floor of 0.70. The gate emits ALERT, SUPPRESS or ROUTE TO HUMAN and arms the escalation ladder (CNA at 0 s, Charge Nurse at 90 s, DON at 180 s). A separate hardcoded confidence threshold in the gate sends a multi-occupancy event to a human check.

06 / DISPATCH AND EVIDENCE

Two nurse-call shapes and a filable record

The adapter emits a legacy Rauland dry-contact relay signal (opto-isolated, UL 1069/2560 isolation maintained) and a modern Ascom or Austco MQTT and REST JSON payload. It is a logged adapter stub, not connected hardware. The shift audit JSON covers every alert, route and suppression with its deciding feature; a clinical incident note is composed separately from that structured evidence.

One seeded night shift, twelve events, every decision on the record.

The demo replays a memory-care wing from 02:00 to 06:00 across twelve monitored spaces, scoring the cascade beside a naive incumbent baseline that treats any fast or low motion as a fall. All twelve events are synthetic, labeled, physically grounded scenarios on a fixed seed, and the twelve tiles are twelve events, two of which revisit a space already on the grid, so ten distinct spaces in all. The dashboard grid and the Decision Ledger label those spaces Cam 1 through Cam 12; the underlying room ids appear only in the incident detail, the dispatch payload and the audit record.

Vigil live floor view during the demo shift. The Cam 3 Bathroom tile is outlined in red and labeled Fall Long-Lie 99 percent, the Cam 2 tile reads Low Confidence to Human Check, and the Decision Ledger on the right lists suppressions for Cam 5 and Cam 1 with the feature value behind each.
ALERT. Cam 3 (Bathroom) confirms the full fall narrative at floor level with breathing present and no recovery, so the engine alerts at 0.99 confidence on a long-lie. Around it the ledger is already refusing: Cam 1 on a masked ceiling-fan voxel, Cam 5 on a velocity burst that settled at 0.46 m seat height with no hard impact.
Vigil incident detail panel for Cam 3 Bathroom showing the nurse-call badge text for Room 118B, an impact to alert figure of 7 seconds, the Ascom and Austco MQTT and Rauland dry-contact transports, the CNA, Charge Nurse and DON escalation ladder, the JSON dispatch payload with 0.99 confidence and 4.8 seconds of floor time, and the clinical incident note.
The record behind the alert. Open any tile or ledger row and the detail panel shows what was dispatched: the nurse-call badge text for Room 118B Bathroom in the audit record, the JSON payload carrying 0.99 confidence and 4.8 s of floor time, both transports, the armed escalation ladder, and a clinical incident note composed from the structured audit evidence for a QAPI binder. The panel's 7 s impact-to-alert figure is a displayed value the gate computes from its hold timer plus a constant, so read it as what the app reports, not as benchmarked system speed.

Cam 2: a real fall the engine refused to assert

Cam 2 is a real fall in the ground truth, and P(fall) reaches 0.99. The space holds two targets, and single-person tracking is outside V1 coverage, so the gate returns ROUTE TO HUMAN at low confidence and does not assert a fall. The naive baseline auto-fires on it. Two real falls occurred in this shift: one alerted, one routed to a staff check. In the fixed benchmark, 40 of 40 multi-occupancy falls route the same way, with no over-alerts and none missed.

The completed Vigil Decision Ledger listing suppressions for Cam 12 through Cam 5, each with a reason such as downward motion returning to standing, ambient motion with no descent to floor, a velocity burst settling at 0.44 m seat height, a window and AC zone row reading sub-threshold confidence with no floor descent, and a non-human target at radar cross-section 0.27.
SUPPRESS, ten times, with reasons. Suppressions are evidence too, because what a state survey asks about is why nothing happened. Every row here names the reason, and most name the deciding feature value: the bend that returned to standing (Cam 12 and Cam 7), the hard sit that settled at 0.44 m in a bathroom (Cam 10), the therapy-dog visit at a radar cross-section of 0.27 against the 0.55 human minimum (Cam 6).
Vigil Shift Results modal showing a projected 0.0 false alarms per room per day for the engine against 25 for the incumbent on the fixed synthetic golden set, 0 versus 7 false alarms on this shift, 1 of 2 real falls caught, 1 routed to a human at low confidence, and 100 percent confounder specificity over 360 labeled events.
The scoreboard, with its scope attached. Engine: 1 alert, 1 routed, 10 suppressed, 0 false alarms. Naive baseline: 9 alerts, 7 of them false. The 0.0 and 25.0 per room per day are projections from a fixed 360-event synthetic golden set at an assumed 30 benign triggers per room per day. A real pilot targets under 2 false alarms per room per day after shadow-mode calibration.

What the demo proves, and where it stops.

The cascade and the naive baseline both score 1.0 fall sensitivity on a fixed set of 360 labeled, noisy synthetic events. What separates them is confounder specificity: 1.0 for the cascade against the baseline's 0.167. The fusion weights were fit on the demo's own scenario generators, the same generators that produce that golden set, which is the first objection a technical reader should raise. The separation is still earned rather than planted: each confounder is generated to overlap a real fall on individual features, which is exactly why the naive detector is genuinely fooled.

QuestionWhat Vigil does in this demoWhat remains outside the demo
Confounder rejectionRuns the five-stage cascade and logs the deciding feature value for each of the ten suppressions on the shift.Tuning against a facility's own clutter, gait patterns and furniture, which is per-room calibration work.
Multi-occupancy spacesRoutes to a human check at low confidence rather than asserting a fall, 40 of 40 in the fixed benchmark.Single-person tracking and multi-occupancy disambiguation, deferred to a later version.
Survey and QAPI evidenceExports a shift audit JSON with every alert, route and suppression, its deciding feature values and its policy reason.Any write into an EHR or MDS record, and any interactive query interface over the audit.
Nurse-call dispatchEmits both a Rauland dry-contact signal and an Ascom or Austco MQTT and REST payload, logged.Connected nurse-call hardware, live commissioning, and certification of the deployed path.

What this demo does NOT do

It does not use live radar hardware, real 60 GHz chirps, or a deployed sensor: the RF front end is a synthetic feature stream. The nurse-call path is a logged adapter stub with nothing attached. There is no EHR or MDS write of any kind, and no interactive natural-language query over the audit. Predictive gait analytics, Wi-Fi sensing for common areas, multi-occupancy disambiguation and the edge port to embedded silicon are all future work. The memory-care wing, its spaces, its events and the therapy dog are synthetic; there are no residents, no customer, no pilot and no PHI. Vigil is not a medical device and carries no FDA clearance, no 510(k), no clinical validation and no CMS or UL certification of itself; the adapter maintains UL 1069/2560 isolation on the dispatch path. Nothing here replaces staff, clinical judgment or a physician's assessment.

Questions clinical and operations leaders ask before trusting a detection layer.

How many false alarms will my night staff actually get?

Nobody can answer that honestly from a demo, so judge the assumption behind the number. The 0.0 per room per day figure assumes 30 benign motion triggers per room per day, which is above the 5 to 15 per room per day the literature reports for incumbent sensors, and it comes off a fixed synthetic golden set rather than off a real ward. A real pilot targets under 2 false alarms per room per day after shadow-mode calibration, and that is the number to hold us to.

Can you actually put this in a resident's bathroom?

Radar features carry no image and no video at any point, so there is nothing recognizable to capture, and that is what makes the space reachable. 19 US states have enacted camera laws covering nursing-home rooms, which generally permit a camera in a resident's room with consent and leave bathrooms excluded in practice on privacy grounds. Any deployment still needs your own privacy review and resident consent process.

Did it catch every fall in the shift?

No. Two real falls occurred on the demo shift. The engine alerted on the Cam 3 bathroom long-lie at 0.99 confidence and routed the Cam 2 event to a staff check at low confidence, because that space held two targets and single-person tracking is outside V1 coverage. A confident fall assertion on a two-target scene is exactly the error that teaches night staff to stop believing the panel, so the ambiguity goes to a person instead.

What do I show a surveyor who asks why no alert was raised?

The exported shift audit JSON carries every alert, route and suppression with its deciding feature values and policy reason, under top-level keys engine, facility, shift, metrics, events and _note. The clinical incident note is composed separately from that structured evidence for a QAPI binder or CMS F689 file and is not inside the export. One detail worth knowing before you hand it to anyone: the export stamps its internal build name on the engine field, not the product name.

Is an AI model deciding whether to call my nurses?

No. A model can never manufacture an alert on its own. The deterministic narrative conditions, standing, descent, sustained impact and floor level, must all hold inside the same 8-second window before the classifier's P(fall) is consulted at all, and it is then checked against a fixed 0.70 floor the model does not set. A lower confidence can still turn an alert into a suppression, so the model constrains the decision downward and never upward.

Do we have to replace our nurse-call system to use this?

The dispatch adapter emits both shapes, so it can sit in front of either generation of nurse-call system: a legacy Rauland dry-contact relay signal, opto-isolated with UL 1069/2560 isolation maintained, and a modern Ascom or Austco MQTT and REST JSON payload. In this demo it is a logged adapter stub with no nurse-call hardware attached. Vigil is the layer between the sensor and the system you already run, not a replacement for either.

Technical Research

The research behind this demo — the architecture, the verification design, and the enterprise blueprint.

Social

Also Published On

Start with the spaces you cannot monitor today.

We do not sell sensors. We build the intelligence layer that makes sensors useful, and we built it for senior-living operators and clinical technology teams who already know that catching the fall is the easy half.

With 63% of facilities reporting short staffing, a panel that cries wolf is the first thing a night shift turns off. A useful first conversation covers your floor plan's fixed clutter, the rooms that go unwatched now, and what your last state survey actually asked you to produce. We can work through the calibration and the shadow-mode plan alongside your clinical team.

Detection-layer design

  • ✓ Cascade and feature design
  • ✓ Per-room clutter calibration
  • ✓ Deterministic gate thresholds
  • ✓ Confounder set definition

Evidence and integration

  • ✓ Shift audit schema
  • ✓ Nurse-call adapter mapping
  • ✓ Escalation ladder design
  • ✓ Shadow-mode calibration plan