Wi-Fi CSI fall detection: low-frequency features, false alarms and evidence limits

By Wu Jun · Updated 2026-10-29 · 7 min read

Fall detection is a valuable Wi-Fi sensing application and one of the easiest places to turn "large signal change" into the unsupported claim "reliable fall recognition." WiFall and WiCare demonstrate that CSI can capture fall-related wireless changes [1] [2], but their hardware, sampling rates, rooms and subjects do not transfer automatically to a home router producing about 12.64 independent snapshots/s.

This article defines an honest baseline: use slow motion envelopes, pre-event context and the recovery period to detect suspected fall-like events. It does not claim medical accuracy, and it does not treat eight chain records as a 95 Hz micro-Doppler timeline.

1. Establish the capability boundary first

Task Current GL-MT6000 route Explanation
Detect gross motion Yes amplitude/phase changes across time and subcarriers
Detect a sudden large event Researchable sitting, dropping a bag and a door slam also create large changes
Extract event-level envelopes Yes independent snapshot rate is about 12.64 Hz
Recover full impact micro-Doppler Do not claim ±6.32 Hz unambiguous Doppler at 12.64 Hz snapshots
Medical-grade fall recognition No requires clinical validation, risk management and regulated equipment
Promise automatic emergency response Not from a prototype still needs human review and a reliable alert path

Our 10-minute capture demonstrates stable 256-subcarrier CSI, with 57,293 chain records yielding 7,609 grouped measurements and about 12.64 independent snapshots/s [3] [4]. It has no fall-event labels, so it cannot be used to compute fall accuracy.

2. Why 95.5 records/s is not the sampling rate

One CSI measurement can contain up to eight tx/rx chain records at almost the same instant. The chains provide spatial and frequency diversity; they are not consecutive time samples. Concatenating all 57,293 records as a 95.5 Hz phase series creates two errors:

  1. the Nyquist range is expanded artificially;
  2. simultaneous link differences are misread as time evolution.

The correct sequence is:

  1. close measurements on chain_info bit 15;
  2. select one valid chain per group or construct a stable multi-chain feature;
  3. sort by file_ts and resample;
  4. report independent snapshot rate, maximum gap and usable-group ratio.

A 12.64 Hz sequence can describe body-motion envelopes lasting hundreds of milliseconds to seconds. It cannot recover the roughly 33 Hz micro-Doppler of 1 m/s motion at 5 GHz. Algorithms must respect that limit rather than changing a FS=95 constant.

3. Interpretable event features

A fall is not one isolated frame. It is an interval:

before: walking or standing
event:  short, large motion change
after:  sitting may keep adjusting; a fall may be followed by low motion

Features therefore need context and recovery, not just one variance peak. The code below assumes H is an amplitude matrix with one selected chain per measurement, t contains timestamps and event_t is a candidate:

import numpy as np

def resample_rows(H, t, fs=20.0):
    t = np.asarray(t, dtype=float)
    order = np.argsort(t)
    t, H = t[order], np.asarray(H)[order]
    tu = np.arange(t[0], t[-1], 1.0 / fs)
    Hu = np.column_stack([
        np.interp(tu, t, H[:, i]) for i in range(H.shape[1])
    ])
    return Hu, tu

def event_features(H, t, event_t, fs=20.0):
    H, t = resample_rows(H, t, fs)
    motion = np.abs(np.diff(H, axis=0)).mean(axis=1)
    tm = t[1:]

    pre = motion[(tm >= event_t - 8) & (tm < event_t - 2)]
    event = motion[(tm >= event_t - 1) & (tm <= event_t + 1.5)]
    post = motion[(tm > event_t + 1.5) & (tm <= event_t + 5)]
    if min(len(pre), len(event), len(post)) < 10:
        return None

    baseline = float(np.median(pre))
    peak = float(np.max(event))
    quiet = float(np.mean(post))

    # Low-frequency event-band share, not micro-Doppler.
    x = event - event.mean()
    power = np.abs(np.fft.rfft(x * np.hanning(len(x)))) ** 2
    freqs = np.fft.rfftfreq(len(x), 1.0 / fs)
    mask = (freqs >= 0.5) & (freqs <= 4.0)

    return {
        "pre_motion": baseline,
        "event_peak": peak,
        "peak_ratio": peak / (baseline + 1e-9),
        "recovery_ratio": quiet / (peak + 1e-9),
        "low_band_ratio": float(power[mask].sum() / (power.sum() + 1e-12)),
    }

low_band_ratio is the share of 0.5-4 Hz motion energy. It is not Doppler spread. Real Doppler requires a sufficient independent snapshot rate, a known geometry and reference velocities/events.

4. From features to a state machine

Start with an interpretable state machine rather than an opaque deep model:

  1. sustained walking/standing exists 2-8 seconds before the event;
  2. event peak is significantly above that session's still baseline;
  3. the rise is abrupt but allows a human movement lasting 0.4-1.5 seconds;
  4. motion 1.5-5 seconds after the event falls below the peak, forming a recovery;
  5. trigger a 30-second refractory period to avoid duplicate alerts;
  6. emit suspected_fall_event, evidence fields and ten seconds of raw data on each side;
  7. require human review or a separate controlled rule before alerting.

