Unfortunately the FFT code isn't currently
documented. You can take at look at
https://bitbucket.org/eigen/eigen/src/cae994ddbfe07e3de34e69796c97ec600096edea/unsupported/test/cxx11_tensor_fft.cpp?at=default&fileviewer=file-view-default
for examples of fft, and
https://bitbucket.org/eigen/eigen/src/cae994ddbfe07e3de34e69796c97ec600096edea/unsupported/test/cxx11_tensor_ifft.cpp?at=default&fileviewer=file-view-default
for examples of an inverse fft.
The fft method works as follow: it takes 2 template
parameters, FFTResultType and FFTDir. The first parameter
indicate what part of the fft transform you want to compute.
You can compute the real part, the imaginary part, or both.
The second parameter indicates whether you want to compute
compute the fft or the inverse transform.
The fft method also takes an array of dimensions. These are
the dimensions along which you want to perform the fft. For
example, if you have a 3d tensor as input, you can perform a
1d fft by passing an array of 1 dimension. The 2 remaining
dimensions will be considered as batch dimensions. You can
also perform a 2d fft by passing a 2d array of dimensions, or
a 3d fft by passing a 3d array as argument.
Here's an example:
Tensor<float, 3>
tensor = bla.
Eigen::array<int, 2> dims = {{0, 2}};
Tensor<std::complex<float>,
3> full_2d_fft = tensor.template fft<Eigen::BothParts,
Eigen::FFT_FORWARD>(dims);
This will compute a 2d
fft alongside the first an the last dimension of your
tensor. The 2nd dimensions will be considered a batch
dimension.
Tensor<float,
3> inverse = full_2d_fft.template fft<Eigen::RealPart, Eigen::FFT_REVERSE>(dims);
This will compute the
inverse of the initial fft, and should be equal to tensor
(modulo numerical noise).
Hope this helps.