格林函数的傅立叶变换 - 两个几乎相同的信号之间的差异

Fourier transform on Green function - Difference between 2 signals almost identical

我正在使用 Matlab 对 Green 函数执行 FFT,我得到了一个我无法解释的奇怪结果。

用格林函数的定义(G(r)=-1/(4*pi*r)并取 G(0)=1 为避免分歧,我进行了两种不同的采样,一种定义在区间 [-128:1:127] 上,另一种定义在 [0:1:255].

对于绘图,我使用 fftshift Matlab 函数。我的问题是我在第一个间隔 ([-128:1:127]) 得到了一个意外的 FFT,如下图所示:

这是此结果的代码片段:

% 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。这是数字:

在生成此图的代码片段下方:

% 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} 形式的曲线,但我无法解释这个结果。知道我只取实部,还是比较麻烦

我更愿意为第一种情况(第一个代码片段)得到第二个数字,因为我们有一个实数和 ax(在 x = 0 中)格林函数的对称性。

我们如何解释这种差异?

我让你注意到,如果我在第一个代码片段中放置 plot(abs(z)) 而不是 plot(z),我会得到与情况 2 相同的曲线,即预期曲线:这是什么意思?

这两个结果之间存在差异的原因是什么?我怎样才能用第一个代码片段找到好的曲线?

DFT(或FFT)认为时间原点是第一个输入样本。您的第一个代码段与第二个代码段相同,只是

  1. 有一个时间位移。
  2. 第二个片段中缺少一半的时域峰值。

时间位移对应于在频率轴上乘以一个振荡项,这就是你在第一种情况下得到的。

如果绘制两个信号 y,您会发现在第二种情况下,大约一半的信号丢失了。在第二种情况下应该出现在大约时间 250 的尖峰的左侧部分不存在;而在第一种情况下是。这也引入了一些差异,特别是在第二种情况下频谱的幅度较小;并且频谱形状也可能受到影响。

要使用第一个片段(正确定义时域尖峰的两个尾部的片段)获得 "good" 频谱,只需在时域中应用 fftshift。这将给出一个以第一次采样为中心的信号,并带有尖峰的两半。

% 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 %%%
y = fftshift(y); %// THIS LINE ADDED
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');