我正在研究Matlab中的IFFT,把它应用到高斯系统中。根据维基百科表,傅里叶变换对将是
F(w) = sqrt(pi/a) * exp(-w^2/(4a))在频率,和
f(t) = exp(-at^2)及时。我修改了前一个问题 + Cris的答案中的代码来执行这个IFFT。
a = 0.333;
ts = 1e4; % time sampling
L = 1000*ts; % no. sample points
ds = 1/ts;
f = -floor(L/2):floor((L-1)/2); % freq vector
f = f/ts;
w = 2*pi*f; % angular freq
Y = sqrt(pi/a)*exp(-w.^2/(4*a));
y = ts*ifftshift(ifft(fftshift(Y)));
t = (-L/2:L/2-1)*ts/L; % time vector
f = exp(-a*t.^2); % analytical solution
figure; subplot(1,2,1); hold on
plot(t,real(y),'.--')
plot(t,real(f),'-')
xlabel('time, t')
title('real')
legend('numerical','analytic')
xlim([-5,5])
subplot(1,2,2); hold on
plot(w,imag(y),'.--')
plot(w,imag(f),'-')
xlabel('time, t')
title('imag')
legend('numerical','analytic')
xlim([-5,5])当我将IFFT的结果与解析表达式进行比较时,他们似乎并不同意:

我不知道哪里出了错。我对IFFT进行了适当的调整吗?我如何定义线性/角频率有错误吗?
编辑:由于某种原因,当我定义L=ts^2时,解析解和数值解似乎是一致的(L = no。采样点,ts =时间样本)。
发布于 2018-03-22 13:37:29
从分析性的解决方案开始,让我们重新表述一下事情。您有一个函数f(t) = exp(-a*t^2)的抽样,以及构建解析答案的方式,您正在以Ts=ts/L=1e-3的抽样率收集L=1000*ts=1e7样本。这意味着你的采样频率是Fs=1/Ts=1e3。
由于您希望与fft/ifft的结果进行比较,所以您应该考虑数字频率或离散频率,这意味着您为转换定义的值将与数字频率相对应。
frd = (-L/2:L/2-1)/L;把它映射到角度频率,我们有:
w = 2*pi*frd;但是当你试图计算这些值时,你也需要记住,这些频率应该代表你所期望的连续时间谱的样本。因此,您可以根据采样频率来缩放这些值:
Y = sqrt(pi/a)*exp(-(Fs*w).^2/(4*a));
y = Fs*ifftshift(ifft(fftshift(Y)));当您比较分析和计算的答案时,它们现在是匹配的。
考虑到这一点,对您问题的简短回答是,您在最后不正确地缩放y。你用ts来缩放它,也就是1e4,但是你需要用采样频率( Fs=1e3 )来缩放它。这就是为什么你会以10倍的速度结束。
https://stackoverflow.com/questions/49426377
复制相似问题