AI hardware

PPG Motion Artifacts: Test on Your Own Board

A graphite health band is strapped around a small metal motion-shaker fixture.Illustration

Wrist PPG degrades when the sensor moves. A repeatable test logs raw PPG, accelerometer and a chest ECG reference on one clock, runs a fixed activity script, and records heart rate error per activity. This guide lists open datasets with that structure, a capture checklist, a test script and questions to ask before choosing a fix.

Heart rate that looks right at rest and drifts while the wearer runs or types is a common complaint on wellness wearables. Before you choose between a hardware change and an algorithm change, you need a repeatable way to measure the error. This guide covers the open datasets to start from, what to log, a test script and questions to ask. It contains no Duobay price and no measured result from us. It is an engineering write-up for general wellness products. It is not a medical device guide.

Which open datasets have an ECG reference?

Each dataset pairs a wrist PPG signal and an accelerometer with an ECG used as the heart rate truth. All details below come from the linked pages, read on October 31, 2026. Check each dataset page for its license and citation terms before you use the data (as of October 31, 2026).

DatasetWhat it containsWhy it helpsSource
PPG-DaLiAWrist BVP at 64 Hz and 3-axis acceleration at 32 Hz. Chest ECG at 700 Hz gives the heart rate ground truth. 15 subjects, real-life activities.Real-life activities, so the motion varies. Use it to check your estimation code.UCI repository, as of October 31, 2026
WESADWrist BVP at 64 Hz and wrist acceleration at 32 Hz, paired with chest ECG at 700 Hz. 15 subjects.A second open dataset with the same PPG, IMU and ECG structure.UCI repository, as of October 31, 2026
IEEE SPC 2015 (TROIKA paper)Benchmark for fast running at up to 15 km/h. 12 subjects. The paper reports an average absolute error of 2.34 BPM.A published example of how heart rate error is reported. It describes that paper's method on that treadmill data.arXiv paper, as of October 31, 2026
PhysioNet wrist PPG during exerciseWrist Shimmer unit records PPG plus accelerometer. Chest ECG reference with hand-marked R peaks. All signals at 256 Hz. Treadmill walk, jog and cycling at two resistances.A concrete synchronized PPG, IMU and ECG protocol to copy for your own bench.PhysioNet, as of October 31, 2026

The PPG-DaLiA page states that "the included ECG data provides heart rate ground truth." The PhysioNet page states that "all signals were sampled at 256 Hz."

How do you log PPG and IMU on one clock?

The datasets show the structure: the same wrist device records PPG and acceleration, and a separate chest device records ECG. Mirror that, and add a sync marker so you can align the devices afterward. For how ECG sensing works inside a wearable, see ECG wearable design.

ChannelHow to captureRaw data to record
TimestampOne shared clock for every channel. Prefer a hardware timer count converted to seconds, and record the clock source.Raw counter value and the conversion factor.
PPG channel(s)Raw ADC counts per LED channel at a fixed rate. PPG-DaLiA and WESAD use 64 Hz for BVP; the PhysioNet set uses 256 Hz for every channel. Your rate is your design choice.Raw counts, LED current setting, gain and ambient-cancel settings in force.
IMU3-axis acceleration at a fixed rate. PPG-DaLiA and WESAD use 32 Hz; the PhysioNet set uses 256 Hz.Raw counts, full-scale range, sample rate.
Reference ECGChest strap or ECG device with its own logger. PPG-DaLiA and WESAD use 700 Hz; the PhysioNet set uses 256 Hz.Raw ECG, the reference device model, and the method used to find R peaks.
Sync markerA deliberate event all loggers can see, such as a sharp tap on the board with a visible spike in the IMU, at the start and end of each run.The marker times in each log, so you can align offsets afterward.
Fit and setupStrap tightness, placement, skin tone and sweat state, written by the tester for each run.A free-text note and a photo per run (no faces).

What does a test script look like?

This script is a starting point of our own, built from the activities in the datasets above. The durations, speeds and patterns are yours to set. Write them down once and reuse them for every board variant.

BlockWhat the tester doesWhy it is there
Rest baselineSit still, arm supported, for a fixed time you choose.A no-motion reference block to compare the others against.
Treadmill stepsWalk, then jog, then run, each at a speed you set, with the same strap fit.Periodic leg and arm motion. The PhysioNet set uses treadmill walk and jog.
Arm swingStand still and swing the wrist arm in a repeatable pattern.Separates arm motion from leg impact.
TypingType at a desk for a fixed time.Small, irregular wrist motion.
Grip or pullGrip an object or pull a strap, if your product may be worn during such tasks.Tendon movement and pressure change at the wrist.
Fit variantsRepeat the treadmill and typing blocks with a snug strap, then a looser strap, then a different placement.Fit is a hardware factor. Only your own run shows its effect on your board.

What can you check without hardware?

