Real-Time Continuous Cuffless Blood Pressure
On Low-Power Microcontrollers
Demonstrating single-handed engineering across low-power embedded software, custom MicroPython signal processing algorithms, and multi-modal edge AI inference (featuring the IDT Blood Pressure Project).
Ultra-Low-Power Embedded Silicon
Hard real-time embedded firmware powering next-generation wearable biometric sensors and telemetry systems.
Microsecond power-gated optical sampling, BLE throughput constraints, and dual-core ARM Cortex-M33 concurrency.
Edge BP inference, zero packet drop at 256 Hz sampling, and ultra-low-memory deep net.
uwavelets MicroPython LibraryThe Engineering Challenge
Traditional blood pressure monitoring relies on episodic, inflatable arm cuffs. Inflatable cuffs are bulky, interrupt sleep, cannot detect continuous hemodynamic spikes, and fail to provide real-time continuous physiological tracking.
- β Inflatable cuffs capture only snapshot readings.
- β High sensor noise & baseline wander from motion.
- β Strict memory limits on microcontrollers.
The Multi-Modal Solution
By combining three non-invasive bio-signals (Electrocardiogram, Photoplethysmogram, and Ballistocardiogram) and executing real-time wavelet decomposition on-device, continuous blood pressure is accurately predicted without any inflatable cuff.
- βECG: Electrical timing of heart ventricular depolarization (R-peaks).
- βPPG: Optical pulse wave measuring peripheral arterial expansion.
- βBCG: Ballistic mechanical acceleration forces of cardiac ejection.
βοΈ
Microcontroller Optimization: Porting Wavelets to MicroPython (uwavelets)
Repo: idt-micro
PyWavelets (`pywt`) is an open-source wavelets processing library for standard Python.
uwaveletsβan original lightweight MicroPython/C port designed from scratch to run continuous and discrete wavelet transforms directly on ATSAMD51 ARM Cortex-M4 microcontrollers under tight 192KB RAM limits.
Standard scientific Python libraries require massive memory footprints and heavy dynamic allocations unavailable on small microcontrollers. To execute real-time wavelet decomposition directly on the ATSAMD51 (Metro M4 ARM Cortex-M4) chip, I authored uwaveletsβa lightweight, memory-efficient MicroPython port designed to interface directly with ulab.
# MicroPython continuous wavelet transform (CWT) implementation for microcontrollers
import ulab as np
from uwavelets.upywt import cwt, ricker
def process_embedded_beat(raw_signal, scales):
"""Computes real-time wavelet coefficients on ATSAMD51 microcontroller."""
clean_signal = raw_signal - np.mean(raw_signal)
coefs, freqs = cwt(clean_signal, scales, wavelet='ricker')
feature_vector = np.sqrt(np.sum(coefs ** 2, axis=1))
return feature_vector
Results, Diagnostic Plots & Model Explainability
Click on any chart below to open the interactive high-resolution viewer with detailed technical commentary.
Real-Time BP Predictions vs Reference
Tracking continuous Systolic & Diastolic pressure variations without an inflatable cuff.
ECG Denoising & Baseline Removal
Filtering motion artifacts and low-frequency baseline wander using wavelets.
Systolic Feature Importance Breakdown
Quantifying signal contributions to peak systolic pressure predictions.
Systolic Bland-Altman Agreement
Clinical evaluation showing low systemic bias and tight 95% limits of agreement.