|
|
@@ -82,6 +82,8 @@ function average(nums:number[], decimalPlaces:number = 1):number {
|
|
|
|
|
|
/**
|
|
|
* Remove elements that are particularly "spiky" compared to the ones next to them.
|
|
|
+ * Since the main concern is about the device heating up from multiple retries, a
|
|
|
+ * cooling "spike" can be a lot larger before it gets excluded.
|
|
|
*
|
|
|
* @param data: The data to remove spikes from, where each object contains a
|
|
|
* data field specified in `dataField`.
|
|
|
@@ -89,6 +91,7 @@ function average(nums:number[], decimalPlaces:number = 1):number {
|
|
|
* it's considered a spike. eg: a difference of 0.1 is 10x an
|
|
|
* earlier diff of 0.01, but isn't a spike. A `minChange` of
|
|
|
* 2 would ignore this.
|
|
|
+* Double this value is used when cooling.
|
|
|
* @param minDiffMultiple: The minimum multiplier of differences between sibling
|
|
|
* elements before it's considered a spike. eg: The
|
|
|
* previous diff was 1.5*C, current diff is 3.8*C, this
|
|
|
@@ -120,8 +123,10 @@ export function removeSpikes(
|
|
|
prevDiff = Math.abs(data[i + 1].value - data[i + 2].value);
|
|
|
thisDiff = Math.abs(data[i].value - data[i + 1].value);
|
|
|
}
|
|
|
+ const isCooling = i > 0 && data[i].value < data[i - 1].value;
|
|
|
+ const minChangeToUse = isCooling ? minChange * 2 : minChange;
|
|
|
|
|
|
- const tooBig = (thisDiff - prevDiff) > minChange
|
|
|
+ const tooBig = (thisDiff - prevDiff) > minChangeToUse
|
|
|
&& (thisDiff / prevDiff) > minDiffMultiple;
|
|
|
if(tooBig) {
|
|
|
console.log(`Removing spike element ${formatTime(data[i].time)}: Value: ${data[i].value}; prevDiff: ${prevDiff}; thisDiff: ${thisDiff}`);
|