Before you build the rig, run the same estimation code on one of the open datasets. A simple FFT peak-tracking estimate of heart rate can be computed with and without rejecting spectral peaks that match the accelerometer spectrum, and compared against the ECG. That checks your code. It says nothing about your sensor, strap or LED settings, so it does not replace the bench test below.

What are the common test traps?

These follow from the dataset descriptions and from how the signals are combined. They are engineering reasoning, and none describes an incident at any company.

  • Judging on one dataset. The datasets differ in activity mix and device, which is why two sets with the same PPG, IMU and ECG structure are listed above.
  • Treating a paper's error as your target. The 2.34 BPM figure comes from 12 subjects running on a treadmill at up to 15 km/h with a specific research method. It does not describe any Duobay build.
  • Mismatched sample rates and clocks. PPG-DaLiA and WESAD log BVP at 64 Hz and acceleration at 32 Hz on the same device. If your PPG and IMU run on separate clocks, any offset misaligns the two signals. This is engineering reasoning.
  • A reference that is not synchronized. In PPG-DaLiA and WESAD the chest ECG runs at 700 Hz on a separate device from the wrist unit. Align the logs with a shared marker, or timing error ends up in the heart rate error.
  • Averaging over everything. One overall number hides which activity fails. Keep a table per activity.
  • Reading a fix from a single change. Fit, LED current and sensor geometry can change together. Change one factor per run and log the others.

What should you measure on your own board?

We have not run this test on any board for this article, and the effect of fit, LED current and photodiode geometry on motion error is not quantified by the sources we checked. Vendor numbers on motion compensation are not cited here. Where a vendor has not published a figure, the answer is "vendor has not published this, measure it on your board."

What to measureHow to instrument or capture itRaw data to record
Heart rate against the ECG reference, per activityRun the script above with PPG, IMU and ECG logging at the same time.Raw PPG, raw IMU, raw ECG, window length, algorithm version, and a per-window table of your heart rate and the reference heart rate.
Heart rate against motion levelGroup windows by a motion measure from the accelerometer that you define and keep fixed.The motion measure definition, the group edges, and which script blocks fall in each group.
With and without accelerometer-based rejectionRun the same recorded PPG through the same estimator twice, once plain and once with spectral peaks that match the IMU spectrum rejected.The script, its parameters, and both result tables, so the comparison can be reproduced.
FitRepeat the same blocks at different strap fits and placements.A note on how fit was set and checked, and the per-fit result table. Vendor datasheets do not publish this for your board, so it needs your own run.
LED currentRepeat one block at several LED current settings.LED current per run, PPG signal amplitude and saturation flags, and the board current draw for the run.
Photodiode geometry and windowCompare board variants that differ in sensor placement, spacing or optical window.Photos and drawings of each variant, plus the same result tables. Vendors do not publish this for generic boards, so it needs your own run.

What should you ask before you choose a fix?

Use this list in your design review.

  • What exact heart rate feature are we shipping, and is it described as general wellness tracking in our product copy?
  • Which activities will real users do while wearing it, and does our script cover each of them?
  • What window length and update rate does the product use, and is the test run with the same ones?
  • Who decides what counts as acceptable heart rate error, and where is the reason written down?
  • Do PPG and IMU share one clock, and how do we show the alignment on every log?
  • Which reference device do we use, and how are its R peaks checked?
  • Which changes are hardware (fit, LED current, sensor geometry, window) and which are algorithm, and can we change only one per run?
  • Which numbers on a vendor datasheet are measured under motion, and which are measured at rest?
  • Where is the raw data kept, so another engineer can rerun the comparison?

Questions about PPG motion testing

Why is an accelerometer used as a reference?

PPG-DaLiA and WESAD log wrist PPG and acceleration on one device, with a chest ECG as the heart rate ground truth. That lets you line up the motion signal with the PPG signal in time.

Can I use the open datasets for my product?

Use them to check your estimation code. Check each dataset page for its license and citation terms before you use the data (as of October 31, 2026). See PPG-DaLiA and WESAD. They do not replace data from your own board.

Does a looser fit reduce motion error?

We do not have a measured answer for generic boards, and no source we checked quantifies it. Fit, LED current and sensor geometry are exactly the factors to vary in your own run, with the other settings held fixed.

How should I read the 2.34 BPM figure?

The TROIKA paper reports an average absolute error of 2.34 BPM on 12 subjects running at up to 15 km/h (as of October 31, 2026). It describes that paper's method on that data and does not describe your device.

Is this guide medical advice?

No. This is an engineering write-up for general wellness products. It is not a medical device guide. It makes no claim about diagnosis or treatment.

If you want help setting up a heart rate test for your wearable, tell us about your device. You can also read about our health wearable development, which covers general wellness products only.

Sources

All pages accessed October 31, 2026.

Planning a health wearable? Tell us what it needs to do. A Duobay engineer replies within 1 business day. Send a project brief →

Related reading

More engineering guides

Have a dev kit and a deadline?

Tell us what the device must do. An engineer replies within 1 business day with questions, not a sales deck.

Talk to an engineer