Генерация метки времени для данных Bluetooth HR
Я создаю приложение, которое работает с монитором сердечного ритма Bluetooth (например, Polar H7), и мне нужно, чтобы временные метки были связаны с интервалами RR (разница во времени между последовательными сердцебиениями). Примерно раз в секунду вызывается onData(данные) с передачей необработанных данных - иногда эти данные не содержат интервалов RR, обычно они содержат 1, а иногда - несколько. Эти данные не содержат информации о том, когда были зарегистрированы сердцебиения. Мне нужно сгенерировать метку времени, которая будет добавлена к соответствующему чтению, чтобы создать массив объектов в форме {rrInterval, timestamp}.
Ниже приведен псевдокод для функции onData(data), которая срабатывает каждый раз, когда монитор отправляет данные о частоте сердечных сокращений:
if timerHasNotStarted
var now = Date.now()
startTime = now
lastReadingTime = now
else
for each RR interval in reading
var now = Date.now()
lastReadingTime += rrInterval
msOld = now - lastReadingTime
lastReadingTime должен представлять временную метку интервала RR (он будет немного отключен из-за того, что startTime не представляет временную метку первого чтения, он представляет время, в которое функция получила первое чтение).
msOld представляет время, прошедшее (в миллисекундах) с последнего интервала RR, и всегда должно быть в прошлом, поскольку монитор ЧСС не передает данные мгновенно, он передает один раз в секунду. Однако, когда я регистрирую msOld, многие значения являются отрицательными числами, что означает, что они находятся в будущем. Это, конечно, не правильно и связано с тем, что startTime немного отключен. Вот вывод примера типов значений, которые я получаю для msOld: Значения примера msOld
Есть ли в любом случае точная связь метки времени с интервалами RR, или мне придется сместить startTime на -1 секунду, чтобы все показания были в прошлом? Я видел примеры других приложений, которые связывают интервалы RR с временной меткой, но так как эта информация не передается монитором, я не уверен точно, как они это делают или точна ли она. Любая помощь или руководство в этом вопросе будет высоко ценится.