BeoSubSensor.H

Go to the documentation of this file.
00001 /*!@file BeoSub/BeoSubSensor.H Basic sensor encapsulation for the BeoSub */
00002 
00003 // //////////////////////////////////////////////////////////////////// //
00004 // The iLab Neuromorphic Vision C++ Toolkit - Copyright (C) 2000-2003   //
00005 // by the University of Southern California (USC) and the iLab at USC.  //
00006 // See http://iLab.usc.edu for information about this project.          //
00007 // //////////////////////////////////////////////////////////////////// //
00008 // Major portions of the iLab Neuromorphic Vision Toolkit are protected //
00009 // under the U.S. patent ``Computation of Intrinsic Perceptual Saliency //
00010 // in Visual Environments, and Applications'' by Christof Koch and      //
00011 // Laurent Itti, California Institute of Technology, 2001 (patent       //
00012 // pending; application number 09/912,225 filed July 23, 2001; see      //
00013 // http://pair.uspto.gov/cgi-bin/final/home.pl for current status).     //
00014 // //////////////////////////////////////////////////////////////////// //
00015 // This file is part of the iLab Neuromorphic Vision C++ Toolkit.       //
00016 //                                                                      //
00017 // The iLab Neuromorphic Vision C++ Toolkit is free software; you can   //
00018 // redistribute it and/or modify it under the terms of the GNU General  //
00019 // Public License as published by the Free Software Foundation; either  //
00020 // version 2 of the License, or (at your option) any later version.     //
00021 //                                                                      //
00022 // The iLab Neuromorphic Vision C++ Toolkit is distributed in the hope  //
00023 // that it will be useful, but WITHOUT ANY WARRANTY; without even the   //
00024 // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //
00025 // PURPOSE.  See the GNU General Public License for more details.       //
00026 //                                                                      //
00027 // You should have received a copy of the GNU General Public License    //
00028 // along with the iLab Neuromorphic Vision C++ Toolkit; if not, write   //
00029 // to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,   //
00030 // Boston, MA 02111-1307 USA.                                           //
00031 // //////////////////////////////////////////////////////////////////// //
00032 //
00033 // Primary maintainer for this file: Laurent Itti <itti@usc.edu>
00034 // $HeadURL: svn://isvn.usc.edu/software/invt/trunk/saliency/src/BeoSub/BeoSubSensor.H $
00035 // $Id: BeoSubSensor.H 5709 2005-10-13 07:53:05Z ilab16 $
00036 //
00037 
00038 #ifndef BEOSUBSENSOR_H_DEFINED
00039 #define BEOSUBSENSOR_H_DEFINED
00040 
00041 #include "Util/Angle.H"
00042 #include "Util/Types.H"
00043 #include <deque>
00044 #include <pthread.h>
00045 
00046 //! Definition and access functions for a BeoSub sensor
00047 /*! This class encapsulates a basic BeoSub sensor. Sensed data
00048   consists of streams of T (the template argument) values.
00049   Measurements received (e.g., through BeoChip events) are passed to
00050   the BeoSubSensor via the newMeasurement() function. Current filtered
00051   value is available via the getValue() function. The class is
00052   thread-safe. */
00053 template <class T> class BeoSubSensor
00054 {
00055 public:
00056   //! Constructor
00057   /* Build a new sensor.
00058      @param qlen length of the internal queue used to store the received
00059      data and compute the filtered sensor value.
00060      @param decay exponential decay by which older values contribute to the
00061      returned average measurement. */
00062   BeoSubSensor(const uint qlen = 6, const double decay = 1.0);
00063 
00064   //! Destructor
00065   ~BeoSubSensor();
00066 
00067   //! Receive a new measurement value
00068   void newMeasurement(const T& val);
00069 
00070   //! Get current filtered value
00071   T getValue() const;
00072 
00073   //! Clear all past measurements
00074   void reset();
00075 
00076   //! Check whether received values are well behaved
00077   bool check() const;
00078 
00079 private:
00080   std::deque<T> itsQ;
00081   uint itsQlen;
00082   bool itsCacheValid;
00083   T itsCachedValue;
00084   double itsDecay;
00085   pthread_mutex_t itsMutex;
00086 };
00087 
00088 //! Helper function: compute averaged sensor measurements
00089 template <class T>
00090 T averageBeoSubSensorValue(const std::deque<T> data,
00091                            const double factor = 1.0);
00092 
00093 //! Helper function: compute averaged sensor measurements, Angle version
00094 Angle averageBeoSubSensorValue(std::deque<Angle> data,
00095                                const double factor = 1.0);
00096 
00097 #endif
00098 
00099 // ######################################################################
00100 /* So things look consistent in everyone's emacs... */
00101 /* Local Variables: */
00102 /* indent-tabs-mode: nil */
00103 /* End: */
Generated on Sun May 8 08:04:32 2011 for iLab Neuromorphic Vision Toolkit by  doxygen 1.6.3