diff --git a/Mk2_3phase_RFdatalog_temp/ewma_avg.hpp b/Mk2_3phase_RFdatalog_temp/ewma_avg.hpp index dbc79bde..2bc7e72a 100644 --- a/Mk2_3phase_RFdatalog_temp/ewma_avg.hpp +++ b/Mk2_3phase_RFdatalog_temp/ewma_avg.hpp @@ -73,18 +73,28 @@ class EWMA_average public: void addValue(int32_t input) { - w = w - x + input; - x = w >> round_up_to_power_of_2(A); + ema_raw = ema_raw - ema + input; + ema = ema_raw >> round_up_to_power_of_2(A); + + ema_ema_raw = ema_ema_raw - ema_ema + ema; + ema_ema = ema_ema_raw >> round_up_to_power_of_2(A); + } + + auto getAverageS() const + { + return ema; } - auto getAverage() const + auto getAverageD() const { - return x; + return (ema << 1) - ema_ema; } private: - int32_t w{ 0 }; - int32_t x{ 0 }; + int32_t ema_ema_raw{ 0 }; + int32_t ema_ema{ 0 }; + int32_t ema_raw{ 0 }; + int32_t ema{ 0 }; }; #endif \ No newline at end of file diff --git a/Mk2_3phase_RFdatalog_temp/utils_relay.h b/Mk2_3phase_RFdatalog_temp/utils_relay.h index 1d907648..4c4beca0 100644 --- a/Mk2_3phase_RFdatalog_temp/utils_relay.h +++ b/Mk2_3phase_RFdatalog_temp/utils_relay.h @@ -286,7 +286,7 @@ class RelayEngine */ inline static auto get_average() { - return ewma_average.getAverage(); + return ewma_average.getAverageS(); } /** @@ -313,13 +313,13 @@ class RelayEngine return; } - if (ewma_average.getAverage() > 0) + if (ewma_average.getAverageS() > 0) { // Currently importing, try to turn OFF some relays uint8_t idx{ N }; do { - if (relay[--idx].proceed_relay(ewma_average.getAverage())) + if (relay[--idx].proceed_relay(ewma_average.getAverageS())) { settle_change = 60; return; @@ -332,7 +332,7 @@ class RelayEngine uint8_t idx{ 0 }; do { - if (relay[idx].proceed_relay(ewma_average.getAverage())) + if (relay[idx].proceed_relay(ewma_average.getAverageS())) { settle_change = 60; return; diff --git a/dev/MathPerfTests/MathPerfTests.ino b/dev/MathPerfTests/MathPerfTests.ino index 0563a445..bbc0f240 100644 --- a/dev/MathPerfTests/MathPerfTests.ino +++ b/dev/MathPerfTests/MathPerfTests.ino @@ -67,10 +67,9 @@ public: ema_ema_raw = ema_ema_raw - ema_ema + ema; ema_ema = ema_ema_raw >> round_up_to_power_of_2(A); - } - auto getAverage() const + auto getAverageS() const { return ema; } @@ -159,7 +158,7 @@ void loop() Serial.print(" | "); Serial.print(input_data[i]); Serial.print(" | "); - Serial.print(ewma_average.getAverage()); + Serial.print(ewma_average.getAverageS()); Serial.print(" | "); Serial.println(ewma_average.getAverageD()); @@ -174,7 +173,7 @@ void loop() Serial.print(sliding_Average.getAverage()); Serial.print(" - "); - Serial.print(ewma_average.getAverage()); + Serial.print(ewma_average.getAverageS()); Serial.print(" - "); Serial.print(ewma_average.getAverageD()); Serial.print(" - ");