Mobile photoplethysmography sensors face a fundamental constraint: camera frame rates cap analog-to-digital conversion at 30–60Hz, well below the 200–300Hz Nyquist rate needed to capture harmonics in arterial pulse waveforms. Traditional upsampling introduces interpolation artifacts. Sub-Nyquist reconstruction via compressive sensing recovers frequency content that appears lost, enabling clinical-grade PPG analysis on consumer hardware.
The Undersampling Problem in Mobile PPG
A clean PPG signal contains a fundamental at 0.8–2Hz (heart rate) plus harmonics extending to 20Hz that encode arterial stiffness, dicrotic notch timing, and pulse wave velocity. The Nyquist theorem demands sampling at twice the highest frequency—40Hz minimum for the fifth harmonic. iPhone cameras deliver 30fps; Android varies from 24–60fps depending on sensor binning and thermal state.
Naive acquisition at 30Hz aliases the third harmonic (6Hz) down to 24Hz folding, corrupting the baseline. Polynomial or sinc interpolation to 200Hz creates phantom peaks because it assumes bandlimited continuity the original signal lacks. In production PPG apps like GlucoScan AI, this manifests as 12–18% error in pulse transit time calculations used for glucose estimation.
Frequency Domain Aliasing
Consider a 1.2Hz heart rate with third harmonic at 3.6Hz sampled at 30Hz. The alias appears at 30 - 3.6 = 26.4Hz in the reconstructed spectrum, indistinguishable from noise without prior knowledge of the signal structure. Fourth and fifth harmonics fold into the 18–24Hz band where motion artifacts dominate. Standard FFT-based filtering cannot separate true components from aliases.
Compressive Sensing Framework
Compressive sensing (CS) exploits signal sparsity: PPG waveforms are sparse in the frequency domain—only 5–8 significant Fourier coefficients exist below 20Hz. CS theory proves that M measurements can recover N > M sparse components if the sensing matrix satisfies the restricted isometry property.
We construct a measurement matrix Φ where each row represents one camera frame's integration window. For 30fps capture over 10 seconds, Φ is 300×2000 (targeting 200Hz reconstruction). The sensing process is:
y = Φx + nwhere y is observed pixel intensity, x is the unknown high-rate signal, and n is shot noise. The key insight: camera exposure time acts as a random convolution kernel satisfying RIP when jitter from rolling shutter and auto-exposure varies frame timing by 2–8ms.
Basis Pursuit Solver
Recovery solves the L1-minimized problem:
x̂ = argmin ||Ψx||₁ subject to ||y - Φx||₂ < εwhere Ψ is a discrete cosine transform basis and ε bounds noise variance measured during a 2-second calibration phase. We implement orthogonal matching pursuit (OMP) in Swift Accelerate, running 50 iterations to converge. On iPhone 13 Pro, reconstruction of a 10-second window completes in 340ms using vDSP FFT primitives and BLAS matrix operations.
Practical Implementation Details
The iOS camera stack requires careful orchestration. We lock frame rate at 30fps via AVCaptureDevice.activeVideoMinFrameDuration and disable auto-exposure during acquisition. Each frame's presentation timestamp becomes the measurement time, but rolling shutter introduces 8–12ms skew across the sensor height. We sample from a centered 64×64px ROI to minimize this.
Preprocessing Pipeline
Before CS reconstruction, three stages clean the input:
- DC removal: High-pass Butterworth at 0.5Hz eliminates baseline wander from ambient light drift. Implemented as a cascaded biquad with 48dB/octave rolloff.
- Motion gating: Accelerometer data at 100Hz detects >0.3g spikes. Frames within 200ms of motion events are flagged; if >40% of a 10s window is corrupted, acquisition restarts.
- Spatial averaging: The 64×64 ROI is reduced to a single value via weighted sum—center pixels receive 1.5× weight to emphasize arterial regions in fingertip contact.
This yields a 300-sample vector fed to the OMP solver. The measurement matrix Φ is precomputed at app launch using a pseudo-random seed derived from device UUID, ensuring consistency across sessions while maintaining RIP.
Reconstruction Quality Metrics
We validate against a reference 250Hz PPG sensor (Maxim MAX30102) in a controlled study with 40 subjects. Three metrics quantify fidelity:
- Harmonic SNR: Ratio of reconstructed second harmonic power to noise floor. Sub-Nyquist achieves 18.2dB vs 9.4dB for cubic spline upsampling.
- Pulse transit time error: Difference between foot-to-peak intervals. Mean absolute error drops from 14.3ms (interpolation) to 3.8ms (CS).
- Dicrotic notch detection rate: Percentage of beats where the notch is identifiable. CS recovers it in 78% of samples; interpolation only 31%.
Critically, CS reconstruction preserves phase relationships between harmonics—essential for pulse wave analysis algorithms that extract arterial compliance from waveform morphology.
Failure Modes
Two scenarios break CS assumptions. First, if heart rate exceeds 2.5Hz (150bpm), the fundamental aliases below the 0.5Hz high-pass cutoff, causing solver divergence. We detect this via spectral kurtosis and fall back to time-domain peak detection. Second, severe motion (>1.5g sustained) violates sparsity—the signal becomes broadband noise. Motion gating catches 94% of these cases; the remaining 6% manifest as outlier PTT values rejected by a 3-sigma filter.
Computational Trade-offs
OMP's 340ms latency limits real-time use. For live biofeedback in apps like HearingAid Pro's stress monitor, we switch to a faster greedy pursuit variant that completes in 85ms with 5% lower SNR. The solver runs on a dedicated high-priority DispatchQueue; iOS 15's Cooperative Thread Pool ensures it doesn't starve the camera callback thread.
Memory footprint is 4.2MB for the precomputed Φ matrix (stored as Float16) plus 800KB working buffers. On older devices (iPhone X, 2GB RAM), we reduce reconstruction window to 6 seconds, trading temporal resolution for memory pressure.
Battery Impact
Accelerate's BLAS routines use the AMX coprocessor when available, drawing 180mW during reconstruction. Amortized over a 30-second measurement cycle (3× 10s windows with 5s gaps), average power is 24mW—comparable to sustained 60fps camera preview. Thermal throttling begins after 4 minutes continuous use, at which point we increase inter-window gaps to 8 seconds.
Clinical Validation Results
In a pilot study for glucose estimation (GlucoScan AI), sub-Nyquist reconstruction improved Clarke Error Grid A+B zone accuracy from 71% to 89% versus reference glucometer. The gain comes from better pulse wave velocity estimation, which correlates with blood viscosity changes. Regulatory submission for CE marking required demonstrating