我已经根据Matlab中比较函数FFT和解析FT解法的代码进行了修改以回答这个问题。我正在尝试使用FFT并将结果与维基百科表格中的解析表达式进行比较。
我的代码如下:
在上面的代码中,当函数的实部和虚部绘制出来时,似乎存在很好的一致性:
编辑:我在
我的代码如下:
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
。第二个图现在看起来像:
什么是“镜像”图形背后的数学原因,我该如何去除它?
abs
函数,您可以消除虚部,因此它将始终为 0。我认为您需要使用fftshift
而不是ìfftshift
。 - ViGFFT{ IFFT[F(w)]*IFFT[G(w)] / IFFT[J(w)] }
的事情,其中我只知道频率下的F、G、J
向量。 - Medulla Oblongataifftshift
会移动并进行逆变换,但实际上它只是移动。 - Zepabs
函数?它去除了相位成分,这个计算是错误的。在第二个图中,你可以看到abs
的效果:没有虚部,只有正实部。当你在第三个图中去掉abs
时,你会发现相位完全错误,但幅值是正确的。 - Cris Luengo