I think the above is a pretty good write-up, but just to mention here there are a few factors that delay getting good readings...
The main one is just the pressure of the watch against your skin - during acceleration that will change, and will change the reading.
However if that reading changes too much the HRM sensor will adjust its exposure to compensate - and if that happens when movement stops it can take a few seconds for exposure to readjust (exposure compensation could be disabled during periods of high movement).
Then there's the median filter. Generally we do just give you whatever reading we can get, but after a lot of bad data as mentioned it'll take at least good 8 readings I think before all the bad ones drop off
The algorithm can definitely be improved (although I have tried a few different methods already), but a few people have said they'll look into it and sadly there hasn't been anything yet. I did make a repository containing a test harness and data (see http://forum.espruino.com/conversations/373033/#comment16554946) so that could be a good starting point as you can run that just on your PC so can easily make changes and debug it
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.
I think the above is a pretty good write-up, but just to mention here there are a few factors that delay getting good readings...
The algorithm can definitely be improved (although I have tried a few different methods already), but a few people have said they'll look into it and sadly there hasn't been anything yet. I did make a repository containing a test harness and data (see http://forum.espruino.com/conversations/373033/#comment16554946) so that could be a good starting point as you can run that just on your PC so can easily make changes and debug it