2016-04-19 46 views
2

以下のコードが正しいようだ:EigenのMatrixXdでFFTを実行するには?

#include <Eigen/Core> 
#include <unsupported/Eigen/FFT> 

int main() 
{ 
    Eigen::FFT<float> fft; 
    Eigen::Matrix<float, dim_x, dim_y> in = setMatrix(); 
    Eigen::Matrix<complex<float>, dim_x, dim_y> out; 

    for (int k = 0; k < in.rows(); k++) { 
     Eigen::Matrix<complex<float>, dim_x, 1> tmpOut; 
     fft.fwd(tmpOut, in.row(k)); 
     out.row(k) = tmpOut; 
    } 

    for (int k = 0; k < in.cols(); k++) { 
     Eigen::Matrix<complex<float>, 1, dim_y> tmpOut; 
     fft.fwd(tmpOut, out.col(k)); 
     out.col(k) = tmpOut; 
    } 
} 

しかし、これはコンパイル時に、これはエラーを持って、私はMatrixXdにマトリックスを変更すると、コンパイル時に行列のサイズを指定する必要があります。 MatrixXd上でFFTを実行する方法を知りたいので、実行時に行列サイズを指定することができます。

答えて

5

変数をハードコードする代わりに、すべての変数をEigen::Dynamicに変更してください。または、組み込みタイプを次のように使用してください。

#include <Eigen/Core> 
#include <unsupported/Eigen/FFT> 

int main() 
{ 
    size_t dim_x = 28, dim_y = 126; 
    Eigen::FFT<float> fft; 
    Eigen::MatrixXf in = Eigen::MatrixXf::Random(dim_x, dim_y); 
    Eigen::MatrixXcf out; 
    out.setZero(dim_x, dim_y); 

    for (int k = 0; k < in.rows(); k++) { 
     Eigen::VectorXcf tmpOut(dim_x); 
     fft.fwd(tmpOut, in.row(k)); 
     out.row(k) = tmpOut; 
    } 

    for (int k = 0; k < in.cols(); k++) { 
     Eigen::VectorXcf tmpOut(dim_y); 
     fft.fwd(tmpOut, out.col(k)); 
     out.col(k) = tmpOut; 
    } 
    return 0; 
} 
+0

ありがとうございました! – alexxx

関連する問題