【发布时间】:2014-07-09 21:35:00
【问题描述】:
我正在开发一个应用程序,我必须读取直到一分钟的心跳并从中计算心率变异性。
为了阅读心跳,我使用的是表带(Polar)
Heart beat reading code I have used from link
为了计算 HRV,我浏览了以下链接,但没有任何帮助:
请提供我可以从 HR 中得到 HRV(RMSSD) 的公式,得到 HR 的持续时间是一分钟。
任何帮助将不胜感激..
编辑:
我通过以下代码获得了 RR 值:
- (void) updateWithHRMData:(NSData *)datas {
const uint8_t *reportData = [datas bytes];
uint16_t bpm = 0;
uint16_t bpm2 = 0;
if ((reportData[0] & 0x04) == 0)
{
NSLog(@"%@", @"Data are not present");
}
else
{
bpm = CFSwapInt16LittleToHost(*(uint16_t *)(&reportData[2]));
bpm2 = CFSwapInt16LittleToHost(*(uint16_t *)(&reportData[4]));
if (bpm != 0 || bpm2 != 0) {
NSLog(@"%u", bpm);
if (bpm2 != 0) {
NSLog(@"%u", bpm2);
}
}
}
}
我的问题是我得到的 RR 值如下:666,636,645 .... 等
但是当我使用HRV + 应用程序并通过电子邮件导出 RR 值时,它会显示 0.785、0.734、0.724 等值。如果我使用以下公式计算我的 RR 值:
RMSSD =
它给了我完全错误的结果。
请帮忙。
编辑:
//==================RR
if ((reportData[0] & 0x04) == 0)
{
NSLog(@"%@", @"Data are not present");
}
else
{
uint16_t rr2 = CFSwapInt16LittleToHost(*(uint16_t *)(&reportData[2]));
RR = CFSwapInt16LittleToHost(*(uint16_t *)(&reportData[4]));
//sometimes two values of RR may found so there are two RR: RR and rr2 which added in array and all calculation goes after one minute
if (rr2 > 0 || RR > 0) {
NSLog(@"RR2 %u", rr2);
if (rr2>0) {
[RRArray addObject:[NSNumber numberWithInt:rr2]];
}
if (RR != 0) {
NSLog(@"RR %u", RR);
[RRArray addObject:[NSNumber numberWithInt:RR]];
}
}
}
}
【问题讨论】:
-
我不认为这是与编程相关的问题
-
我对我有公式感到困惑,但是为了阅读 HR Peripheral 代表“didUpdateValueForCharacteristic”被调用并从中获取时间戳或其他内容是最大的问题..
-
你能用
NSLog(@"%@",datas)的输出更新你的问题吗?我需要查看传感器的原始数据。我怀疑您的解码代码不正确。您需要检查第 3 位以查看是否存在消耗的能量,并且每个数据包可能有多个 RR 值。同样从阅读论文看来,SSDN 是 HRV,而不是 RMSSD。另请注意,RR 值在数据包中以 1/1024 秒为单位。 -
正如 Paulw11 所建议的,您应该检查数据是否包含 EnergyExpended 数据。另请注意,可能有超过 2 个 RR 值。 RR 值的数量不同,需要计算。你可以在这里查看我的帖子和完整的代码示例:stackoverflow.com/questions/17422218/…