Thresholds must come from labelled data:

limits = {
    "min_peak_ratio": 0,      # calibrate from negatives
    "max_recovery_ratio": 1,  # calibrate from positives/negatives
    "min_low_band_ratio": 0,
}

The 0/1 values are placeholders, not deployment settings. Use empty-room, sitting, bag-drop, door-slam, pet and simulated-fall data to choose thresholds, then report false positives and misses.

5. Capture protocol

Safety and human factors come first. Use a padded mat and simulated falls; never ask a participant to perform a dangerous real fall.

5.1 Minimum dataset

Class Suggested events Purpose
Simulated fall on a mat 30-50 per subject positive events with onset and recovery labels
Sit down / stand up 30-50 the most common look-alike negative
Drop bag / bend over 30-50 large motion that is not a fall
Normal walking 30-50 pre-event context
Door slam / appliance impulse 20-30 abrupt negative without a body trajectory
Empty room / fan at least 2 hours environmental cycles and false alarms

5.2 Scene variables

5.3 Label example

session,subject,event_t,class,position,recovered_s,reviewed
s01,u01,2026-11-01T10:03:22Z,simulated_fall,p1,3.8,true
s01,u01,2026-11-01T10:06:10Z,sit,p1,,true

Keep the raw CSI, timestamps and quality statistics. Processed features alone cannot prove that sampling and grouping were correct.

6. Evaluation metrics

Falls are rare events, so accuracy alone is misleading. Report:

If a system produces twenty alerts per day, 95% offline accuracy will not make it usable. The operational burden of human review matters as much as the classifier score.

7. Common failure modes

Symptom Likely cause Response
Sitting is classified as a fall both have large motion and similar recovery use pre-event context, recovery and more negatives
Every door slam triggers abrupt energy has no human context require multi-link consistency, duration and preceding activity
Changing room breaks the model multipath and range changed recalibrate and validate per environment
One event creates many alerts overlapping windows event aggregation and a refractory period
Offline results look unusually good overlapping windows leak across split split by subject and date
Sampling looks like 95 Hz simultaneous chain records were concatenated group on bit 15 and select one chain
Claims to detect every fall no real or hard-negative validation say "suspected event" and state failure conditions

8. Evidence and compliance boundary

WiFall and WiCare show that the research direction is credible [1] [2], and the CSI sensing survey provides the wider feature context [5]. None of those papers replaces validation on your hardware, rooms and population.

Product wording should be:

9. Data needed next

The current public capture can test motion envelopes and the parser, but it cannot establish fall accuracy. The next capture should include:

  1. at least five subjects, two rooms and three positions;
  2. simulated falls on a mat plus sitting, bag-drop, door-slam and pet negatives;
  3. synchronised video or human event marks as ground truth, with consent and restricted access;
  4. raw CSI, firmware version, snapshot rate and a quality report for every session;
  5. an event-level rule baseline first, then comparison with a learned model.

10. Conclusion

Related: respiration detection · CSI radar limits · Home Assistant integration

References and data sources

Every external claim carries a source and an evidence grade (grading scheme). Grade E marks first-party, reproducible measurements from this project.

  1. Grade B · peer-reviewed WiFall: Device-free fall detection by wireless networks
    C. Han, K. R. R. Wu, Y. Wang · IEEE INFOCOM 2014 · 2014
    doi:10.1109/infocom.2014.6847948 · citations 201 · verified: CrossRef API, 2026-10-11 · A pioneering work on CSI-based fall detection (201 citations).
  2. Grade B · peer-reviewed WiCare: Accidental Fall Detection for Elderly Care Using Passive Wi-Fi Sensing
    K. Rishi, et al. · IEEE ICSC 2023 · 2023
    doi:10.1109/icsc60394.2023.10441553 · citations 2 · verified: CrossRef API, 2026-10-11 · Passive Wi-Fi fall detection for elderly care (recent, few citations — directional evidence only).
  3. Grade E · first-party measurement This project's 10-minute raw capture (57,293 records / 600.0 s, SHA-256 00373f83…95e2)
    Router CSI Lab · 2026
    okwujun.pw/en/datasets/ · verified: Reassembled chunks verified byte-identical (2026-10-11) · The local raw master has SHA-256 00373f83…95e2; the public de-identified derivative has SHA-256 527466ce…a440. They must not be confused.
  4. Grade E · first-party measurement Router CSI Toolkit — capture/analysis/watchdog scripts (MIT, public repository)
    Router CSI Lab · 2026
    github.com/jjjwu/router-csi-toolkit · verified: GitHub API verified the public repository, capture-quality preflight, successful CI and the v0.1.3 release on 2026-11-02; the archive SHA-256 is 59f144c0…adea7 · The public repository includes a dependency-free capture preflight; the browser checker uses the same container definition and evidence boundaries.
  5. Grade A · standard/review WiFi Sensing with Channel State Information: A Survey
    W. Ma, W. Zhou, X. Wang · ACM Computing Surveys · 2019
    doi:10.1145/3310194 · citations 857 · verified: CrossRef API, 2026-10-11 · The field's most-cited CSI sensing survey (857 citations, verified via CrossRef).