41 void FilterAverage::push_to_buffer(
double y) {
43 while (buffer.size() > window_size) {
48 double FilterAverage::next(
double y) {
49 if (window_size <= 0) {
51 double alpha = 1.0/count;
52 return (value=((1.0-alpha)*value)+(alpha*y));
56 for (deque<double>::iterator iter = buffer.begin(); iter != buffer.end(); iter++) {
59 return (value=sum/buffer.size());
67 double FilterAverage::deviation()
const {
69 if (buffer.size() == 0)
return 0;
70 for (deque<double>::const_iterator iter = buffer.begin(); iter != buffer.end(); iter++) {
71 double val = ((double)*iter)-value;
78 double FilterMedian::next(
double y) {
79 if (window_size <= 1)
return y;
81 copy(buffer.begin(), buffer.end(), sort_buffer.begin());
82 int nth = buffer.size()/2;
83 nth_element(sort_buffer.begin(), sort_buffer.begin() + nth, sort_buffer.begin()+buffer.size());
84 return value = sort_buffer[nth];
87 double FilterRunningAverage::next(
double y) {
92 value = ((1.0-alpha) * value) + (alpha * (double)y);
99 double FilterDoubleExponentialSmoothing::next(
double y) {
106 double value_prev = value;
107 value = ((1.0-alpha) * (value + slope)) + (alpha * (
double)y);
108 slope = ((1.0-gamma) * (slope)) + (gamma * (value - value_prev));
This file implements multiple filters.
Class for handling an array of filtered values.
This file defines library export definitions, version numbers and build information.