findPeaks method
Implementation
int findPeaks(double signalNew) {
x++;
cnt++;
buffer.add(signalNew);
if (signalNew > mx) {
mx = signalNew;
mxPos = x;
}
if (signalNew < mn) {
mn = signalNew;
mnPos = x;
}
if (cnt > MAX_BUFF_LEN) {
cnt = 0;
delta = getMedian(buffer.sublist(x - MAX_BUFF_LEN, x + 1)) +
meanAbsoluteDeviation(
buffer.sublist(x - MAX_BUFF_LEN, x + 1),
);
firstTry = true;
//added
mxPos = 0;
mnPos = 0;
mn = double.infinity;
mx = -double.infinity;
}
if (firstTry) {
if (signalNew < mx - delta) {
maxtab.add([mxPos.toDouble(), mx]);
mn = signalNew;
mnPos = x;
lookForMax = false;
firstTry = false;
cnt = 0;
return 0; //mxPos;
}
if (signalNew > mn + delta) {
mx = signalNew;
mxPos = x;
lookForMax = true;
firstTry = false;
cnt = 0;
}
return 0;
} else {
if (lookForMax) {
if (signalNew < mx - delta) {
if (maxtab.isNotEmpty) {
if (mxPos - maxtab.last[0] <= MAXTAB_MIN) {
mn = signalNew;
mnPos = x;
lookForMax = false;
return 0;
}
if (mxPos - maxtab.last[0] >= MAXTAB_MIN &&
mxPos - maxtab.last[0] < MAXTAB_MAX) {
if (maxtab.last[0] > MAXTAB_CHECK_LEN) {
slope1 = calculateSlope(
buffer.sublist(mxPos - MAXTAB_BUFF, mxPos + 1));
slope2 = calculateSlope(buffer
.sublist(maxtab.last[0].toInt() - MAXTAB_BUFF,
maxtab.last[0].toInt() + 1)
.toList());
if (slope1.abs() < slope2.abs() * 0.5) {
mn = signalNew;
mnPos = x;
lookForMax = false;
return 0;
}
}
}
}
maxtab.add([mxPos.toDouble(), mx]);
mn = signalNew;
mnPos = x;
lookForMax = false;
if (mx < 2.5 * delta) {
delta = (0.85 * delta + 0.15 * mx) * 0.7;
ignore = 0;
} else {
ignore++;
if (ignore > 5) {
delta = getMedian(buffer.sublist(x - MAX_BUFF_LEN, x + 1)) +
meanAbsoluteDeviation(
buffer.sublist(x - MAX_BUFF_LEN, x + 1));
ignore = 0;
}
}
cnt = 0;
return mxPos;
}
} else {
if (signalNew > mn + delta) {
mx = signalNew;
mxPos = x;
lookForMax = true;
}
return 0;
}
}
return 0;
}