From 3be5a559ad790b5c182722031a416ac47e50704c Mon Sep 17 00:00:00 2001 From: Charlie Jaewoong Mun <40027494+happybono@users.noreply.github.com> Date: Mon, 7 Feb 2022 00:38:52 +0900 Subject: [PATCH] Update RunningMedian.cpp --- FinedustMonitor/RunningMedian.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/FinedustMonitor/RunningMedian.cpp b/FinedustMonitor/RunningMedian.cpp index e21e0f4..66e3286 100644 --- a/FinedustMonitor/RunningMedian.cpp +++ b/FinedustMonitor/RunningMedian.cpp @@ -1,7 +1,7 @@ // // FILE: RunningMedian.cpp // AUTHOR: Rob Tillaart -// VERSION: 0.3.3 +// VERSION: 0.3.4 // PURPOSE: RunningMedian library for Arduino // // HISTORY: @@ -26,9 +26,10 @@ // 0.2.2 2021-01-03 add Arduino-CI + unit tests // 0.3.0 2021-01-04 malloc memory as default storage // 0.3.1 2021-01-16 Changed size parameter to 255 max -// 0.3.2 2021-01-21 replaced bubbleSort by insertionSort +// 0.3.2 2021-01-21 replaced bubbleSort by insertionSort // --> better performance for large arrays. -// 0.3.3 2021-01-22 better insertionSort (+ cleanup test code) +// 0.3.3 2021-01-22 better insertionSort (+ clean up test code) +// 0.3.4 2021-12-28 update library.json, readme, license, minor edits #include "RunningMedian.h" @@ -95,19 +96,19 @@ float RunningMedian::getMedian() } -float RunningMedian::getQuantile(float q) +float RunningMedian::getQuantile(float quantile) { if (_count == 0) return NAN; - - if ((q < 0) || (q > 1)) return NAN; + + if ((quantile < 0) || (quantile > 1)) return NAN; if (_sorted == false) sort(); - - const float id = (_count - 1) * q; - const uint8_t lo = floor(id); - const uint8_t hi = ceil(id); - const float qs = _values[_sortIdx[lo]]; - const float h = (id - lo); + + const float index = (_count - 1) * quantile; + const uint8_t lo = floor(index); + const uint8_t hi = ceil(index); + const float qs = _values[_sortIdx[lo]]; + const float h = (index - lo); return (1.0 - h) * qs + h * _values[_sortIdx[hi]]; } @@ -187,7 +188,7 @@ float RunningMedian::predict(const uint8_t n) void RunningMedian::sort() { - // insertSort + // insertSort for (uint16_t i = 1; i < _count; i++) { uint16_t z = i; @@ -202,4 +203,6 @@ void RunningMedian::sort() _sorted = true; } + // -- END OF FILE -- +