21 #define GRT_DLL_EXPORTS
31 classType =
"WeightedAverageFilter";
32 preProcessingType = classType;
33 debugLog.setProceedingText(
"[DEBUG WeightedAverageFilter]");
34 errorLog.setProceedingText(
"[ERROR WeightedAverageFilter]");
35 warningLog.setProceedingText(
"[WARNING WeightedAverageFilter]");
36 init(filterSize,numDimensions);
41 classType =
"WeightedAverageFilter";
42 preProcessingType = classType;
43 debugLog.setProceedingText(
"[DEBUG WeightedAverageFilter]");
44 errorLog.setProceedingText(
"[ERROR WeightedAverageFilter]");
45 warningLog.setProceedingText(
"[WARNING WeightedAverageFilter]");
68 if( rhs.initialized ){
81 if( preProcessing == NULL )
return false;
91 errorLog <<
"clone(const PreProcessing *preProcessing) - PreProcessing Types Do Not Match!" << std::endl;
100 errorLog <<
"process(const VectorFloat &inputVector) - The filter has not been initialized!" << std::endl;
104 if( inputVector.size() != numInputDimensions ){
105 errorLog <<
"process(const VectorFloat &inputVector) - The size of the inputVector (" << inputVector.size() <<
") does not match that of the filter (" << numInputDimensions <<
")!" << std::endl;
111 if( processedData.size() == numOutputDimensions )
return true;
123 if( !file.is_open() ){
124 errorLog <<
"save(fstream &file) - The file is not open!" << std::endl;
128 file <<
"GRT_MOVING_AVERAGE_FILTER_FILE_V1.0" << std::endl;
130 file <<
"NumInputDimensions: " << numInputDimensions << std::endl;
131 file <<
"NumOutputDimensions: " << numOutputDimensions << std::endl;
132 file <<
"FilterSize: " <<
filterSize << std::endl;
139 if( !file.is_open() ){
140 errorLog <<
"load(fstream &file) - The file is not open!" << std::endl;
149 if( word !=
"GRT_MOVING_AVERAGE_FILTER_FILE_V1.0" ){
150 errorLog <<
"load(fstream &file) - Invalid file format!" << std::endl;
156 if( word !=
"NumInputDimensions:" ){
157 errorLog <<
"load(fstream &file) - Failed to read NumInputDimensions header!" << std::endl;
160 file >> numInputDimensions;
164 if( word !=
"NumOutputDimensions:" ){
165 errorLog <<
"load(fstream &file) - Failed to read NumOutputDimensions header!" << std::endl;
168 file >> numOutputDimensions;
172 if( word !=
"FilterSize:" ){
173 errorLog <<
"load(fstream &file) - Failed to read FilterSize header!" << std::endl;
179 return init(filterSize,numInputDimensions);
188 if( filterSize == 0 ){
189 errorLog <<
"init(UINT filterSize,UINT numDimensions) - Filter size can not be zero!" << std::endl;
193 if( numDimensions == 0 ){
194 errorLog <<
"init(UINT filterSize,UINT numDimensions) - The number of dimensions must be greater than zero!" << std::endl;
200 this->numInputDimensions = numDimensions;
201 this->numOutputDimensions = numDimensions;
202 processedData.clear();
204 processedData.
resize(numDimensions,0);
214 errorLog <<
"init(UINT filterSize,UINT numDimensions) - Failed to resize dataBuffer!" << std::endl;
224 errorLog <<
"filter(const Float x) - The filter has not been initialized!" << std::endl;
230 if( y.size() == 0 )
return 0;
238 errorLog <<
"filter(const VectorFloat &x) - The filter has not been initialized!" << std::endl;
242 if( x.size() != numInputDimensions ){
243 errorLog <<
"filter(const VectorFloat &x) - The size of the input vector (" << x.size() <<
") does not match that of the number of dimensions of the filter (" << numInputDimensions <<
")!" << std::endl;
253 for(
unsigned int j=0; j<numInputDimensions; j++){
254 processedData[j] = 0;
258 weightSum += weights[i];
260 if( weightSum != 0.0 ) processedData[j] /= weightSum;
263 return processedData;
bool push_back(const T &value)
virtual ~WeightedAverageFilter()
UINT inputSampleCounter
A counter to keep track of the number of input samples.
virtual bool resize(const unsigned int size)
WeightedAverageFilter & operator=(const WeightedAverageFilter &rhs)
CircularBuffer< VectorFloat > dataBuffer
A buffer to store the previous N values, N = filterSize.
virtual bool deepCopyFrom(const PreProcessing *preProcessing)
The WeightedAverageFilter implements a weighted average filter that gives a larger weight to more rec...
WeightedAverageFilter(UINT filterSize=5, UINT numDimensions=1)
std::string getPreProcessingType() const
virtual bool process(const VectorFloat &inputVector)
virtual bool save(std::fstream &file) const
UINT filterSize
The size of the filter.
Float filter(const Float x)
bool copyBaseVariables(const PreProcessing *preProcessingModule)
virtual bool load(std::fstream &file)
VectorFloat weights
Stores the weights for each sample in the buffer, the size of this vector will match the filterSize...
bool resize(const unsigned int newBufferSize)