FFTWindow.h
1 #ifndef FFTTOOLS_FFTWINDOW_H
2 #define FFTTOOLS_FFTWINDOW_H
3 
4 class TGraph;
5 #include <stddef.h>
6 
7 namespace FFTtools
8 {
9 
10 
12  {
13 
14  public:
15  virtual double value(double, size_t) const = 0;
16  virtual void apply(size_t N, double * x) const;
17  virtual void fill(size_t N, double * x) const;
18  virtual double * make(size_t N) const;
19  virtual ~FFTWindowType() {; }
20  };
21 
22  class FFTWindow
23  {
24  public:
25  FFTWindow(int N, const FFTWindowType *win) { w = win->make(N); sz = N; }
26  FFTWindow(int N, const FFTWindowType & win) { w = win.make(N); sz = N; }
27  virtual double value (int i) const { return w[i]; }
28  virtual ~FFTWindow() { delete w; }
29  size_t size() const { return sz; }
30  private:
31  double * w;
32  size_t sz;
33  };
34 
35 
36 
38  {
39 
40  public:
41  RectangularWindow() {;}
42  virtual double value(double, size_t) const{ return 1; }
43  virtual void apply(size_t, double *) const {;} // noop
44  };
45 
46  static const RectangularWindow RECTANGULAR_WINDOW;
47 
49  {
50  public:
51  TriangularWindow() {;}
52  virtual double value(double i, size_t N) const;
53  };
54 
55  static const TriangularWindow TRIANGULAR_WINDOW;
56 
57  class HannWindow : public FFTWindowType
58  {
59  public:
60  HannWindow() {;}
61  virtual double value(double i, size_t N)const;
62  };
63 
64  static const HannWindow HANN_WINDOW;
65 
67  {
68  public:
69  HammingWindow() {;}
70  virtual double value(double i, size_t N)const;
71  };
72 
73  static const HammingWindow HAMMING_WINDOW;
74 
76  {
77  public:
78  BlackmanWindow() {;}
79  virtual double value(double i, size_t N)const;
80  };
81 
82  static const BlackmanWindow BLACKMAN_WINDOW;
83 
85  {
86  public:
88  virtual double value(double i, size_t N)const;
89  };
90 
91  static const BlackmanHarrisWindow BLACKMAN_HARRIS_WINDOW;
92 
93  class KaiserWindow : public FFTWindowType
94  {
95  public:
96  KaiserWindow(double defaultAlpha = 3) : alpha(defaultAlpha) {}
97  virtual double value(double i, size_t N)const;
98  private:
99  double alpha;
100  };
101 
102  static const KaiserWindow KAISER_WINDOW;
103 
104 
106  {
107  public:
108  GaussianWindow(double defaultAlpha= 2.5) : alpha(defaultAlpha) {}
109  virtual double value(double i, size_t N) const;
110  private:
111  double alpha;
112 
113  };
114 
115 
116  static const GaussianWindow GAUSSIAN_WINDOW;
117 
118 
119  class TukeyWindow : public FFTWindowType
120  {
121  public:
122  TukeyWindow(double defaultAlpha = 0.5) : alpha(defaultAlpha) {}
123  virtual double value(double i, size_t N) const;
124  private:
125  double alpha;
126  };
127 
128 }
129 
130 #endif