绿色功能 - FFT自动移位问题

时间:2015-08-18 04:23:27

标签: matlab fft

我尝试使用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)):

enter image description here

现在我在FFT转换后得到下图:

enter image description here

我不明白为什么我得到这个结果,即为什么我得到一个居中的数字(事实上,我没有转移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的下图:

enter image description here

FFT 1D移位:

enter image description here

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

移位

在本文开头的第二个数字中,为什么我得到一个移位的FFT,而我没有改变解决方案?

错误来自哪里?

1 个答案:

答案 0 :(得分:1)

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