Here is my result! I produced these plots using Python with numpy and matplotlib. The analysis supports the claim that an inexpensive and open hardware can match the performance of a commercial pulse oximeter. There is a lot of available data too.
The hardest bit so far has been trying to get 2 serial devices to synchronize within 2 milliseconds of one another. I had some success. Using 2 of the researchers pulse oximeters, and at least 7 subjects, I managed to get clean photoplethysmograms (PPG waveforms)!
Over the course of the week, I also managed to synchronize 2 Pulse Sensor Amped and get at least 2 clean waveforms with the promise of more and I also synchronized one CMS D50+ pulse ox and one Pulse Sensor Amped pulse sensor and get a few clean waveforms.
These data are meant to help my fellow teacher researchers in answering their questions more so than mine, but it is nice to be helpful.
Best timing results for all systems (once synchronized by hand) was time resolution of ±3 m/s. This is enough to characterize a single waveform and even to find the pulse transit time.
This video compares the signal between 2 type of PPG. Read on for lots of details!
This week, I have been tinkering with 3 different ways to read ones pulse. This technique is called photoplethysmography. Light is emitted into tissue with a capillary bed not far from the skin surface. One can measure how much light passes through the skin or how much light is reflected. Both type of photoplethysmography, transmissive and reflective, have pros and cons. Transmissive signals can provide information about blood oxygen content more accurately than reflective signals. But for digital signal processing (DSP) which is what I am after, they both work very well. The signal or pulse is called the photoplethysmogram or PPG. I want to display the signal in real time. Perhaps even provide some analysis of pulmonary physiological parameters such as heart rate variability or inter-beat interval.
A quick search on your favorite store or search engine will show you plenty of inexpensive, reliable home pulse oximeters (finger-in, transmissive photoplethysmographs.
But if the user wants access to the actual data without using a propriety software package, they are out of luck unless they find a way to crack the transmission protocol. I happen to have access to pulse-ox where the protocol has been cracked and the signal can be accessed directly. But if I want to share what I am doing with students, I feel like they should have access to the hardware and software information without fear of violating someone copyright. There are several different types of open hardware pulse sensors. Today I am going to compare a “raw” PPG to one provided by one of these open hardware sensors. I decided to use the Adafruit Circuit Playground Express as the platform for the “firmware”. This way, I can use both the on-board light sensor and the nearest LED to that sensor as one type of pulse sensor. I also added the Pulse Sensor Amped to the circuit as well. Then I plotted the PPG from both sensors on to one plot using the serial plotter in the Arduino IDE.
The Pulse Sensor Amped circuit has some built-in filtering to ignore the so-called “DC” component of the signal. This low frequency signal is not useful for health purposes. The red signal has the DC component filtered out (and the AC component amplified too) whereas the blue signal which is the unfiltered signal directly from the light sensor built in the board is smaller and shows a secondary trend beyond the higher frequency pulse signal.