【发布时间】:2018-03-16 09:59:24
【问题描述】:
我已经针对这个问题修改了Comparing FFT of Function to Analytical FT Solution in Matlab 中的代码。我正在尝试进行 FFT 并将结果与 Wikipedia tables 中的分析表达式进行比较。
我的代码是:
a = 1.223;
fs = 1e5; %sampling frequency
dt = 1/fs;
t = 0:dt:30-dt; %time vector
L = length(t); % no. sample points
t = t - 0.5*max(t); %center around t=0
y = ; % original function in time
Y = dt*fftshift(abs(fft(y))); %numerical soln
freq = (-L/2:L/2-1)*fs/L; %freq vector
w = 2*pi*freq; % angular freq
F = ; %analytical solution
figure; subplot(1,2,1); hold on
plot(w,real(Y),'.')
plot(w,real(F),'-')
xlabel('Frequency, w')
title('real')
legend('numerical','analytic')
xlim([-5,5])
subplot(1,2,2); hold on;
plot(w,imag(Y),'.')
plot(w,imag(F),'-')
xlabel('Frequency, w')
title('imag')
legend('numerical','analytic')
xlim([-5,5])
如果我研究高斯函数并让
y = exp(-a*t.^2); % original function in time
F = exp(-w.^2/(4*a))*sqrt(pi/a); %analytical solution
在上面的代码中,当绘制函数的实部和虚部时,看起来有很好的一致性:
但如果我研究一个衰减指数乘以 Heaviside 函数:
H = @(x)1*(x>0); % Heaviside function
y = exp(-a*t).*H(t);
F = 1./(a+1j*w); %analytical solution
然后
为什么会有差异?我怀疑它与Y = 行有关,但我不确定为什么或如何。
编辑:我将Y = dt*fftshift(abs(fft(y))); 中的ifftshift 更改为fftshift。然后我还删除了abs。第二张图现在看起来像:
“镜像”图背后的数学原因是什么?如何删除它?
【问题讨论】:
-
傅里叶变换虽然密切相关,但不是离散傅里叶变换(通过 FFT 算法实现)。因此,在某些特定条件下,您可能会获得非常接近的结果,但通常您会得到明显的差异(正如您所观察到的)
-
另外,通过采用
abs,您消除了虚部,所以它始终为0。我认为您需要fftshift而不是ìfftshift。 -
@Zep 这只是一个 MWE - 最终我需要对没有分析形式的更复杂的函数进行 FFT 和 IFFT。所以我正在做类似
FFT{ IFFT[F(w)]*IFFT[G(w)] / IFFT[J(w)] }的事情,我只知道F,G,J的频率向量。 -
@Medulla Oblongata 我删除了我的评论,因为我认为
ifftshift会移动和逆变换,而不是只会移动。 -
我猜第一个实验,使用高斯,是因为
abs调用?它删除了计算错误的相位分量。在第二个图中,您可以看到abs的效果:没有虚部,纯正实部。当您删除第三个图中的abs时,您会看到相位完全错误,但幅度是正确的。