Comparing optical heart rate monitor technical implementations.

.. or why is FitBit’s Heart Rate sensors suck so much

After a recent frustration with my batteries dying I did a review of how different wearable are measuring heart rate. It was interesting to see how engineers at different companies approached accuracy and battery life.

MocaHeart, Samsung Gear S2, Mia Alpha, Apple Watch, Garmin VivoSmart 3, FitBit Surge

Lets see how they line up.

Apple Watch 1

Apple Watch Sensor (source iFixIt)

Apple watch has the most comprehensive sensor array of the all. It includes 2 green LEDs, 2 near infrared LEDs and 2 photodiodes. All hidden behind 4 little Fresnel lens.

A constellation of LED and photodiodes effectively provides 8 separate channels (4 LED x 2 photodiodes). The combination of Green and Infrared also provide different depth of penetration and could potentially also be used to measure oxygen saturation.

Infrared is also an unobtrusive way for continuous measuring. The Apple Watch silently measures every 10minutes, which you don’t notice since it’s using infrared.

In the workout or the heart rate measurement modes the LEDs fire 256 times a second in sequence. This looks like their high resolution mode.

Apple watch in High Resolution Mode 256Hz 2 x Infrared + 2 x Green

When there is low activity the watch will slow down to 64 times a second mode. (which is a 1/4 of 256)

Apple watch in Low Resolution Mode 64Hz 2x Infrared + 2x Green

The low resolution mode helps save power since there is less data to process and LEDs use less power.

Apple watch has the 3rd mode using only the invisible infrared LEDs. It fires 10 times per second. To detect if you are wearing the watch.

Apple watch in the detection mode. 10Hz 1x Infrared

Overall Apple did a good job with the Apple Watch sensor. At times it seems over-engineered, but the results with watchOS 2 are reliable.

Mio Alpha

Mio Alpha was the first wrist worn heart rate monitor that worked. I’ve tested the first generation.

The sensor has two Green LED’s and a photosensor (looks like the popular BPW43S). Both LEDs turn on together, which effectively makes it one channel. (Apple Watch has 8) Using two channels could make it more reliable, but would also increase power consumption to process 2x the sensor data.

Mio Alpha has two modes. Lets call them high and low resolution.

The high resolution mode samples 128 time per second.

Mio Alpha high resolution mode: 128Hz

When there is little movement the watch will slow down to 64Hz to save power. This is the same sample rate the Apple watch uses in the low resolution mode.

* The sensor was developed by Philips.

FitBit Surge

I liked the Surge when it came out, it’s a light GPS watch with heart rate.

It has a sensor layout similar to Mio Alpha.

The photodiode is the same size and the green LED diodes are the same distance apart.

There are two differences:

  • Alpha’s bump is designed to better separate the LEDs from the photodiode.
  • Alpha’s rubber band is designed to block out external light and to prevent movement up and down the wrist.

Let’s see why it sucks so much.

FitBit has only 1 mode and it’s only 25 samples per second. It’s too low to accurately measure high heart rates during an exercise. It might be good enough to measure a resting heart rate, but at 210 beats per minute, thats only 7.5 samples per beat, not enough to reliably measure heart rate during rigorous movement.

FitBit: 25Hz

Keeping it at 25Hz is a strange decision. I can think of a couple of reasons:

  • They could not optimize the algorithms to run at a higher sample rate.
  • They wanted to keep the battery consumption low
  • They licensed an algorithm that was designed for 25Hz and they could not improve on that.

In any case, I think it’s unacceptable to release a product that’s knowingly inaccurate.

Samsung Gear S2

800 samples per second. An overkill. But I should not judge since it gives a resting heart rate reading in a couple of seconds. Faster than any of the other tested devices.

Samsung Gear S2: 800Hz


512 samples per second. Might be an overkill, but could also be used for noise reduction, plus they analyze the pulse shape, so they need a higher resolution.

MOCAheart: 512Hz

Garmin Vivosmart 3

This is the first tracker from a major brand that offers Stress measurement.

The sensor design looks similar to the one in Mio Alpha or the FitBit although the photodiode is slightly smaller.

It offers a good fit without being too tight.

It’s also the only device out of the tested group that offers continuous heart rate monitoring for almost a week on a single charge.

Vivosmart 3 has two heart rate modes. One at 256Hz and one at 32Hz. It looks like the 32Hz mode is used after a good signal is acquired and 32Hz is enough for low resolution continuous monitoring.

Garmin Vivofit 3 at 256Hz

This is the lowest duty cycle I’ve seen in this test. This is where the power savings come from even with this high sample rate.

Even though it has two green LEDs they seem to fire together like in FitBit and Mio Alpha.

Garmin Vivofit 3 at 232Hz


Mio Alpha, Apple Watch and Garmin have the best engineered hardware, others have to compensate with smarter software algorithms.

Apple was the only one using lens to get most of the optical signal, all other devices mechanical design is simpler.

Measurement setup

I’ve used an early GrindSense prototype circuit which I use to track my bruxism.

It’s a BPW34 photodiode and a Transimpedance amplifier connected to a Textronix TDS2014B Oscilloscope.