Skip to content

Separate synthetic radar breathing and heartbeat cues

Recover simulated breathing and heartbeat peaks while rejecting a gross-motion window and retaining the medical boundary.

Radio Remi: predict first, inspect every intermediate value, and keep the claim inside the evidence., your practice guide

Radio Remi: predict first, inspect every intermediate value, and keep the claim inside the evidence.
Predict the reading, then compare it with the measurement.

Python 3 in your browser (JupyterLite)

Python · no install

Recover simulated breathing and heartbeat peaks while rejecting a gross-motion window and retaining the medical boundary.

Tier 2 · Web · paste-in setup · No account

Version tested: Python 3.12.7 / Pyodide 0.27.6 in JupyterLite 0.6.4; captureSource playwright:jupyterlite. Date: 2026-09-22.

Open the notebook in your browser and run each Python cell; no install or account is needed.

Three ways to run: use JupyterLite here with no install; run main.py locally from the downloadable lab folder; or open the same notebook in Google Colab.

Open in your browser (new tab)

Steps

Screens captured against JupyterLite Python 3.12.7 / Pyodide 0.27.6; Chromium 148.0.7778.96 on 2026-09-22; the tool may have moved on — the text steps are the contract.

  1. 1 Step 1

    Do
    Predict the stronger peak before running the fixture.
    You will see
    The seed, sampling rate, two known frequencies, and synthetic status print.
    Why it matters
    These bands are useful teaching ranges, not universal diagnostic limits.
    JupyterLite presence-vital-sign-sensing step 1: its executed cell and printed evidence.
    Step 1 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  2. 2 Step 2

    Do
    Generate a chest displacement and monostatic phase trace.
    You will see
    The model equation, sample count, first displacement, and phase print.
    Why it matters
    Shorter wavelengths create more phase change for the same motion, but wrapping, noise, multipath, and poor target selection still matter.
    JupyterLite presence-vital-sign-sensing step 2: its executed cell and printed evidence.
    Step 2 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  3. 3 Step 3

    Do
    Compare the breathing and heartbeat components.
    You will see
    The component amplitudes and combined displacement range print.
    Why it matters
    Large motion spreads energy across frequencies and can shift phase by many cycles.
    JupyterLite presence-vital-sign-sensing step 3: its executed cell and printed evidence.
    Step 3 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  4. 4 Step 4

    Do
    Search only the stated breathing and heartbeat bands.
    You will see
    Peak frequencies, cycles per minute, and strength ratio print.
    Why it matters
    A band-pass filter can separate slow breathing energy from faster heartbeat energy in a clean simulated trace.
    JupyterLite presence-vital-sign-sensing step 4: its executed cell and printed evidence.
    Step 4 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  5. 5 Step 5

    Do
    Inject a large movement and reject its window.
    You will see
    The contaminated sample count and peak displacement print with an abstention.
    Why it matters
    A robust pipeline first detects motion or low signal quality, then abstains before calculating rates.
    JupyterLite presence-vital-sign-sensing step 5: its executed cell and printed evidence.
    Step 5 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  6. 6 Step 6

    Do
    Score the clean fixture and report accepted-window coverage.
    You will see
    Rate errors and a 75 percent accepted-window fraction print.
    Why it matters
    It should retain the rejected window and reason instead of deleting inconvenient evidence.
    JupyterLite presence-vital-sign-sensing step 6: its executed cell and printed evidence.
    Step 6 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)
  7. 7 Step 7

    Do
    Write a bounded result card.
    You will see
    The card states simulated rates, rejection, missing measurements, and no medical claim.
    Why it matters
    The lab in this chapter teaches phase and filtering with synthetic signals only.
    JupyterLite presence-vital-sign-sensing step 7: its executed cell and printed evidence.
    Step 7 · Python 3 in your browser (JupyterLite); numbered callout added to a real capture. Enlarge screenshot (new tab)

Chapter checks

These questions refer to the chapter’s examples. Use the return links to review their answers.

  1. Why should a large-motion window be rejected before estimating breathing or heart rate?

    Return to the chapter’s knowledge check
  2. What does a 0.25 Hz peak prove here?

    Return to the chapter’s knowledge check

Caution

These generated fixtures prove calculations only. Reopen the prepared notebook if screens change; measured hardware, consent, and site evidence are required for a deployment claim.

Return to Presence and Vital-Sign Sensing with Radar and Wi-Fi · Browse Labs