vnl_fft_1d.h
Go to the documentation of this file.
1 // This is core/vnl/algo/vnl_fft_1d.h
2 #ifndef vnl_fft_1d_h_
3 #define vnl_fft_1d_h_
4 //:
5 // \file
6 // \brief In-place 1D fast Fourier transform
7 // \author fsm
8 //
9 // \verbatim
10 // Modifications
11 // 19 June 2003 - Peter Vanroose - added cmplx* and vector<cmplx> interfaces
12 // \endverbatim
13 
14 #include <vector>
15 #ifdef _MSC_VER
16 # include <vcl_msvc_warnings.h>
17 #endif
18 #include <vnl/vnl_vector.h>
19 #include <vnl/algo/vnl_fft_base.h>
20 
21 //: In-place 1D fast Fourier transform
22 
23 template <class T>
24 struct vnl_fft_1d : public vnl_fft_base<1, T>
25 {
27 
28  //: constructor takes length of signal.
29  vnl_fft_1d(int N) {
30  base::factors_[0].resize(N);
31  }
32 
33  //: return length of signal.
34  unsigned int size() const { return base::factors_[0].number(); }
35 
36  //: dir = +1/-1 according to direction of transform.
37  void transform(std::vector<std::complex<T> > &signal, int dir)
38  { base::transform(&signal[0], dir); }
39 
40  //: dir = +1/-1 according to direction of transform.
41  void transform(std::complex<T> *signal, int dir)
42  { base::transform(signal, dir); }
43 
44  //: dir = +1/-1 according to direction of transform.
45  void transform(vnl_vector<std::complex<T> > &signal, int dir)
46  { base::transform(signal.data_block(), dir); }
47 
48  //: forward FFT
49  void fwd_transform(std::vector<std::complex<T> > &signal)
50  { transform(signal, +1); }
51 
52  //: forward FFT
53  void fwd_transform(std::complex<T> *signal)
54  { transform(signal, +1); }
55 
56  //: forward FFT
57  void fwd_transform(vnl_vector<std::complex<T> > &signal)
58  { transform(signal, +1); }
59 
60  //: backward (inverse) FFT
61  void bwd_transform(std::vector<std::complex<T> > &signal)
62  { transform(signal, -1); }
63 
64  //: backward (inverse) FFT
65  void bwd_transform(std::complex<T> *signal)
66  { transform(signal, -1); }
67 
68  //: backward (inverse) FFT
69  void bwd_transform(vnl_vector<std::complex<T> > &signal)
70  { transform(signal, -1); }
71 };
72 
73 #endif // vnl_fft_1d_h_
void transform(std::complex< T > *signal, int dir)
dir = +1/-1 according to direction of transform.
Definition: vnl_fft_1d.h:41
void bwd_transform(vnl_vector< std::complex< T > > &signal)
backward (inverse) FFT.
Definition: vnl_fft_1d.h:69
void transform(vnl_vector< std::complex< T > > &signal, int dir)
dir = +1/-1 according to direction of transform.
Definition: vnl_fft_1d.h:45
void bwd_transform(std::complex< T > *signal)
backward (inverse) FFT.
Definition: vnl_fft_1d.h:65
unsigned int size() const
return length of signal.
Definition: vnl_fft_1d.h:34
vnl_fft_base< 1, T > base
Definition: vnl_fft_1d.h:26
In-place n-D fast Fourier transform.
void transform(std::complex< T > *signal, int dir)
dir = +1/-1 according to direction of transform.
Base class for in-place ND fast Fourier transform.
Definition: vnl_fft_base.h:19
In-place 1D fast Fourier transform.
Definition: vnl_fft_1d.h:24
void bwd_transform(std::vector< std::complex< T > > &signal)
backward (inverse) FFT.
Definition: vnl_fft_1d.h:61
void fwd_transform(vnl_vector< std::complex< T > > &signal)
forward FFT.
Definition: vnl_fft_1d.h:57
vnl_fft_1d(int N)
constructor takes length of signal.
Definition: vnl_fft_1d.h:29
void transform(std::vector< std::complex< T > > &signal, int dir)
dir = +1/-1 according to direction of transform.
Definition: vnl_fft_1d.h:37
Mathematical vector class, templated by type of element.
Definition: vnl_fwd.h:16
vnl_fft_prime_factors< T > factors_[D]
prime factorizations of signal dimensions.
Definition: vnl_fft_base.h:28
void fwd_transform(std::vector< std::complex< T > > &signal)
forward FFT.
Definition: vnl_fft_1d.h:49
void fwd_transform(std::complex< T > *signal)
forward FFT.
Definition: vnl_fft_1d.h:53