我尝试使用C代码在FFT
上执行2D Green function
。我的网格为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)
”,因为Green函数进入傅里叶空间是:
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');
我得到绿色函数1D及其FFT的下图:
FFT 1D移位:
你可以看到FFT 1D以n=129
为中心,即移位:这是正常的,因为我已明确地将FFT
与fftshift Matlab function.
在本文开头的第二个数字中,为什么我得到一个移位的FFT,而我没有改变解决方案?
错误来自哪里?
答案 0 :(得分:1)
您正在使用plot(y)
而未指定x坐标,因此它正在使用数组索引。尝试使用plot(x,y)
,其中x
是kx和ky值。