【发布时间】:2015-08-20 00:28:30
【问题描述】:
我正在使用 Matlab 对 Green 函数执行 FFT,得到一个我无法解释的奇怪结果。
定义格林函数(G(r)=-1/(4*pi*r)并取
G(0)=1 为避免分歧,我正在做两种不同的采样,一种定义在间隔[-128:1:127] 上,另一种定义在[0:1:255] 上。
对于绘图,我使用fftshift Matlab 函数。我的问题是我在第一个间隔 ([-128:1:127]) 得到了一个意外的 FFT,如下图所示:
这里是这个结果的代码 sn-p :
% FFT with Green Function on -128:1:127
t=-128:1:127;
y = 1./(4*pi*sqrt(t.^2));
y(129) = 1.0; %%% to avoid divergence with y=1/(4*pi*0)=inf %%%
title('Plot of 1D Green function');
z=fftshift(fft(y));
figure(1);
plot(real(z)); %%%% Original signal is real and symetric ==> So its FFT has to be real; I only select the real part for killing small imaginary parts and having a nice plot %%%%
%plot(abs(z));
title('Plot of 1D FFT Green function on -128:1:127');
现在,我采用第二个间隔 [0:1:255] 并应用 FFT。下图:
在生成此图的代码 sn-p 下方:
% FFT with Green Function on 0:1:255
t=0:255;
y = 1./(4*pi*t);
y(1) = 1.0; %%% to avoid divergence with y=1/(4*pi*0)=inf %%%
figure(3);
plot(y);
title('Plot of 1D Green function on 0:1:255');
z=fftshift(fft(y));
figure(4);
plot(real(z));
%plot(abs(z));
title('Plot of 1D FFT Green function on 0:1:255');
我不明白这个结果,因为在第二种情况下,信号是真实的但不是对称的:所以 FFT 也有虚部(我们不能忽略),然后我们只有厄米特对称(X(-f)=[X(f)]^* )。
第二个数字是我所期望的,即TF(G)(k) = -1/k^{2} 形式的曲线,但我无法解释这个结果。明知道我只取实部,这还是比较麻烦的。
我更愿意为第一种情况(第一个代码 sn-p)获得第二个数字,因为 Green 函数具有实数和轴(x = 0)对称性。
我们如何解释这种差异?
我让你注意到,如果我在第一个代码 sn-p 中输入 plot(abs(z)) 而不是 plot(z),我会得到与情况 2 相同的曲线,即预期曲线:这是什么意思?
这两个结果之间存在差异的原因是什么?以及如何使用第一个代码 sn-p 找到好的曲线?
【问题讨论】:
标签: matlab plot signal-processing fft dft