26 RegisterPreProcessingModule< MovingAverageFilter > MovingAverageFilter::registerModule(
"MovingAverageFilter");
30 classType =
"MovingAverageFilter";
31 preProcessingType = classType;
32 debugLog.setProceedingText(
"[DEBUG MovingAverageFilter]");
33 errorLog.setProceedingText(
"[ERROR MovingAverageFilter]");
34 warningLog.setProceedingText(
"[WARNING MovingAverageFilter]");
35 init(filterSize,numDimensions);
40 classType =
"MovingAverageFilter";
41 preProcessingType = classType;
42 debugLog.setProceedingText(
"[DEBUG MovingAverageFilter]");
43 errorLog.setProceedingText(
"[ERROR MovingAverageFilter]");
44 warningLog.setProceedingText(
"[WARNING MovingAverageFilter]");
66 if( rhs.initialized ){
79 if( preProcessing == NULL )
return false;
89 errorLog <<
"clone(const PreProcessing *preProcessing) - PreProcessing Types Do Not Match!" << endl;
98 errorLog <<
"process(const VectorDouble &inputVector) - The filter has not been initialized!" << endl;
102 if( inputVector.size() != numInputDimensions ){
103 errorLog <<
"process(const VectorDouble &inputVector) - The size of the inputVector (" << inputVector.size() <<
") does not match that of the filter (" << numInputDimensions <<
")!" << endl;
109 if( processedData.size() == numOutputDimensions )
return true;
122 errorLog <<
"saveModelToFile(string filename) - The MovingAverageFilter has not been initialized" << endl;
127 file.open(filename.c_str(), std::ios::out);
141 if( !file.is_open() ){
142 errorLog <<
"saveModelToFile(fstream &file) - The file is not open!" << endl;
146 file <<
"GRT_MOVING_AVERAGE_FILTER_FILE_V1.0" << endl;
148 file <<
"NumInputDimensions: " << numInputDimensions << endl;
149 file <<
"NumOutputDimensions: " << numOutputDimensions << endl;
158 file.open(filename.c_str(), std::ios::in);
173 if( !file.is_open() ){
174 errorLog <<
"loadModelFromFile(fstream &file) - The file is not open!" << endl;
183 if( word !=
"GRT_MOVING_AVERAGE_FILTER_FILE_V1.0" ){
184 errorLog <<
"loadModelFromFile(fstream &file) - Invalid file format!" << endl;
190 if( word !=
"NumInputDimensions:" ){
191 errorLog <<
"loadModelFromFile(fstream &file) - Failed to read NumInputDimensions header!" << endl;
194 file >> numInputDimensions;
198 if( word !=
"NumOutputDimensions:" ){
199 errorLog <<
"loadModelFromFile(fstream &file) - Failed to read NumOutputDimensions header!" << endl;
202 file >> numOutputDimensions;
206 if( word !=
"FilterSize:" ){
207 errorLog <<
"loadModelFromFile(fstream &file) - Failed to read FilterSize header!" << endl;
213 return init(filterSize,numInputDimensions);
222 if( filterSize == 0 ){
223 errorLog <<
"init(UINT filterSize,UINT numDimensions) - Filter size can not be zero!" << endl;
227 if( numDimensions == 0 ){
228 errorLog <<
"init(UINT filterSize,UINT numDimensions) - The number of dimensions must be greater than zero!" << endl;
234 this->numInputDimensions = numDimensions;
235 this->numOutputDimensions = numDimensions;
236 processedData.clear();
237 processedData.resize(numDimensions,0);
238 initialized =
dataBuffer.
resize( filterSize, VectorDouble(numInputDimensions,0) );
241 errorLog <<
"init(UINT filterSize,UINT numDimensions) - Failed to resize dataBuffer!" << endl;
251 errorLog <<
"filter(const double x) - The filter has not been initialized!" << endl;
255 VectorDouble y =
filter(VectorDouble(1,x));
257 if( y.size() == 0 )
return 0;
265 errorLog <<
"filter(const VectorDouble &x) - The filter has not been initialized!" << endl;
266 return VectorDouble();
269 if( x.size() != numInputDimensions ){
270 errorLog <<
"filter(const VectorDouble &x) - The size of the input vector (" << x.size() <<
") does not match that of the number of dimensions of the filter (" << numInputDimensions <<
")!" << endl;
271 return VectorDouble();
279 for(
unsigned int j=0; j<numInputDimensions; j++){
280 processedData[j] = 0;
284 processedData[j] /= double(inputSampleCounter);
287 return processedData;
virtual bool loadModelFromFile(string filename)
UINT filterSize
The size of the filter.
The MovingAverageFilter implements a low pass moving average filter.
double filter(const double x)
virtual bool deepCopyFrom(const PreProcessing *preProcessing)
string getPreProcessingType() const
bool push_back(const T &value)
bool resize(const unsigned int newBufferSize)
CircularBuffer< VectorDouble > dataBuffer
A buffer to store the previous N values, N = filterSize.
bool copyBaseVariables(const PreProcessing *preProcessingModule)
MovingAverageFilter & operator=(const MovingAverageFilter &rhs)
virtual bool saveModelToFile(string filename) const
UINT inputSampleCounter
A counter to keep track of the number of input samples.
MovingAverageFilter(UINT filterSize=5, UINT numDimensions=1)
virtual ~MovingAverageFilter()
virtual bool process(const VectorDouble &inputVector)