gpt4 book ai didi

ios - 如何从HR(心率)得到HRV(心率变异性)

转载 作者:可可西里 更新时间:2023-11-01 05:53:54 32 4
gpt4 key购买 nike

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

为了读取心跳,我使用的是表带(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 = enter image description here

它给了我完全错误的结果。

请帮忙。

编辑:

 //==================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]];

}

}

}

}

最佳答案

您需要执行第一篇链接文章第 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。

关于ios - 如何从HR(心率)得到HRV(心率变异性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24624039/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com