calculateBaselineFHRDR method
Calculates the baseline fetal heart rate (FHR) using Dawes-Redman criteria.
Returns a list of baseline FHR values.
Implementation
List<int> calculateBaselineFHRDR() {
int size = millisecondsEpoch.length;
baselineFHRDR = List.filled(size, null, growable: false);
int buckets = 1001, modeIndex = 0;
List<int?> freq = List.filled(buckets, null, growable: false);
int? mode = 0,
sumOfValues = 0,
limitingValue = 0; // 60-220 bpm = 1000-272 ms
/** calculate frequency distribution of intervals**/
for (int i = 0; i < buckets; i++) {
freq[i] = 0;
}
for (var epoch in millisecondsEpoch) {
if (epoch == 0 || epoch! >= buckets) {
freq[0] = freq[0]! + 1;
} else {
freq[epoch] = freq[epoch]! + 1;
}
/*for (int i = 0; i < buckets; i++) {
if (Math.round(beat) == (double) i) {
freq[i]++;
}
}*/
}
/** calculate peak frequency or mode **/
for (int i = 1; i < buckets - 1; i++) {
if (freq[i]! > mode!) {
mode = freq[i];
modeIndex = i;
}
}
int peak = 0;
/** calculate limiting parameter **/
for (int i = buckets - 1; i >= 5; i--) {
if (sumOfValues! > (0.125 * (size - freq[0]!))) {
if (freq[i]! >= freq[i - 5]! &&
freq[i]! >= freq[i - 4]! &&
freq[i]! >= freq[i - 3]! &&
freq[i]! >= freq[i - 2]! &&
freq[i]! >= freq[i - 1]!) {
if (freq[i]! > 0.005 * size || (modeIndex - i) <= 30) {
limitingValue = i;
peak = i;
break;
}
}
}
sumOfValues += freq[i]!;
}
if (limitingValue == 0) limitingValue = modeIndex;
/** apply band filter with the use of limiting value **/
baselineFHRDR![0] = millisecondsEpoch[0];
for (int i = 1; i < size - 1; i++) {
if (millisecondsEpoch[i] == 0) {
baselineFHRDR![i] =
millisecondsEpoch[i]; //avgLastMin(baselineFHRDR, i - 1);;
} else {
if (millisecondsEpoch[i]! >= (limitingValue! - 60) &&
millisecondsEpoch[i]! <=
(limitingValue + 60)) {
// 60 is given in the literature
baselineFHRDR![i] = millisecondsEpoch[i];
} else {
baselineFHRDR![i] = baselineFHRDR![i -
1]; //avgLastMin(baselineFHRDR, i - 1); //interpolate over previous values
}
}
if (baselineFHRDR![i]!.isNaN) baselineFHRDR![i] = baselineFHRDR![0];
}
baselineFHRDR![size - 1] = avgLastMin(baselineFHRDR, size - 2);
return convertBaselineEpochToBPMArrayList(baselineFHRDR!);
}