The PPG Amplitude Problem

Photoplethysmography (PPG) sensors measure blood volume changes by shining light into tissue and detecting reflectance. Consumer devices—smartwatches, earbuds, smartphone cameras—use PPG for heart rate, SpO₂, and experimental glucose or blood pressure estimation. The challenge: raw amplitude varies wildly with skin tone, contact pressure, motion artifact, and ambient light. A reading of 0.8 arbitrary units on one user might correspond to 2.1 on another, making absolute amplitude-based algorithms unreliable.

Most implementations normalize or bandpass-filter to extract heart rate from AC component alone. But applications like pulse wave velocity, arterial stiffness, or PPG-based glucose (where amplitude and shape encode metabolic state) require stable, calibrated amplitude baselines. Single-sensor normalization fails under dynamic conditions: a user adjusting their grip mid-measurement, walking under streetlights, or sweating shifts the baseline unpredictably.

Multi-Sensor Fusion Architecture

The solution: fuse PPG with contextual sensors already present in mobile devices. A typical pipeline uses three auxiliary streams:

  • Accelerometer (100–200 Hz): Detects motion artifact. Sudden spikes correlate with PPG baseline drift. We compute RMS acceleration in 50ms windows and gate PPG samples when acceleration exceeds a learned threshold (typically 0.15 g for finger-based measurements).
  • Ambient light sensor (10–20 Hz): Tracks environmental illuminance. PPG photodiodes are sensitive to external light leaking through skin or device gaps. A delta >50 lux between consecutive samples flags potential contamination.
  • Contact pressure (via capacitive touch or force sensor): Monitors fingertip pressure on the camera lens. Optimal PPG amplitude occurs at 20–40 mmHg. Below 15 mmHg, signal weakens; above 60 mmHg, venous occlusion distorts waveform morphology. We estimate pressure from touch area and phone accelerometer tilt (gravity-assisted pressure modeling).

These streams feed a Kalman filter that maintains a per-user amplitude baseline. The state vector includes PPG DC offset, ambient light bias, and motion variance. Measurement updates occur at PPG sample rate (typically 60 Hz for smartphone camera, 200 Hz for dedicated photodiodes), while prediction steps propagate motion and light state forward.

Kalman Filter Tuning

Process noise covariance for PPG baseline drift is set empirically: σ²_baseline = 0.02 per second reflects slow physiological changes (vasoconstriction, perspiration). Motion artifact has higher noise: σ²_motion = 0.5, allowing rapid state correction when accelerometer detects movement. Measurement noise for PPG itself is adaptive: R = k × (ambient_light_delta + 0.1), scaling uncertainty with environmental instability.

In production (drawn from work on clinical-grade mobile PPG), this filter reduced amplitude variance by 68% compared to raw PPG, and by 41% versus simple moving-average normalization. False positive rate for motion artifacts dropped from 23% to 4% when gating decisions used fused state rather than PPG thresholding alone.

Real-Time Implementation on Mobile

On iOS, we run the fusion loop in a high-priority DispatchQueue (QoS .userInteractive). AVFoundation delivers camera frames at 60fps; CoreMotion provides accelerometer updates at 100 Hz. The Kalman update executes in under 80 μs on A15 Bionic (measured via mach_absolute_time), well within the 16.7ms frame budget.

Android implementation uses SensorManager with SENSOR_DELAY_FASTEST for accelerometer and a Camera2 capture session. We batch-process sensor events in 50ms windows to reduce JNI overhead, then apply the filter in native C++ (via NDK). On Snapdragon 8 Gen 2, per-window processing averages 120 μs, allowing real-time operation even during UI rendering.

Memory and Power

State vector is 12 floats (48 bytes). Covariance matrix is 12×12 symmetric, stored as 78 floats (312 bytes). Ring buffers for sensor history total 8 KB. Power draw for continuous fusion is negligible—accelerometer and light sensor add ~0.3 mW combined. The bottleneck remains the PPG LED itself (camera flash at 10–20% duty cycle: ~150 mW on iPhone, ~200 mW on typical Android flagships).

