Could time series of of HRM measurement be smoothed
That's kindof what we do - I use correlation - so basically I store a bunch of HRM values and then compare them with themselves shifted by a certain amount. When the heart rate matches you find there's a massive spike in correlation, but any short-term spikes of noise from moving don't correlate so don't really affect the result.
The issue is when you move your arm it knocks the whole sensor off and it takes a few seconds to start producing any value at all. If you install Heart Rate Monitor from the app loader you'll see the exact raw values that are coming in from the sensor - you can see how any large movements knock it out and it takes at least a second, if not more, to recover.
(Note the Heart Rate Monitor app doesn't actually use the Bangle's own HRM calculations because it can't sample the underlying hardware at the same time as Bangle.js is trying it, they're done in JavaScript and don't use the correlation)
I'd tried a few options to get to this stage but I'm totally open to using a better algorithm if someone finds one that works better :)
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
That's kindof what we do - I use correlation - so basically I store a bunch of HRM values and then compare them with themselves shifted by a certain amount. When the heart rate matches you find there's a massive spike in correlation, but any short-term spikes of noise from moving don't correlate so don't really affect the result.
The issue is when you move your arm it knocks the whole sensor off and it takes a few seconds to start producing any value at all. If you install Heart Rate Monitor from the app loader you'll see the exact raw values that are coming in from the sensor - you can see how any large movements knock it out and it takes at least a second, if not more, to recover.
(Note the Heart Rate Monitor app doesn't actually use the Bangle's own HRM calculations because it can't sample the underlying hardware at the same time as Bangle.js is trying it, they're done in JavaScript and don't use the correlation)
I'd tried a few options to get to this stage but I'm totally open to using a better algorithm if someone finds one that works better :)