Генерация метки времени для данных 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 с временной меткой, но так как эта информация не передается монитором, я не уверен точно, как они это делают или точна ли она. Любая помощь или руководство в этом вопросе будет высоко ценится.

0 ответов

Другие вопросы по тегам