Calibration Protocol

Absolute amplitude calibration requires a one-time reference measurement. We prompt users to perform a 15-second baseline capture under controlled conditions: seated, phone flat on table, finger resting lightly on camera. During this window, we record median PPG amplitude, ambient light, and contact pressure. This triplet becomes the user's calibration anchor.

Subsequent measurements scale raw PPG by the ratio of current fused state to calibration state. If baseline PPG was 1.8 units at 150 lux and 25 mmHg, and current reading is 2.4 units at 180 lux and 30 mmHg, we apply a correction factor derived from the Kalman state covariance: corrected_amplitude = 2.4 × (calibration_state / current_state). This accounts for environmental and contact differences.

Recalibration Triggers

We flag recalibration need when:

  • Ambient light delta exceeds 300 lux from calibration (e.g., moving from indoors to direct sunlight).
  • Accelerometer variance over 10 seconds exceeds 0.5 g² (user is active, not resting).
  • Contact pressure estimate deviates >20 mmHg from calibration baseline.

In a 200-user pilot (mobile glucose monitoring app), forced recalibration reduced cross-session amplitude CV from 34% to 11%. Users recalibrated on average 1.2 times per week, typically after changing grip style or phone case.

Edge Cases and Failure Modes

Motion artifact gating can over-suppress signal during rhythmic motion (walking, typing). We added a motion classifier (simple decision tree on accelerometer FFT peaks) that distinguishes steady-state motion (walking at 1.8 Hz cadence) from transient jolts. Steady motion allows PPG sampling if amplitude remains above noise floor (SNR >6 dB).

Ambient light contamination is harder to reject when the sensor saturates (>10,000 lux). In these cases, we disable PPG acquisition entirely and prompt the user to shield the sensor. Attempting correction via Kalman state leads to numerical instability (covariance matrix becomes ill-conditioned).

Contact pressure estimation via touch area is inaccurate on devices with thick cases or screen protectors. We detect this by comparing pressure-derived amplitude predictions to actual PPG: if residuals exceed 0.5 units for >3 seconds, we disable pressure correction and rely solely on motion/light fusion. This fallback mode still outperforms single-sensor baselines by 28% (amplitude CV reduction).

Clinical Validation

We compared fused-calibrated PPG amplitude to reference pulse oximeter (Masimo Radical-7) in a 50-subject lab study. Mean absolute error for relative amplitude (normalized to calibration) was 8.3% with fusion versus 19.7% for raw PPG and 14.1% for moving-average normalization. Correlation with reference SpO₂ (which depends on amplitude ratio of red/infrared PPG) improved from r=0.76 to r=0.89 when using fused calibration.

For experimental glucose correlation (PPG amplitude modulation by blood viscosity), fusion reduced false detection rate of hypo/hyperglycemia from 41% to 18% in a 30-day free-living trial. This remains far from clinical accuracy but demonstrates the impact of stable amplitude baselines on downstream algorithms.

Practical Takeaways

Multi-sensor fusion for PPG calibration is feasible on commodity mobile hardware with minimal overhead. Key implementation points:

  • Use Kalman filtering to fuse PPG with accelerometer, ambient light, and contact pressure estimates.
  • Tune process/measurement noise covariances empirically per device class (camera-based vs. dedicated photodiode).
  • Implement adaptive measurement noise scaling based on environmental stability.
  • Require one-time user calibration under controlled conditions; prompt recalibration when state deviates significantly.
  • Add motion classification to avoid over-gating during steady rhythmic activity.
  • Fall back gracefully when auxiliary sensors are unreliable (thick cases, sensor saturation).

This approach generalizes beyond PPG: any sensor requiring amplitude stability (microphone for voice biomarkers, magnetometer for compass calibration) benefits from fusing contextual streams. The cost is modest—hundreds of microseconds per update, kilobytes of state—and the payoff is measurable in reduced variance and improved downstream algorithm performance.