source: flair-src/trunk/demos/Sinus/src/MeanFilter.cpp @ 16

Last change on this file since 16 was 16, checked in by Bayard Gildas, 5 years ago

Reformatting

File size: 2.6 KB
RevLine 
[14]1//  created:    2013/06/27
2//  filename:   MeanFilter.cpp
3//
4//  author:     Guillaume Sanahuja
5//              Copyright Heudiasyc UMR UTC/CNRS 7253
6//
7//  version:    $Id: $
8//
9//  purpose:    object computing a mean filter
10//
11//
12/*********************************************************************/
13
14#include "MeanFilter.h"
15#include <cvmatrix.h>
16#include <LayoutPosition.h>
17#include <GroupBox.h>
18#include <SpinBox.h>
19
20using namespace std;
21using namespace flair::core;
22using namespace flair::gui;
23
[16]24namespace flair {
25namespace filter {
[14]26
[16]27MeanFilter::MeanFilter(const IODevice *parent, const LayoutPosition *position,
28                       string name)
29    : IODevice(parent, name) {
30  // interface initialisation
31  groupBox = new GroupBox(position, name);
32  numberOfElements = new SpinBox(groupBox->NewRow(), "numberOfElements:", 1,
33                                 MAX_NUMBER_OF_ELEMENTS,
34                                 1); // saturated to MAX_NUMBER_OF_ELEMENTS
[14]35
[16]36  // init storage
37  for (int i = 0; i < MAX_NUMBER_OF_ELEMENTS; i++)
38    previousValues[i] = 0;
[14]39
[16]40  // 1*1 output matrix
41  cvmatrix_descriptor *desc = new cvmatrix_descriptor(1, 1);
42  desc->SetElementName(0, 0,
43                       "mean filter"); // name will be used for graphs and logs
44  output = new cvmatrix(this, desc, floatType, name);
[14]45
[16]46  AddDataToLog(output);
[14]47}
48
[16]49MeanFilter::~MeanFilter() {}
[14]50
[16]51cvmatrix *MeanFilter::GetMatrix() const { return output; }
[14]52
[16]53float MeanFilter::GetValue(void) const { return output->Value(0, 0); }
[14]54
[16]55// UpdateFrom, where we implement the filter
56// this method is automatically called when the parent IODevice calls
57// ProcessUpdate
58// in our case it is the sinus or the 1st orde law pass filter
[14]59//(see in Sinus::Run the call to ProcessUpdate)
60void MeanFilter::UpdateFrom(const io_data *data) {
61
[16]62  float result = 0;
63  // get input argument in a cvmatrix
64  cvmatrix *input = (cvmatrix *)data;
[14]65
[16]66  // simple (and not efficent!) implementation of the filter
67  previousValues[numberOfElements->Value() - 1] = input->Value(0, 0);
68  for (int i = 0; i < numberOfElements->Value(); i++)
69    result += previousValues[i];
70  for (int i = 1; i < numberOfElements->Value(); i++)
71    previousValues[i - 1] = previousValues[i];
[14]72
[16]73  // put the result in output matrix
74  output->SetValue(0, 0, result / numberOfElements->Value());
75  // put corresponding time
76  output->SetDataTime(data->DataTime());
[14]77
[16]78  // ProcessUpdate is very important
79  // we must call it after updating the output matrix
80  // it allows:
81  // -to save value in the logs
82  // -to automatically call the next filter UpdateFrom method
83  ProcessUpdate(output);
[14]84}
[16]85} // end namespace filter
86} // end namespace flair
Note: See TracBrowser for help on using the repository browser.