犰狳 ifftshift 和 ifft c++
Armadillo ifftshift and ifft c++
有谁知道如何在犰狳中对矩阵执行 ifftshift + ifft(按行)?
我是用 matlab 做的:ifft(ifftshift(mat,2),[],2)
;
其中 mat 是矩阵 (3,18000);
我已经尝试过在 C++ 中做类似的事情:
arma::mat v3(3,18000); ... filled with the same values from Matlab ...
static arma::cx_mat ifftshift(arma::cx_mat Axx)
{
return arma::shift(arma::shift(Axx, -ceil(Axx.n_rows/2), 0), -ceil(Axx.n_cols/2), 1);
}
arma::ifft( ifftshift(v3).t() ).t();
结果和Matlab不一样
问题很可能是您的 ifftshift()
在两个维度上移动,matlab 命令仅在第二(行)维度上移动 ifftshift(mat,2)
。如果您想要相同的行为,请尝试删除函数中的一个班次
return arma::shift(Axx,-ceil(Axx.n_cols/2),1)
.
有谁知道如何在犰狳中对矩阵执行 ifftshift + ifft(按行)?
我是用 matlab 做的:ifft(ifftshift(mat,2),[],2)
;
其中 mat 是矩阵 (3,18000);
我已经尝试过在 C++ 中做类似的事情:
arma::mat v3(3,18000); ... filled with the same values from Matlab ...
static arma::cx_mat ifftshift(arma::cx_mat Axx)
{
return arma::shift(arma::shift(Axx, -ceil(Axx.n_rows/2), 0), -ceil(Axx.n_cols/2), 1);
}
arma::ifft( ifftshift(v3).t() ).t();
结果和Matlab不一样
问题很可能是您的 ifftshift()
在两个维度上移动,matlab 命令仅在第二(行)维度上移动 ifftshift(mat,2)
。如果您想要相同的行为,请尝试删除函数中的一个班次
return arma::shift(Axx,-ceil(Axx.n_cols/2),1)
.