首页 > 解决方案 > 带有 xtensor fftw 的多维数组的 fft 如何工作?

问题描述

我正在为我的项目使用 fftw 的xtensor 集成,我想在 3D 数组的最后一个轴上做一个 fft。

如果我这样做:

    xt::xtensor<double, 3> single_wavelet = xt::load_npy<double>("wavelet.npy"); // shape = (1, 1, 100)
    std::cout << "input  : " << wavelet<< std::endl;
    xt::xtensor<std::complex<double>, 3> fft = xt::fftw::rfft(single_wavelet); // shape = (1, 1, 51)
    std::cout << "fft : " << fft << std::endl;

它输出这个:

input  : {{{   -60.896   ,    -60.896   ,      0.      ,    -60.896   ,    -60.896   ,
      -60.896   ,    -60.896   ,    -60.896   ,     60.896   ,      0.      ,
     -121.792   ,    -60.896   ,    121.792   ,    121.792   ,    -60.896   ,
      -60.896   ,    365.376007,    730.752014,   -487.167999,  -3501.52002 ,
    -3257.936035,   5206.60791 ,  10443.664062,  -1613.744019, -10930.832031,
    -4963.023926,   9469.328125,   5937.359863,  -5450.191895,  -4475.855957,
     3014.352051,   1004.783997,  -2588.080078,    365.376007,   3014.352051,
     -365.376007,  -2709.87207 ,   -365.376007,   1857.328003,    365.376007,
    -1248.368042,   -548.064026,    669.856018,    243.584   ,   -365.376007,
       60.896   ,     60.896   ,   -608.960022,   -121.792   ,   1004.783997,
      243.584   ,  -1126.57605 ,   -426.272003,   1126.57605 ,    852.544006,
     -730.752014,  -1248.368042,     60.896   ,    852.544006,    365.376007,
     -426.272003,   -426.272003,    121.792   ,    487.167999,    182.688004,
     -548.064026,   -669.856018,    304.480011,   1004.783997,    304.480011,
     -730.752014,   -548.064026,    426.272003,    365.376007,   -304.480011,
     -243.584   ,    121.792   ,    182.688004,    243.584   ,    243.584   ,
     -365.376007,   -487.167999,    304.480011,    669.856018,   -304.480011,
     -852.544006,      0.      ,    669.856018,    182.688004,   -304.480011,
     -121.792   ,    121.792   ,     60.896   ,    182.688004,    -60.896   ,
     -487.167999,   -304.480011,    426.272003,    304.480011,   -426.272003}}}

fft : {{{-60.896+0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,   0.   +0.i,
     0.   +0.i}}}

这不是我所期望的。但是,如果我在 1D xtensor 上执行 fft,它可以正常工作。我找不到合适的文档,所以如果有人知道怎么做,请告诉我。谢谢 :)

标签: c++fftwxtensor

解决方案


推荐阅读