Как получить ВСР (вариабельность сердечного ритма) от ЧСС (сердечного ритма)

Я работаю над приложением, в котором я должен прочитать сердцебиение до одной минуты и рассчитать вариабельность сердечного ритма по нему.

для чтения сердцебиения я использую ремешок (Polar)

Чтение кода, которое я использовал по ссылке

Для расчета ВСР я перешел по следующим ссылкам, но ничего не помогает:

  1. Исследовательская статья по SDNN / RMSSD

  2. RMSSD для анализа ВСР

  3. Сравнение между HR и HRV

Пожалуйста, предоставьте формулу, из которой я могу получить HRV(RMSSD) от HR, а продолжительность получения 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]];

            }

        }

    }

}

1 ответ

Вам необходимо выполнить статистические расчеты, описанные в разделе 2.2.1 вашей первой связанной статьи.

Вы не можете рассчитать ВСР по частоте сердечных сокращений - вам нужно использовать интервалы RR.

Вам нужно проверить данные, возвращаемые вашим датчиком, чтобы увидеть, установлен ли бит 4 байта флага - это указывает на наличие данных RR. Затем вы можете прочитать данные RR в массив, преобразовав 16-битные данные образца в NSNumberс. Вы можете адаптировать код из учебника, который преобразует 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 (который является вашей ВСР) рассчитывается следующим образом:

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, добавляя больше данных в массив.

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