calculateBasalHeartRate method

void calculateBasalHeartRate()

basalHeartRate = average FHR over low variation episodes

  1. bradycardia basalHeartRate <= 110 bpm
  2. tachycardia basalHeartRate >= 160 bpm
  3. If no episodes of low variation are identified, it is derived from the frequency distribution of pulse intervals used in the baseline fitting algorithm (not implemented yet)

TODO: How to consider parallel scanning of signal for deaccelerations and processing? Are we loosing some part of signal here?

Implementation

void calculateBasalHeartRate() {
  int size = millisecondsEpoch.length;

  calculateLengthOfFHREpisodes(millisecondsEpoch, baselineFHRDR);

  if (lowFHRVariationBpm! > 0) {
    basalHeartRate = lowFHRVariationBpm;
  } else {
    // calculate it from frequency distribution of intervals. Consider mean?
    double sumOfValuesBpm = 0, zeroValuesBpm = 0;
    for (int i = 0; i < size; i++) {
      if (millisecondsEpoch[i] != 0) {
        sumOfValuesBpm += (SIXTY_THOUSAND_MS / millisecondsEpoch[i]!).truncate();
      } else {
        zeroValuesBpm++;
      }
    }
    basalHeartRate = (sumOfValuesBpm / size).truncate();
  }


  if (basalHeartRate! <= 110) {
    isBradycardia = true;
  } else {
    isBradycardia = false;
  }

  if (basalHeartRate! >= 160) {
    isTachycardia = true;
  } else {
    isTachycardia = false;
  }

  //rounding off to 5
  if(basalHeartRate!%5>=3){
    basalHeartRate = basalHeartRate! - (basalHeartRate!%5);
    basalHeartRate = basalHeartRate! + 5;
  }else{
    basalHeartRate = basalHeartRate! - (basalHeartRate!%5);
  }
  //return basalHeartRate;
}