Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /usr/share/nginx/vhosts/sensebridge.net/html/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

Heart Spark Logging (Beta)


Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /usr/share/nginx/vhosts/sensebridge.net/html/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

It’s the data logging version of sensebridge’s heart pendant. It flashes lights in time with your heart, and also logs that data to onboard storage. You can then later retrieve the data and plot it using your computer. Currently Heart Spark Logging is in limited beta, as we work to improve the firmware, software and electronics. There are more technical details for beta users.

Beta units for Heart Spark are all sold out, sorry!

If you’re still interested, email me at eric at sensebridge dot net. If I get enough names I’ll consider a second round of beta units. We are working on a second design of the Heart Spark that will use the ANT+ protocol and Garmin/Suunto chest straps. However, we’re rather busy with conferences and stuff for May and June, so don’t expect to see this new design until July or later.

The following are examples of the kind of data & analysis that the Heart Spark Logging makes possible. All plots are scatter plots, also called xy plots: each point is (minutes, heartrate). This is important – if you just do a line plot of heartrate, the elevated heartrate areas will be expanded because there are a more points/minute in those zones. But, enough with the talk, here are the pretty pictures!

This plot shows two minutes of heart rate data, including some significant variation. It’s likely that I was eating breakfast here while surfing the web – the rising heart rate is presumably when I put more food in my mouth, while the falling is what happens when I stare blankly at the screen…

You can see here that my heart rate is much lower – averaging down in the 50s to low 60s compared to the 90-110 from the previous plot. Note especially in this plot the narrow range of the heart rate – except for that one rise at 345 or so, it’s within a 15 BPM envelop.

This plot shows more normal desk activity for 30 minutes. Heart rate moves up and down between mid 60s and mid 90s, presumably due to small movements in the chair, whether I am typing or not, etc. This data is fairly clean.

All of the data presented in this collection actually comes from one data file: HeartData_WholeDay_2011Jan14.csv. I collected ~14 hours of data, which completely filled the Heart Spark Logging: 61831 data points. It ran from 11am till 1am. The dip at minute 350 is the nap. The half hour is in the clean section at the beginning. Now, let’s have a discussion about noise. The above image shows the post-processing filter ON; it was on for all of the above plots too.

And this one shows it off. You can see that the filter is pretty good about the false negatives (low points, where the Heart Spark has missed a beat, which makes the NEXT beat look like it took twice as long, i.e. has a BPM of half as much). It’s only OK at handling the false positives though, where the Heart Spark has recorded an extra heart-beat where none existed. The filter is implemented in the asymptote graphing code, rather than the Heart Spark itself, because it’s very difficult to make sure that you’re not throwing away real data, or worse, creating fake data via your filtering process. It’s best for the data in the Heart Spark to be as unfiltered as possible, and do all your filtering in analysis later, where you can always rerun it with different settings. Anyway, let’s zoom in on some of the noisest sections and see what we’re really looking at – it’s very difficult to tell what’s going on when you’re looking at 60k data points.

This is from just before the nap, where on the big plot you can see a vertical row of noise. This zoom makes it clear that actually we’ve got about a 6 minute period where the readings become quite funny. I puzzled over this for quite awhile, but then I figured out what this could be. When I lay down for the nap, I started on my side, and I remember the chest strap kind of bunching up. When I rolled over to my back, it unbunched. So, I think this data shows that when the chest strap was bunched up, it didn’t work very well: the average of the lower block may be the correct heart rate, but there are nearly as many false positives as actual readings!

Later on, there is a big rise in the average heart rate (around minute 540 or so). I believe that this is dinner. I walked to a local restaurant, that’s the >100 BPM section at 546-548. I have other data that actually shows that walking at a steady speed results in a very steady heart rate, so I think the slowly rising value here actually indicates that our speed picked up towards the end of the walk. But, we’re talking about noise. You can see that even with the filter on here, there are an awful lot of false positives, as least as compared to the clean section called “Half Hour” a few plots ago. I believe that the primary difference is the wetness of the electrodes on the Heart Spark. Before I put it on, I wet the electrodes using water. It then operates very well for about 150 minutes (2.5 hours), and then you can see the noise really start to get worse. This part over dinner is particularly bad because I am moving more than typical with totally dry electrodes. The solution to this problem is to periodically rewet the electrodes, or use a gel that will not dry out over time.

Anyway, pretty data is pretty, but even this worse-of-noisy data is still pretty usable overall. One thing to mention – even 14 hours of data is enough data to provide for endless amounts of analysis. To put it into perspective, there are 28 plots of data of the size of “Dinner”, which itself obscures a lot of details (compare to the 2 minutes “strange rate spikes? plot we started with – there would be over 400 plots like that!).

Zooming back out again, I want to leave you with a couple of observations on the day as a whole. Do you see the movement up and down? I’m not entirely sure what causes it, but I think it’s food/digestion related. The big spike at minute 20 is probably breakfast. The spike around 150 is lunch (yes, I usually eat lunch only an hour or two after breakfast), which is followed by a slow fall until the nap, then flatness. Then dinner is the rise, again followed by a slow fall. Or it could be something else entirely, perhaps relating to circadian rhythms? Or alertness levels? Until I have lots of data it’ll be rather hard to know. I do have some very interesting data that I collected while sleeping as well, but you’ll have to content yourself with this single data set and its analysis. Unless of course you buy your own Heart Spark Logging :-).


Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /usr/share/nginx/vhosts/sensebridge.net/html/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524

Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /usr/share/nginx/vhosts/sensebridge.net/html/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524