如何使用特征FFT与矩阵
How to use Eigen FFT with MatrixXf?
我是Eigen库的新手。我想计算特征矩阵的FFT。然而,我的尝试表明,不支持的特征FFT模块不能与MatrixXf一起使用。我想做这样的事情:
#include <eigen3/unsupported/Eigen/FFT>
#include<Eigen/Dense>
#include<iostream>
using namespace std;
using namespace Eigen;
int main(){
MatrixXf A = MatrixXf::Random(3,10);
FFT<float> fft;
MatrixXf B;
fft.fwd(B,A);
}
这是可行的吗?欢迎提出任何其他建议。我花了很多时间说服自己从matlab迁移到Eigen,除非不可避免,否则我宁愿不使用不同的库。谢谢。
不幸的是,这是不正确的;
1)你必须迭代输入矩阵的行(实)
2)然后遍历输出矩阵(复数)
的列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;
}
我的答案是基于Saba的。
std::shared_ptr< Eigen::MatrixXcf > Util::fft2(std::shared_ptr< Eigen::MatrixXf > matIn)
{
const int nRows = matIn->rows();
const int nCols = matIn->cols();
Eigen::FFT< float > fft;
std::shared_ptr< Eigen::MatrixXcf > matOut = std::make_shared< Eigen::MatrixXcf > (nRows, nCols);
for (int k = 0; k < nRows; ++k) {
Eigen::VectorXcf tmpOut(nCols);
fft.fwd(tmpOut, matIn->row(k));
matOut->row(k) = tmpOut;
}
for (int k = 0; k < matOut->cols(); ++k) {
Eigen::VectorXcf tmpOut(nRows);
fft.fwd(tmpOut, matOut->col(k));
matOut->col(k) = tmpOut;
}
return matOut;
}
这是一个合理的期望。不幸的是,在目前的形式下,FFT并不完全支持这一点。
MatrixXcf B(3,10); // note the change from real to complex
//fft.fwd(B,A); // It is natural to want to do this, unfortunately it is not yet supported
// it works to iterate over the columns
for (int k=0;k<A.cols();++k)
B.col(k) = fft.fwd( A.col(k) );
相关文章:
- 如何使用FFTW库C++计算3D阵列的FFT?
- 如何使用c++中的ipp库从信号中进行fft
- 如何在 c++ 中使用 FFT 从 32 位浮点数组中提取频率
- 使用C++ / Python的wav文件的FFT
- 我没有从使用 FFTW 的重叠添加 FFT 卷积中获得预期结果
- 在不使用递归的情况下将 FFT 应用于两个非常大的数字的乘法
- 使用特征张量fft
- C++ 是使用 OpenAL 进行实时 PCM fft 音频处理
- 使用 FFTW 和 OpenCV 的 FFT 可视化
- 在C++中使用1D FFT的四元数FFT
- 使用 LLVM 的 libc++ 时,__1 符号从何而来?
- FFT使用“英特尔MKL”和“英特尔IPP”
- cpp中基于FFT的图像配准(可选使用OpenCV)
- 在std::cout之后使用std::cin时,换行符从何而来
- 使用带零填充的英特尔 MKL 的 3D FFT
- 为什么以及在何处在C++中使用引用和指针
- 使用FFTW_MEASURE时,FFT输出为空,但使用FFTW_ESTIMATE时效果良好
- 如何使用特征FFT与矩阵
- 基例如何影响使用递归函数的哪些行
- 在c++中使用FFT计算分析信号