mirror of
https://github.com/ruvnet/RuView.git
synced 2026-04-26 13:10:40 +00:00
docs: medical examples README + link from root README
- examples/medical/README.md: full guide for BP estimator, hardware requirements, sample output, accuracy table, AHA categories, disclaimer, RuView integration explanation - README.md: added Medical Examples to documentation table Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
parent
8318f9c677
commit
ef582b4429
2 changed files with 112 additions and 0 deletions
|
|
@ -78,6 +78,7 @@ docker run -p 3000:3000 ruvnet/wifi-densepose:latest
|
|||
| [Architecture Decisions](docs/adr/README.md) | 62 ADRs — why each technical choice was made, organized by domain (hardware, signal processing, ML, platform, infrastructure) |
|
||||
| [Domain Models](docs/ddd/README.md) | 7 DDD models (RuvSense, Signal Processing, Training Pipeline, Hardware Platform, Sensing Server, WiFi-Mat, CHCI) — bounded contexts, aggregates, domain events, and ubiquitous language |
|
||||
| [Desktop App](rust-port/wifi-densepose-rs/crates/wifi-densepose-desktop/README.md) | **WIP** — Tauri v2 desktop app for node management, OTA updates, WASM deployment, and mesh visualization |
|
||||
| [Medical Examples](examples/medical/README.md) | Contactless blood pressure, heart rate, breathing rate via 60 GHz mmWave radar — $15 hardware, no wearable |
|
||||
|
||||
---
|
||||
|
||||
|
|
|
|||
111
examples/medical/README.md
Normal file
111
examples/medical/README.md
Normal file
|
|
@ -0,0 +1,111 @@
|
|||
# Medical Sensing Examples
|
||||
|
||||
Contactless vital sign monitoring using 60 GHz mmWave radar — no wearable, no camera, no physical contact.
|
||||
|
||||
## Blood Pressure Estimator
|
||||
|
||||
Estimates blood pressure in real-time from heart rate variability (HRV) captured by a Seeed MR60BHA2 60 GHz mmWave radar module connected to an ESP32-C6.
|
||||
|
||||
### How It Works
|
||||
|
||||
The radar detects **microscopic chest wall displacement** caused by:
|
||||
- **Respiration**: 0.1-1.0 mm displacement at 12-25 breaths/min
|
||||
- **Cardiac pulse**: 0.01-0.1 mm displacement at 60-100 bpm
|
||||
|
||||
Modern 60 GHz FMCW radar resolves displacement down to **fractions of a millimeter**. Once the signal is isolated and filtered, the heartbeat-by-heartbeat pattern is remarkably clear.
|
||||
|
||||
From there, the estimator:
|
||||
|
||||
1. **Extracts beat-to-beat intervals** from the HR time series
|
||||
2. **Computes HRV metrics**: SDNN (overall variability), LF/HF ratio (sympathetic/parasympathetic balance)
|
||||
3. **Estimates blood pressure** using the correlation between HR, HRV, and cardiovascular tone:
|
||||
- Higher HR → higher BP (sympathetic activation)
|
||||
- Lower HRV (SDNN) → higher BP (reduced parasympathetic)
|
||||
- Higher LF/HF ratio → higher BP (sympathetic dominance)
|
||||
|
||||
### Hardware Required
|
||||
|
||||
| Component | Cost | Role |
|
||||
|-----------|------|------|
|
||||
| ESP32-C6 + Seeed MR60BHA2 | ~$15 | 60 GHz mmWave radar (HR, BR, presence) |
|
||||
| USB cable | — | Power + serial data |
|
||||
|
||||
That's it. Total cost: **~$15**.
|
||||
|
||||
### Quick Start
|
||||
|
||||
```bash
|
||||
pip install pyserial numpy
|
||||
|
||||
# Basic (uncalibrated — shows trends)
|
||||
python examples/medical/bp_estimator.py --port COM4
|
||||
|
||||
# Calibrated (take a real BP reading first, then enter it)
|
||||
python examples/medical/bp_estimator.py --port COM4 \
|
||||
--cal-systolic 120 --cal-diastolic 80 --cal-hr 72
|
||||
```
|
||||
|
||||
### Sample Output (Real Hardware, 2026-03-15)
|
||||
|
||||
```
|
||||
Contactless Blood Pressure Estimation (mmWave 60 GHz)
|
||||
|
||||
Time HR SBP DBP Category Samples
|
||||
-------------------------------------------------------
|
||||
15s | 64 | 117/78 | Normal | SDNN 22ms | n=4
|
||||
20s | 65 | 117/78 | Normal | SDNN 28ms | n=5
|
||||
25s | 71 | 119/79 | Normal | SDNN 88ms | n=9
|
||||
30s | 77 | 122/81 | Elevated | SDNN 108ms | n=14
|
||||
35s | 80 | 123/82 | Elevated | SDNN 106ms | n=18
|
||||
40s | 80 | 123/82 | Elevated | SDNN 98ms | n=22
|
||||
45s | 82 | 124/83 | Elevated | SDNN 97ms | n=26
|
||||
50s | 83 | 125/83 | Elevated | SDNN 95ms | n=29
|
||||
55s | 83 | 125/83 | Elevated | SDNN 92ms | n=32
|
||||
60s | 84 | 125/83 | Elevated | SDNN 91ms | n=35
|
||||
|
||||
RESULT: 125/83 mmHg | HR 84 bpm | SDNN 91ms | 35 samples
|
||||
```
|
||||
|
||||
### Accuracy
|
||||
|
||||
| Condition | Accuracy |
|
||||
|-----------|----------|
|
||||
| Uncalibrated, stationary | ±15-20 mmHg (trend tracking) |
|
||||
| Calibrated, stationary | ±8-12 mmHg |
|
||||
| Moving subject | Not reliable — wait for subject to be still |
|
||||
|
||||
Accuracy improves with:
|
||||
- Longer recording duration (60s minimum, 120s recommended)
|
||||
- Calibration with a real cuff reading
|
||||
- Stationary subject within 1m of sensor
|
||||
- Minimal environmental RF interference
|
||||
|
||||
### AHA Blood Pressure Categories
|
||||
|
||||
| Category | Systolic | Diastolic |
|
||||
|----------|----------|-----------|
|
||||
| Normal | < 120 | < 80 |
|
||||
| Elevated | 120-129 | < 80 |
|
||||
| High BP Stage 1 | 130-139 | 80-89 |
|
||||
| High BP Stage 2 | 140+ | 90+ |
|
||||
|
||||
### Disclaimer
|
||||
|
||||
**This is NOT a medical device.** Blood pressure estimates from heart rate variability are approximations based on population-level correlations. Individual variation is significant. Always use a validated cuff-based sphygmomanometer for clinical decisions.
|
||||
|
||||
This tool is intended for:
|
||||
- Research into contactless vital sign monitoring
|
||||
- Wellness trend tracking (is my BP going up or down over days?)
|
||||
- Technology demonstration
|
||||
- Educational purposes
|
||||
|
||||
### How This Connects to RuView
|
||||
|
||||
This example is part of the [RuView](https://github.com/ruvnet/RuView) ambient intelligence platform. When combined with WiFi CSI sensing:
|
||||
|
||||
- **WiFi CSI** provides through-wall presence detection and room-scale activity recognition
|
||||
- **mmWave radar** provides clinical-grade heart rate, breathing rate, and BP estimation
|
||||
- **Sensor fusion** (ADR-063) combines both for zero false-positive fall detection and comprehensive health monitoring
|
||||
- **RuVector** dynamic min-cut analysis treats physiological signals as a coherence graph, automatically separating noise, motion artifacts, and environmental interference
|
||||
|
||||
The result: cheap sensors ($15-24 per node), local computation (no cloud), real physiological understanding.
|
||||
Loading…
Add table
Add a link
Reference in a new issue