mirror of
https://github.com/xoseperez/espurna.git
synced 2026-03-13 03:37:05 +01:00
Small improvement in MedianFilter
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// -----------------------------------------------------------------------------
|
||||
// Stream Injector
|
||||
// Median Filter
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
#pragma once
|
||||
@@ -16,27 +16,25 @@ class MedianFilter {
|
||||
if (_data) delete _data;
|
||||
}
|
||||
|
||||
virtual void add(double value) {
|
||||
_data->push_back(value);
|
||||
}
|
||||
|
||||
virtual unsigned char count() {
|
||||
return _data->size();
|
||||
}
|
||||
|
||||
virtual void reset() {
|
||||
double last = _data->empty() ? 0 : _data->back();
|
||||
_data->clear();
|
||||
add(last);
|
||||
}
|
||||
|
||||
virtual void add(double value) {
|
||||
_data->push_back(value);
|
||||
}
|
||||
|
||||
virtual double median(bool do_reset = false) {
|
||||
virtual double result(bool do_reset = false) {
|
||||
|
||||
double sum = 0;
|
||||
|
||||
if (_data->size() == 1) {
|
||||
sum = _data->back();
|
||||
|
||||
} else if (_data->size() == 2) {
|
||||
sum = _data->front();
|
||||
|
||||
} else if (_data->size() > 2) {
|
||||
if (_data->size() > 2) {
|
||||
|
||||
for (unsigned char i = 1; i <= _data->size() - 2; i++) {
|
||||
|
||||
@@ -54,6 +52,10 @@ class MedianFilter {
|
||||
|
||||
sum /= (_data->size() - 2);
|
||||
|
||||
} else if (_data->size() > 0) {
|
||||
|
||||
sum = _data->front();
|
||||
|
||||
}
|
||||
|
||||
if (do_reset) reset();
|
||||
@@ -62,10 +64,6 @@ class MedianFilter {
|
||||
|
||||
}
|
||||
|
||||
virtual unsigned char count() {
|
||||
return _data->size();
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
std::vector<double> *_data;
|
||||
|
||||
@@ -199,11 +199,11 @@ void _powerRead() {
|
||||
void _powerReport() {
|
||||
|
||||
// Get the fitered values
|
||||
_power_current = _filter_current.median(true);
|
||||
_power_current = _filter_current.result(true);
|
||||
#if POWER_HAS_ACTIVE
|
||||
_power_apparent = _filter_apparent.median(true);
|
||||
_power_voltage = _filter_voltage.median(true);
|
||||
_power_active = _filter_active.median(true);
|
||||
_power_apparent = _filter_apparent.result(true);
|
||||
_power_voltage = _filter_voltage.result(true);
|
||||
_power_active = _filter_active.result(true);
|
||||
if (_power_active > _power_apparent) _power_apparent = _power_active;
|
||||
_power_reactive = (_power_apparent > _power_active) ? sqrt(_power_apparent * _power_apparent - _power_active * _power_active) : 0;
|
||||
_power_factor = (_power_apparent > 0) ? _power_active / _power_apparent : 1;
|
||||
|
||||
Reference in New Issue
Block a user