绿色函数 - 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 值。
我尝试使用 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 值。