tapers.h 2.3 KB
Newer Older
thomas.forbriger's avatar
thomas.forbriger committed
1
2
3
4
5
/*! \file tapers.h
 * \brief provide signal tapers (prototypes)
 * 
 * ----------------------------------------------------------------------------
 * 
thomas.forbriger's avatar
thomas.forbriger committed
6
 * $Id: tapers.h,v 1.2 2007-09-07 09:42:34 tforb Exp $
thomas.forbriger's avatar
thomas.forbriger committed
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 * \author Thomas Forbriger
 * \date 06/09/2007
 * 
 * provide signal tapers (prototypes)
 * 
 * Copyright (c) 2007 by Thomas Forbriger (BFO Schiltach) 
 * 
 * REVISIONS and CHANGES 
 *  - 06/09/2007   V1.0   Thomas Forbriger
 * 
 * ============================================================================
 */

// include guard
#ifndef TF_TAPERS_H_VERSION

#define TF_TAPERS_H_VERSION \
  "TF_TAPERS_H   V1.0   "
#define TF_TAPERS_H_CVSID \
thomas.forbriger's avatar
thomas.forbriger committed
26
  "$Id: tapers.h,v 1.2 2007-09-07 09:42:34 tforb Exp $"
thomas.forbriger's avatar
thomas.forbriger committed
27
28
29
30
31

namespace ts {

  namespace tapers {

thomas.forbriger's avatar
thomas.forbriger committed
32
33
34
35
36
37
38
    /*! \brief Taper abstract base class.
     *
     * Use a taper by creating an instance of a derived class, passing the
     * appropriate parameters to the constructor.
     *
     * Then pass any container to function apply.
     */
thomas.forbriger's avatar
thomas.forbriger committed
39
40
    class Taper {
      public:
thomas.forbriger's avatar
thomas.forbriger committed
41
        virtual ~Taper() { }
thomas.forbriger's avatar
thomas.forbriger committed
42
43
44
45
46
        //! apply taper to series container c.
        template<class C>
          void apply(C c) const;
      private:
        //! will be called prior to value to set ranges.
thomas.forbriger's avatar
thomas.forbriger committed
47
        virtual void init(const int& f, const int& l) const =0;
thomas.forbriger's avatar
thomas.forbriger committed
48
        //! returns taper value for sample index i.
thomas.forbriger's avatar
thomas.forbriger committed
49
        virtual double value(const int& i) const =0;
thomas.forbriger's avatar
thomas.forbriger committed
50
51
52
53
    }; // class Taper

    /*----------------------------------------------------------------------*/

thomas.forbriger's avatar
thomas.forbriger committed
54
55
    /*! \brief Provides a Hanning taper (no parameters):
     */
thomas.forbriger's avatar
thomas.forbriger committed
56
    class Hanning: public Taper {
thomas.forbriger's avatar
thomas.forbriger committed
57
58
      public:
        ~Hanning() { }
thomas.forbriger's avatar
thomas.forbriger committed
59
60
61
      private:
        void init(const int& f, const int& l) const;
        double value(const int& i) const;
thomas.forbriger's avatar
thomas.forbriger committed
62
63
        mutable int Mf; //<! first index
        mutable double Mfac; //<! sine function argument scaling
thomas.forbriger's avatar
thomas.forbriger committed
64
65
66
67
    }; // class Hanning

    /*----------------------------------------------------------------------*/

thomas.forbriger's avatar
thomas.forbriger committed
68
    //! inline function for template argument
thomas.forbriger's avatar
thomas.forbriger committed
69
70
71
72
73
74
75
76
    template<class C>
      void Taper::apply(C c) const
      {
        this->init(c.f(), c.l());
        for (int i=c.f(); i<=c.l(); ++i)
        { c(i) *= this->value(i); }
      } // template<class C> void Taper::apply(C c)
    
thomas.forbriger's avatar
thomas.forbriger committed
77
  } // namespace tapers
thomas.forbriger's avatar
thomas.forbriger committed
78
79
80
81
82
83

} // namespace ts

#endif // TF_TAPERS_H_VERSION (includeguard)

/* ----- END OF tapers.h ----- */