作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有谁知道是否有任何免费的开源库按照 matlab 中定义的方式实现了这两个功能?
谢谢
最佳答案
FFTHIFT/IFFTSHIFT 是一种奇特的 CIRCSHIFT 方式。您可以验证 FFTSHIFT 是否可以重写为 CIRCSHIFT,如下所示。您可以在 C/C++ 中定义宏来将 FFTSHIFT 转换为 CIRCSHIFT。
A = rand(m, n);
mm = floor(m / 2);
nn = floor(n / 2);
% All three of the following should provide zeros.
circshift(A,[mm, nn]) - fftshift(A)
circshift(A,[mm, 0]) - fftshift(A, 1)
circshift(A,[ 0, nn]) - fftshift(A, 2)
可以找到 IFFTSHIFT 的类似等效项。
使用以下代码可以非常简单地实现循环移位(当然可以通过并行版本进行改进)。
template<class ty>
void circshift(ty *out, const ty *in, int xdim, int ydim, int xshift, int yshift)
{
for (int i = 0; i < xdim; i++) {
int ii = (i + xshift) % xdim;
for (int j = 0; j < ydim; j++) {
int jj = (j + yshift) % ydim;
out[ii * ydim + jj] = in[i * ydim + j];
}
}
}
然后
#define fftshift(out, in, x, y) circshift(out, in, x, y, (x/2), (y/2))
#define ifftshift(out, in, x, y) circshift(out, in, x, y, ((x+1)/2), ((y+1)/2))
这有点即兴。如果有任何格式/语法问题,请多多包涵。
关于c++ - fftshift/ifftshift C/C++ 源代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5915125/
我正在尝试将 fftshift/ifftshift 与循环移位联系起来。 N = 5 Y = 0:N-1 X = [0 1 2 3 4] 当我 fftshift(X) 时,我得到 [3 4 0 1 2
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
我想对函数 psi(x) 进行傅立叶变换,将其乘以 k 空间函数 exp(-kx^2-ky^2),然后然后将乘积反傅立叶变换回 x 空间。 但我的 x 空间和 k 空间网格居中,我知道我需要 ffts
我是一名优秀的程序员,十分优秀!