绿色函数 - FFT 自动移动的问题

Green function - Issue with FFT automatically shifted

我尝试使用 C 代码在 2D Green function 上执行 FFT。我的网格是 256x256 并且我已经使用 G(0,0)=1 来避免分歧 (G(x,y)=-1/(4*pi*r)) 。这是这个 Green 函数的图(用绝对值得到,即 G(x,y)=1/(4*pi*r)):

现在我FFT改造后得到下图:

我不明白为什么我得到这个结果,即为什么我得到一个居中的数字(事实上,我没有移动 FFT)?

我宁愿在 (kx , ky) = (0 , 0) 处有一个峰值,在平面的其余部分有一个“1/(k*k)”,因为傅立叶 space 中的格林函数是:

G(kx , ky) = -1/(kx*kx+ky*ky) 

我尝试用 Matlab 重现这个问题;这是代码片段:

t=-128:1:127
y = 1./(4*pi*sqrt(t.^2));
y(129) = 1.0;
figure(1);
plot(y);
title('Plot of 1D Green function'); 
z=fftshift(fft(y)); % Here I shift the FFT of y
figure(2);
plot(abs(z));
title('Plot of 1D FFT Green function');

我得到了 Green 函数 1D 及其 FFT 的下图:

FFT 一维移位:

您可以看到 FFT 1D 以 n=129 为中心,即偏移:这是正常的,因为我已经明确地将 FFT 偏移为 fftshift Matlab function.

在这个 post 开头的第二个图上,为什么我得到的是移位的 FFT 而我没有移位的解决方案?

错误可能来自哪里?

您在使用 plot(y) 时未指定 x 坐标,因此它使用的是数组索引。尝试使用 plot(x,y),其中 x 是 kx 和 ky 值。