【问题标题】:Fourier transform on Green function - Difference between 2 signals almost identical格林函数的傅里叶变换 - 2 个信号之间的差异几乎相同
【发布时间】: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


    【解决方案1】:

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

    1. 存在时间偏移。
    2. 第二个 sn-p 中缺少一半的时域尖峰。

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

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

    要获得具有第一个 sn-p 的“良好”频谱(这是在时域中正确定义尖峰的两个尾部),只需在时域中应用 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');
    

    【讨论】:

    • 非常感谢,我不记得DFT把时间原点作为第一个输入样本
    • 这是一个有趣的问题,解释得很好,而且你已经付出了努力。这里没有多少这样的问题:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 1970-01-01
    • 2021-10-07
    相关资源
    最近更新 更多