【问题标题】:How to get HRV (Heart Rate Variability) from HR (Heart Rate)如何从 HR(心率)获取 HRV(心率变异性)
【发布时间】:2014-07-09 21:35:00
【问题描述】:

我正在开发一个应用程序,我必须读取直到一分钟的心跳并从中计算心率变异性。

为了阅读心跳,我使用的是表带(Polar)

Heart beat reading code I have used from link

为了计算 HRV,我浏览了以下链接,但没有任何帮助:

  1. Research article on SDNN/RMSSD

  2. RMSSD for HRV Analysis

  3. Comparison between HR and 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/…

标签: ios bluetooth heartbeat


【解决方案1】:

您需要执行您的第一篇链接文章第 2.2.1 节中描述的统计计算。

您无法根据心率计算 HRV - 您需要使用 RR 间隔。

您需要检查传感器返回的数据以查看标志字节的第 4 位是否已设置 - 这表示存在 RR 数据。然后,您可以将 RR 数据读入一个数组,将 16 位样本数据转换为 NSNumbers 。您可以修改教程中的代码,将 16 位心跳值转换为 int。

一旦您收集了足够的样本(我不确定 1 分钟的样本在统计上是否有效,但我不是统计学家),然后您就可以执行分析了。

THB 将是数组中 RR 间隔的数量

MRR 或 I(BAR) 你可以计算如下 -

float rrTotal=0;

for (int i=1;i<[rrIntervals count]; i++) {
   rrTotal+=[[rrIntervals objectAtIndex:i] intValue];
}

float mrr = rrTotal/([rrIntervals count]-1);

SDNN(即您的 HRV)计算如下 -

float sdnnTotal = 0;

for (int i=1;i<[rrIntervals count]; i++) {
   sdnTotal+=pow( [[rrIntervals objectAtIndex:i] intValue] - mrr,2) ;
}

float sdnn = sqrt(sdnTotal/([rrIntervals count]-1));

您可以在向数组添加更多数据时不断重新计算 HRV。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
相关资源
最近更新 更多