It seems like monitoring heart rate variability is all the rage now-a-days, and I have some free time to work on projects, so I’ve been working on a chest strap that measures EKG, core and ambient temperature, strap tension (for breath tracking), and includes an accelerometer and a PPG/SpO2 sensor. It logs data to an SD card, and can stream sensor data over BLE.

Please forgive the goofy looking washers as electrodes. The sheen is a silicone conformal coating, as the PPG sensor should have skin contact, and at this stage it doesn’t make sense to invest the engineering time for some other form of casing.
Here’s a dump of some unpolished graphs to show typical performance.

This ECG signal is without software filtering, and really without hardware filtering either (the ADC is a sigma delta ADC, which provides effective decimation at lower sample rates, and there is stuff in the signal chain which does attenuate noise). The board wasn’t laid out as to take a differential measurement – I held one electrode at a low impedance reference voltage and measured the difference between that and the other electrode and was seeing much more line noise. I ended up lifting up some pins on the buffering op amp and ADC and wiring above the board to feed both electrodes into voltage buffers, while also connecting them both to the reference voltage through a very large impedance. I learned my lesson there. There’s also a some signal drift, which is to be expected from the electrochemistry that happens when using stainless steel electrodes.

PPG counts from the MAX30101 look pretty fine despite being on the chest – I found a paper claiming that special setups were needed to measure heart rate from PPG on the chest – but this seems to disprove that. If I hold my breath I see large changes to all the values, which squares with my experience from PPG measurements on the fingers (this is supposedly due to changes in internal pressure dilating or contracting capillaries). I find the idea appealing of measuring periphereal PPG in a time synchronized way to measure pulse wave velocity, but that requires another device and I haven’t decided a good way to keep them synchronized enough to measure very small changes.

And you can probably guess that the regular acceleration spikes on this graph are also heart beats – but it requires sitting very still to get readings where it’s this clear. It’s possible that with filtering it or a different mechanical coupling scheme it would also be clear be while walking around.
Pulling on the strain gauge by hand shows a clear signal, but breaths are not very obvious, the signals are very small, and, for some reason, there’s noticable cross talk from the ECG signal into the temperature and strap tension channels. It’s weird to talk about ECG interfering with other measurements but here we are. It also hasn’t been long enough to rule out a software error somewhere in the chain. It’s possible that the elastic band needs to be sheathed in a low friction fabric to properly pick up tension.
So what is all this?
There are a lot of poor means to estimate one health quantity from the others. Breathing phase affects heart rate and there are algorithms to estimate breath rate from ECG measured heartbeats. PPG gives us a direct measure of capillary dilation, which gives us a fine measure of internal pressure, which is also affected by breath. The strain gauge should directly measure breath rate, and with one breath volume can also be estimated (but the estimates are much bettwer with a pair of straps). The IMU directly measures how much the chest is moving, but there are a lot of other causes of chest movement than just heart rate. This sort of many-sensor strap lets us gather all this data in parallel and a) get the best estimates of all the interesting qualities and b) allows us to work on ways to improve estimates and fill in the gaps if we only have a subset of these sensors (like a normal chest strap heart rate monitor that only has ECG). Each sensor modality is also only a few dollars, nothing about this has been price-prohibitive, only engineering time limited.
So where am I going from here?
I’m going to be wearing this and doing further data analysis and sofware engineering while working on the next version.