gpt4 book ai didi

c++ - fftshift/ifftshift C/C++ 源代码

转载 作者:IT老高 更新时间:2023-10-28 22:33:34 27 4
gpt4 key购买 nike

有谁知道是否有任何免费的开源库按照 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com