3 #include <unsupported/Eigen/FFT>
10 return std::pow(2, std::ceil(std::log(N)/std::log(2.)));
28 using scalar_t =
typename T::Scalar;
29 using complex_t = std::complex<scalar_t>;
31 size_t n_rows = x.rows();
34 Eigen::Matrix<scalar_t, Eigen::Dynamic, Eigen::Dynamic> out(x.rows(), x.cols());
36 Eigen::FFT<scalar_t> fft;
38 for (
int i = 0; i < x.cols(); ++i) {
41 Eigen::Matrix<scalar_t, Eigen::Dynamic, 1> x_cent(padded_len);
43 x_cent.head(n_rows) = x.col(i).array() - x.col(i).mean();
46 Eigen::Matrix<complex_t, Eigen::Dynamic, 1> freq(padded_len);
47 fft.fwd(freq, x_cent);
50 freq = freq.array().abs2();
53 Eigen::Matrix<complex_t, Eigen::Dynamic, 1> ifreq(padded_len);
57 out.col(i) = ifreq.head(n_rows).real() / (n_rows * n_rows * 2.);
58 out.col(i) /= out(0,i);