Skip to content

The PPG's 30 Hz frame clock

ECG and PPG fiducials resolve to one 2 ms sample, but PPG fiducials taken on raw samples lock to a hidden 33.3 ms frame grid. Scanning for it finds the oximeter's frame clock to about 1 ppm, a fixed fingerprint of each recording setup.

Date 2026-10-10
Status current
Methods Clocks carried in the signal
Techniques Phase-step detection, Null controls
Clocks Pulse oximeter frame clock, SNUADC sample clock
Devices SNUADC, Solar8000 monitor
Variables Plethysmogram (SNUADC), ECG lead II (SNUADC), Arterial pressure (SNUADC)

Background

A coarser time grid hidden under the sample grid would limit how finely PPG timing can be read. A published test (differences of consecutive inter-beat intervals) found one in other monitor data at 125 Hz.

Data

SNUADC ECG II and PLETH at 500 Hz in 266 cases with at least 20 minutes of continuous data (the longest stretch of up to 90 minutes each; 378 hours).

Method

Inter-beat intervals of nine detectors were tested for any grid of 2–16 samples. Fiducials on raw samples were tested for locking to a comb at the 33.3 ms frame period (the interval resultant: 0 for no locking, 1 when every interval is a whole number of frames). In absolute sample index, the frame period was scanned in 1 ppm steps for the phase that keeps the systolic peaks on one grid through the whole recording, and the two halves of each recording compared. Arterial pressure was scanned the same way as a control.

Results

  • No coarser grid in the intervals: 50.2% even differences for ECG R peaks and 50.1% for PPG onsets, against 50% for no grid.
  • Raw-sample PPG fiducials lock to the frame: interval resultant at 33.3 ms of 0.38 for the raw systolic maximum, 0.10 for the raw foot and steepest rise, 0.01 for the sharpest kink, and 0.02 for the steepest upstroke on the filtered signal. The PLETH shows weak lines at 30, 60, 90 and 120 Hz; the 90 Hz line rules out mains hum.
  • The frame clock is found in 189 of 266 cases; the two halves of a recording agree within 2 ppm (median). The frame period against the SNUADC sample clock is fixed per setup, for example +84 ppm (IQR 82–88) for one port in step mode, +39 ppm for the same port in frequent-correction mode, +72 and +24 ppm for two others. It keeps its phase through the sawtooth slips.
  • The best frame anchor is pyPPG's d point with a light filter (0.5–45 Hz): it finds the clock in 176 cases, against 135 for the raw peak. pyPPG's default filter destroys the lock.
  • Arterial pressure has no frame at any period from 2 to 100 samples.
Parameter Value Status From
Oximeter frame clock against SNUADC +7 to +92 ppm by setup (medians over 42 PC keys); within 3 ppm of its setup's median in 89% of recordings measured The PPG's 30 Hz frame clock

Discussion

Locked fiducials carry up to ±17 ms of frame quantisation, so PPG timing should use a fiducial that does not lock (the steepest upstroke on the filtered signal). The frame clock is a second clock inside the PPG chain, separate from the sawtooth of its content (The PPG sawtooth and its correction).

Observations it supports

Observation Status Summary
Every time is quantised, and fiducials inherit it established A time on a grid of step Δ carries an error of Δ/√12 (1 SD). In VitalDB that is 0.58 ms for a 500 Hz sample, 2.3 ms for BIS EEG, 0.8 ms for the arrhythmia annotations' 1/360 s grid, and up to ±17 ms for PPG fiducials taken on raw samples, which lock to the 33.3 ms frame.
The oximeter's frame clock is a fingerprint of the setup established The rate of the oximeter's 30 Hz frame clock against the SNUADC sample clock is fixed per recording setup (+7 to +92 ppm across setups) and repeats within about 2 ppm inside a recording, so it identifies the hardware a recording was made on.
The plethysmogram is built in 30 Hz frames established The SNUADC PLETH waveform comes from the oximeter in 33.3 ms frames, smoothed to 500 Hz. Its content changes once per frame, on the oximeter's own clock, about 0.4 s after the finger.

Worked examples

Example Side Status Summary
Pulse arrival time in two correction steps time draft The time from the ECG R wave to the pulse at the finger, as stored, after the PLETH's sawtooth is removed, and after its device offset is removed, smoothed by maximum likelihood, with the arterial line as the reference.

Code

Figures

Six panels of histograms and spectra, ending with a sawtooth scatter of PAT against minutes with red reset lines.
PPG fiducials lie on whole 2 ms samples and per-beat PAT noise is about 3.5 ms; detected resets cluster at about 32 ms, one 30 Hz frame. Panel f shows case 2, with a reset every 11.4 min.
Two rows of panels: interval histograms, comb tests, per-case strip plot and ripple bars.
Beat intervals show no grid coarser than 2 ms, but PPG fiducials lock to a 33.3 ms (30 Hz) frame comb.