CMS50N Bluetooth Pulse OX data format

Hello everyone!

I’m trying to parse raw data from the CMS50N Bluetooth Pulse Ox. I couldn’t find any documents online describing the format, so I’m stuck reverse engineering.

Can someone please help interpret the data? :slight_smile:

Here’s what I could gather so far:

  • Device sends 2 packets per second
  • Each packet is 9 bytes long
  • First 8 bytes look like unsigned ints, and roughly match a Photoplethysmogram graph also seen on the device’s screen
  • Last byte is varying a lot, no idea what it means.

Plot of the first 8 bytes from each packet combined into a single sequence

Plot of the 9th byte taken from each packet.

I guess calculating the heart rate can be done by counting the number of peaks per second (assuming 16 readings measured at the periodic interval = 1 second), but I have absolutely no idea of how to calculate SpO2 or Perfusion Index.

Can anyone guide me to the resources where I can find formulas for this or just general info? Also some examples with real data would be really nice so I could just try to guess what these numbers mean by plugging them in different formulas and seeing what fits.

Thank you!

1 Like

Hi @SergeyPoznyakAkvelon , I’m not sure this will help, but I see there is an app that interprets the data from the CMS50FW - I know that’s a different model than yours, so I’m not sure if the data format is the same. Anyway, that app looks like it’s open source, so I took a quick peak at the github repository https://github.com/albertcbraun/CMS50FW - I’m not much of an Android developer but it looks like they are parsing the dataFrame in this format:

time, spo2Percentage, pulseRate, pulseWaveForm, pulseIntensity, isFingerOutOfSleeve
(from this file: https://github.com/albertcbraun/CMS50FW/blob/master/cms50fwlib/src/main/java/com/albertcbraun/cms50fwlib/DataFrame.java )

So, maybe that last varying digit you’re seeing is the intensity of the pulse?

Anyhow, I hope this helps or at least provides you some leads,
Dean

Hi @dreeds , thanks for your response. Unfortunately it looks like these devices have completely different formats.

I talked with the author of that repo to ask where he found the communication protocol document for this device, but unfortunately he can’t remember.

Here’s two graphs overlayed:
image