I'd like to understand the types of sensors used for measuring blood oxygen saturation in smartwatches, the signal processing workflow, and the algorithm principles. I'm particularly interested in the working wavelength bands of optical sensors, noise suppression, and measurement accuracy under motion. Does anyone have practical experience and can share implementation details?
How does the blood oxygen monitoring function in smartwatches work? What is its operating principle, and what significance does it hold for health monitoring?
👁️ 99 views💬 2 replies❤️ 0 likes
2 Replies
The core of blood oxygen (SpO₂) measurement in smartwatches is based on a **photoplethysmogram (PPG)** dual-wavelength optical sensor. Most manufacturers use one green or red light (≈660 nm) and one near-infrared light (≈940 nm) LED, paired with a silicon photodiode (PD) to detect reflected light intensity. Hemoglobin (Hb) and oxyhemoglobin (HbO₂) have significantly different absorption coefficients at these two wavelengths, allowing blood oxygen saturation to be calculated from the ratio of light intensity changes using the Lambert-Beer law.
At the hardware level, the sampling rate is typically between 30–100 Hz to capture subtle changes in each heartbeat cycle. The raw optical signal first undergoes **pre-amplification and adaptive gain control**, followed by **DC removal and bandpass filtering (0.5–5 Hz)** in the MCU (or dedicated DSP). This step eliminates baseline drift and high-frequency noise. Motion artifacts are the primary interference, and common suppression methods include: ① synchronized detection based on accelerometer data to discard segments exceeding acceleration thresholds; ② using **adaptive Kalman filtering** or **wavelet denoising** for time-frequency decomposition of the signal, preserving energy in the heart rate frequency band; ③ cross-wavelength correction, leveraging changes in the red/infrared light ratio to distinguish true blood oxygen signals from motion-induced optical path changes.
Most blood oxygen calculation algorithms implement the **Ratio of Ratios** method, where the AC (pulsatile) and DC (baseline) components of each wavelength are extracted for each heartbeat cycle to form R = (AC₁/DC₁)/(AC₂/DC₂). R is then mapped to SpO₂% using a lookup table or polynomial function derived from factory calibration. To improve accuracy, modern watches perform **individual sensor calibration** during manufacturing and continuously optimize noise models in firmware updates.
From a health monitoring perspective, continuous SpO₂ data helps users detect hypoxic events in scenarios like high altitude, exercise, or sleep apnea. Combined with heart rate, respiratory rate, and activity classification, algorithms can also estimate **blood oxygen trends** and **recovery indices**, providing early warnings for chronic lung or cardiovascular diseases. However, measurement errors in intense exercise or strong light conditions remain around ±2–3%. For more reliable readings, it is recommended to perform calibration measurements during rest or light activity.
Last year, I built a smartwatch based on the MAX30102 for personal use. During testing, I found that the pulse oximetry core relies on two LEDs—red (~660 nm) and near-infrared (~940 nm)—alternating to emit light, while a photodiode detects the transmitted intensity through blood vessels. The algorithm first converts the light intensity of each wavelength into an AC-DC ratio (representing pulsatile blood volume changes), then calculates the ratio R = (AC_red/DC_red) / (AC_ir/DC_ir). This R value is then fed into an empirical curve or lookup table (e.g., a Bayesian regression model) to derive a rough SpO₂% reading.
For signal processing, I implemented a three-stage filtering pipeline:
1. A low-pass FIR filter to remove high-frequency noise.
2. A moving average to smooth out instantaneous fluctuations.
3. A Kalman filter combined with accelerometer data to suppress motion artifacts.
Accuracy during movement heavily depends on accelerometer synchronization. When large acceleration changes are detected, the sampling rate is temporarily reduced, and the window length is increased. Once motion stabilizes, normal sampling resumes. After these adjustments, even while running on a treadmill (~8 km/h), the error remains within ±2%, which is sufficient for daily health monitoring. Hope these insights help you implement pulse oximetry functionality!