doc/examples/FFT.cpp File Reference
#include <vector>
#include <complex>
#include <algorithm>
#include <iterator>
#include <iostream>
#include <Eigen/Core>
#include <unsupported/Eigen/FFT>

Functions

template<typename T >
T mag2 (T a)
 
template<typename T >
T mag2 (std::complex< T > a)
 
template<typename T >
T mag2 (const std::vector< T > &vec)
 
template<typename T >
T mag2 (const std::vector< std::complex< T > > &vec)
 
template<typename T >
vector< Toperator- (const vector< T > &a, const vector< T > &b)
 
template<typename T >
void RandomFill (std::vector< T > &vec)
 
template<typename T >
void RandomFill (std::vector< std::complex< T > > &vec)
 
template<typename T_time , typename T_freq >
void fwd_inv (size_t nfft)
 
template<typename T_scalar >
void two_demos (int nfft)
 
void demo_all_types (int nfft)
 
int main ()
 

Function Documentation

◆ demo_all_types()

void demo_all_types ( int  nfft)
88  {
89  cout << "nfft=" << nfft << endl;
90  cout << " float" << endl;
91  two_demos<float>(nfft);
92  cout << " double" << endl;
93  two_demos<double>(nfft);
94  cout << " long double" << endl;
95  two_demos<long double>(nfft);
96 }

Referenced by main().

◆ fwd_inv()

template<typename T_time , typename T_freq >
void fwd_inv ( size_t  nfft)
64  {
65  typedef typename NumTraits<T_freq>::Real Scalar;
66  vector<T_time> timebuf(nfft);
67  RandomFill(timebuf);
68 
69  vector<T_freq> freqbuf;
70  static FFT<Scalar> fft;
71  fft.fwd(freqbuf, timebuf);
72 
73  vector<T_time> timebuf2;
74  fft.inv(timebuf2, freqbuf);
75 
76  T_time rmse = mag2(timebuf - timebuf2) / mag2(timebuf);
77  cout << "roundtrip rmse: " << rmse << endl;
78 }
SCALAR Scalar
Definition: bench_gemm.cpp:45
void RandomFill(std::vector< T > &vec)
Definition: doc/examples/FFT.cpp:53
T mag2(T a)
Definition: doc/examples/FFT.cpp:23
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217

References mag2(), and RandomFill().

◆ mag2() [1/4]

template<typename T >
T mag2 ( const std::vector< std::complex< T > > &  vec)
39  {
40  T out = 0;
41  for (size_t k = 0; k < vec.size(); ++k) out += mag2(vec[k]);
42  return out;
43 }
char char char int int * k
Definition: level2_impl.h:374
std::ofstream out("Result.txt")

References k, mag2(), and out().

◆ mag2() [2/4]

template<typename T >
T mag2 ( const std::vector< T > &  vec)
32  {
33  T out = 0;
34  for (size_t k = 0; k < vec.size(); ++k) out += mag2(vec[k]);
35  return out;
36 }

References k, mag2(), and out().

◆ mag2() [3/4]

template<typename T >
T mag2 ( std::complex< T a)
27  {
28  return norm(a);
29 }
const Scalar * a
Definition: level2_cplx_impl.h:32

References a.

◆ mag2() [4/4]

template<typename T >
T mag2 ( T  a)
23  {
24  return a * a;
25 }

References a.

Referenced by fwd_inv(), and mag2().

◆ main()

int main ( )
98  {
99  demo_all_types(2 * 3 * 4 * 5 * 7);
100  demo_all_types(2 * 9 * 16 * 25);
101  demo_all_types(1024);
102  return 0;
103 }
void demo_all_types(int nfft)
Definition: doc/examples/FFT.cpp:88

References demo_all_types().

◆ operator-()

template<typename T >
vector<T> operator- ( const vector< T > &  a,
const vector< T > &  b 
)
46  {
47  vector<T> c(a);
48  for (size_t k = 0; k < b.size(); ++k) c[k] -= b[k];
49  return c;
50 }
Scalar * b
Definition: benchVecAdd.cpp:17
int c
Definition: calibrate.py:100

References a, b, calibrate::c, and k.

◆ RandomFill() [1/2]

template<typename T >
void RandomFill ( std::vector< std::complex< T > > &  vec)
58  {
59  for (size_t k = 0; k < vec.size(); ++k)
60  vec[k] = std::complex<T>(T(rand()) / T(RAND_MAX) - T(.5), T(rand()) / T(RAND_MAX) - T(.5));
61 }
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11

References k.

◆ RandomFill() [2/2]

template<typename T >
void RandomFill ( std::vector< T > &  vec)
53  {
54  for (size_t k = 0; k < vec.size(); ++k) vec[k] = T(rand()) / T(RAND_MAX) - T(.5);
55 }

References k.

Referenced by fwd_inv().

◆ two_demos()

template<typename T_scalar >
void two_demos ( int  nfft)
81  {
82  cout << " scalar ";
83  fwd_inv<T_scalar, std::complex<T_scalar> >(nfft);
84  cout << " complex ";
85  fwd_inv<std::complex<T_scalar>, std::complex<T_scalar> >(nfft);
86 }