FFT-Based Heart Rate Estimation from PPG

FFT-based heart rate estimation computes the power spectrum of a PPG signal window and identifies the dominant spectral peak in the cardiac frequency band (0.5–4 Hz, corresponding to 30–240 bpm). This frequency-domain approach is robust to waveform distortion and amplitude variations that challenge time-domain peak detection.

The standard FFT HR pipeline applies a window function (Hanning or Hamming) to a 5–10 second PPG segment, computes the N-point FFT (typically N = 512–4096 with zero-padding), and identifies the frequency with maximum power in the 0.5–4 Hz cardiac band. Frequency resolution Δf = fs/N determines the minimum detectable heart rate change: at 25 Hz sampling with 1024-point FFT, Δf = 0.024 Hz ≈ 1.5 bpm, sufficient for most applications.

Harmonic analysis improves robustness: the cardiac PPG signal contains strong harmonics at 2× and 3× the fundamental frequency. A harmonic product spectrum (HPS) multiplies the power spectrum with downsampled versions of itself, sharpening the fundamental peak while suppressing non-harmonic interference. This is particularly effective when motion artifacts create spectral peaks near the cardiac frequency, as motion artifacts rarely exhibit the same harmonic structure as the cardiac signal.

Spectral peak tracking across successive windows using Viterbi decoding or dynamic programming ensures temporal continuity of heart rate estimates. The TROIKA framework combines NLMS artifact removal with FFT spectral analysis and Viterbi tracking to achieve 2.36 bpm MAE during treadmill exercise. Short-time FFT approaches with 50–75% window overlap provide 1–4 Hz HR update rates suitable for real-time display on consumer wearables.

Frequently Asked Questions

What FFT window size is optimal for PPG heart rate estimation?

8-second windows with 50% overlap balance frequency resolution (0.125 Hz ≈ 7.5 bpm at fs=25 Hz without zero-padding) against temporal responsiveness. Zero-padding to 4096 points interpolates the spectrum for finer peak localization.

How does FFT handle non-integer heart rates?

Without zero-padding, FFT frequency bins are spaced at Δf = fs/N. Zero-padding interpolates between bins, and parabolic peak interpolation on the three bins surrounding the maximum provides sub-bin frequency accuracy to ~0.01 Hz (0.6 bpm).

When does FFT fail for PPG heart rate?

FFT fails when motion artifact power exceeds cardiac power in the same frequency band (e.g., running cadence matching heart rate). It also fails with very short windows (<3 seconds) where frequency resolution is insufficient to resolve cardiac peaks.

Related Algorithms