00001 #include "robodyn_utilities/MedianFilter.h" 00002 00003 MedianFilter::MedianFilter(): 00004 size(1) 00005 { 00006 } 00007 00008 MedianFilter::~MedianFilter() 00009 { 00010 } 00011 00012 void MedianFilter::setSize(unsigned int size) 00013 { 00014 if (size > 0) 00015 { 00016 this->size = size; 00017 } 00018 else 00019 { 00020 this->size = 1; 00021 } 00022 } 00023 00024 void MedianFilter::addValue(double newValue) 00025 { 00026 while (values.size() >= size) 00027 { 00028 values.pop_front(); 00029 } 00030 00031 values.push_back(newValue); 00032 } 00033 00034 double MedianFilter::getMedian() 00035 { 00036 std::deque<double> temp = values; 00037 00038 std::sort(temp.begin(), temp.end()); 00039 00040 if (temp.size() % 2 == 0) 00041 { 00042 median = (temp[temp.size() / 2 - 1] + temp[temp.size() / 2]) / 2; 00043 } 00044 else 00045 { 00046 median = temp[temp.size() / 2]; 00047 } 00048 00049 return median; 00050 } 00051 00052 double MedianFilter::getMedian(double newValue) 00053 { 00054 addValue(newValue); 00055 00056 return getMedian(); 00057 }