PaperarXiv:2510.05355

Reducing Latency and Noise in PPG-Based SpO2 Measurements: A Kalman Filtering Approach Towards Acute Hypoxia Detection

Under review2025Added Sep 26, 2026

  • SL
  • GF
  • BK
  • MK
  • BK
  • CK

Authors: Saud Lingawi, Garrett Frank, Benedictus H. Kartawidjaja, Mahsa Khalili, Brian Kwon, Calvin Kuo

arXiv preprint (q-bio.QM) · 16 pages including references, 5 figures, intended for a journal submission

TL;DR

Photoplethysmography (PPG) is a common tool for monitoring cardiopulmonary health. Relying on absorption or reflectance of light by hemoglobin in the blood, the measured PPG waveform can be analyzed per heart beat using physiological assumptions to extract metrics ranging from heart rate to specific blood oxygenation (SpO2). This has led to the widespread use of PPG for bedside clinical monitoring to wearable consumer health monitoring.

  • Form factor: other

Abstract

Photoplethysmography (PPG) is a common tool for monitoring cardiopulmonary health. Relying on absorption or reflectance of light by hemoglobin in the blood, the measured PPG waveform can be analyzed per heart beat using physiological assumptions to extract metrics ranging from heart rate to specific blood oxygenation (SpO2). This has led to the widespread use of PPG for bedside clinical monitoring to wearable consumer health monitoring. However, PPG is notoriously noisy and the measured absorption or reflectance of light is sensitive to factors such as body movement and contact with the skin. To reduce the noise in the PPG-derived SpO2, we developed combined traditional methods of estimating SpO2 from the PPG waveform with a new method to extract changes in SpO2 from the PPG waveform in a Kalman filter, and demonstrated its ability to better estimate SpO2 in humans undergoing controlled hypoxia (down to 14% atmospheric oxygen). The Kalman filter reduced variability in SpO2 to 4.30%SpO2 compared to the beat-to-beat SpO2 variability of 12.59%SpO2. This mirrored current methods of window-averaging the beat-to-beat SpO2, with a 30s window-average reducing SpO2 variability to 4.73%. However, current window-average methods also introduce delays, with 10s and 30s window-averaging introducing delays of 5s and 14s respectively compared to the beat-to-beat SpO2. The Kalman filter reduced this delay to within 3s of the beat-to-beat SpO2, highlighting its ability to reduce noise while maintaining SpO2 dynamics. This capability is particularly useful in reliably detecting clinically meaningful, but transient, hypoxic states, such as those observed during apnea.

Verbatim from arXiv (opens in a new tab) · arXiv metadata (abstracts are released under CC0)

Results on ChatPPG leaderboards

All leaderboards

No results from this paper on ChatPPG leaderboards yet. Browse the leaderboards.

Tasks & signals

Tasks

SpO₂

Signals

Keywords

SpO2Kalmanlatencyfiltering

How it works

How Method works: Setup → Method → TargetSetup: Signals (PPG); Wavelengths (red, IR); Form factor (other). Method: Method. Target: SpO₂.SetupSignals: PPGSignalsPPGWavelengths: red, IRWavelengthsred, IRForm factor: otherForm factorotherMethodMethodTargetSpO₂O₂SpO₂
Wavelengths
red, IR

Cite this paper

APA

Lingawi, S., Frank, G., Kartawidjaja, B. H., Khalili, M., Kwon, B., & Kuo, C. (2025). Reducing Latency and Noise in PPG-Based SpO2 Measurements: A Kalman Filtering Approach Towards Acute Hypoxia Detection. arXiv preprint · 16 pages including references, 5 figures, intended for a journal submission. https://doi.org/10.48550/arXiv.2510.05355

BibTeX

@misc{lingawi2025reducing,
  title         = {{Reducing Latency and Noise in PPG-Based SpO2 Measurements: A Kalman Filtering Approach Towards Acute Hypoxia Detection}},
  author        = {Lingawi, Saud and Frank, Garrett and Kartawidjaja, Benedictus H. and Khalili, Mahsa and Kwon, Brian and Kuo, Calvin},
  year          = {2025},
  howpublished  = {arXiv preprint · 16 pages including references, 5 figures, intended for a journal submission},
  doi           = {10.48550/arXiv.2510.05355},
  eprint        = {2510.05355},
  archivePrefix = {arXiv}
}

Built from the hub record. Check it against the publisher before submitting.

Added to the ChatPPG research hub