-
• #2
Depends a lot on where / how you wear it, do you move, etc. Like I got the best heart rate signal when I put one of my fingers on top of the hearth rate sensor at a specific way/direction. Not wearing on my wrist...
-
• #3
Hi - in that last photo you posted - the one that says 67 - it looks like you're starting to get a really good reading.
I think the problem you might be hitting is that the sensor takes 10-20 seconds to calibrate itself, so if you move the Bangle, it can take a while before the change you made takes effect.
Also, the heart rate monitor app actually uses a different algorithm to the 'internal' heart rate monitor (because it's attempting to show you real-time values). You should find that in all the cases you show, the internal heart rate monitor (that you'd see used on something like the heart rate widget at https://banglejs.com/apps/#widhrm or any other app that uses heart rate) would be able to get a valid heart rate value for you since it works by finding repeating patterns rather than by detecting peaks.
-
• #4
Depends a lot on where / how you wear it, do you move, etc. Like I got the best heart rate signal when I put one of my fingers on top of the hearth rate sensor at a specific way/direction. Not wearing on my wrist...
You are absolutely correct - after placing the watch on my finger the readings went off the charts. Unfortunately that's not applicable for my use-case as the watch needs to be worn on the wrist.
Hi - in that last photo you posted - the one that says 67 - it looks like you're starting to get a really good reading.
I think the problem you might be hitting is that the sensor takes 10-20 seconds to calibrate itself, so if you move the Bangle, it can take a while before the change you made takes effect.It does get a good reading every now and then but it will just drop to the same levels as shown in the pictures after a couple of seconds. If not else, the readings are inconsistent.
Also, the heart rate monitor app actually uses a different algorithm to the 'internal' heart rate monitor (because it's attempting to show you real-time values). You should find that in all the cases you show, the internal heart rate monitor (that you'd see used on something like the heart rate widget at https://banglejs.com/apps/#widhrm or any other app that uses heart rate) would be able to get a valid heart rate value for you since it works by finding repeating patterns rather than by detecting peaks.
The problem is that I'm trying to implement my own algorithm for detecting R-peaks in the ECG signal, more specifically the Pan Tompkins algorithm. My current implementation seems to work fine with data pulled from PhysioNet but I'm having trouble getting consistent results with the data from my Bangle. My current working theory for why that is is the small difference between the amplitude of noise and R-peaks on Bangle's ECG.
Considering the fact that the signal is much better when placing the sensor on the finger, is there a way to increase the "power"(?) of the sensor?
-
• #5
Bangle.js doesn't actually have an ECG - it's an optical heart rate sensor - so you wouldn't actually expect to get a really spiky ECG-like signal out of it anyway. It's one of the reasons Bangle.js normally uses autocorrelation, which allows it to pull a repetitive signal from the noise.
The sensor itself is analog so I'm afraid short of physically changing hardware there is no way to make it more powerful.
Having said that, if you look at your Bangle you may find that by unscrewing the back (https://www.espruino.com/Bangle.js+Disassembly) and carefully applying some foam to the window at the back to mask off between the LED and photodiode sides of the sensor, you might be able to get it working a bit better than standard.
-
• #6
Thank you for all the information Gordon. As of my original post I have now found that having the watch sitting at a specific spot on my wrist yields better results. This is not ideal for the end-user as they would have to take the time to find the best spot etc. instead of it working "out-of-the-box". I'm not sure how the process works with other smart watches but as long as I know that is something to keep in mind I'm happy.
While I have you here, can I just ask another possibly dumb question - is it normal for the sensor to be affected by movement? Whenever I move my arm etc. the signal jumps up & down in response. I'm just curious because this would make it hard to make precise measurements during any exercise, no? I'm aware of the huge market of wearable fitness trackers etc. so I'm sure that problem has to be solved, I'm just not sure if the heart sensors in other devices aren't affected by movement at all?
Please look at the following video
for a demonstration of the problem. I'm obviously shaking the watch to the extreme but I just wanted to showcase that the BPM measurement is affected by movement as well. I have watched some videos on how optical heart sensors work and it doesn't seem to make sense that it would be affected by movement so any information would be much appreciated.Also thank you for the tip about masking off the two sides of the sensor - hopefully I won't be needing to do that.
-
• #7
is it normal for the sensor to be affected by movement?
In Bangle.js, it is. As a bit of background:
Generally fitness trackers use a green LED and work out the amount of light that's transmitted through the skin. If the tracker loses contact with the skin or presses less hard, it means more light gets through and the reading is knocked off.
Most heart rate monitors tend to use a digital system where the sensor has a digital connection to the microcontroller and outputs a series of numbers with a high dynamic range. Filtering can then be applied on the data that is received. The heart rate sensor will be affected by movement, but algorithms will attempt to filter it out to some extent.
Bangle.js has an analog op-amp connected to the photodiode, and it self-calibrates (basically a capacitor+resistor) then sends an analog signal with less dynamic range to Bangle.js. The problem is that when there's a big swing in the light levels it knocks off the calibration, and the data Bangle.js receives is then wrong.
Because Bangle.js isn't receiving the full dynamic range, there's nothing that can be done in software to get the heart rate signal - it's just not there.
-
• #8
Thank you for that explanation Gordon. If I understand correctly the problem lies in the analog domain due to the self-calibration of the input signal - this means we're not getting raw data but a signal that has already been tinkered with in the analog domain, correct? And I'm assuming that because of the data not being raw, the filters you would normally apply to filter out the movement won't work with Bangle?
I'll play around some more to figure out what would work best for my use case but just understaning all of the above helps a lot so thank you!
-
• #9
we're not getting raw data but a signal that has already been tinkered with in the analog domain, correct?
Yes.
the filters you would normally apply to filter out the movement won't work with Bangle?
Well, you can apply filters, but there won't be anything left when there's movement :)
Hello,
I'm having trouble getting a clear ECG signal from my Bangle. I am using the Heart Rate Monitor app as a reference and what I'm seeing is very low heartbeat peaks compared to the noise. I have watched the following video on the official Espruino channel and the difference is night and day: https://www.youtube.com/watch?v=09hw8nJrWq8
I'm attaching a couple of photos taken of how the signal looks on my watch. I have tried tightening the wristband, flipping the watch so the ECG sensor sits on the other side of my wrist, etc. but had no luck getting the signal to become clearer. I have also checked my settings but couldn't find anything that could affect the ECG.
Is this a defective ECG unit or am I missing something obvious?
Any help would be much appreciated!
3 Attachments