我试图将exp(-t ^ 2)的FFT与函数的分析傅立叶变换exp( - (w ^ 2)/ 4)/ sqrt(2)进行比较,频率范围为-3到3
我编写了以下matlab代码,现在已经多次迭代,但没有成功。
fs = 100; %sampling frequency
dt = 1/fs;
t = 0:dt:10-dt; %time vector
L = length(t); %number of sample points
%N = 2^nextpow2(L); %necessary?
y = exp(-(t.^2));
Y=dt*ifftshift(abs(fft(y)));
freq = (-L/2:L/2-1)*fs/L; %freq vector
F = (exp(-(freq.^2)/4))/sqrt(2); %analytical solution
%Y_valid_pts = Y(W>=-3 & W<=3); %compare for freq = -3 to 3
%npts = length(Y_valid_pts);
% w = linspace(-3,3,npts);
% Fe = (exp(-(w.^2)/4))/sqrt(2);
error = norm(Y - F) %L2 Norm for error
hold on;
plot(freq,Y,'r');
plot(freq,F,'b');
xlabel('Frequency, w');
legend('numerical','analytic');
hold off;
你现在可以看到,我只是想让这两个情节看起来相似。最后,我想找到办法做两件事: 1)找到最小采样率, 2)找到最小样本数, 达到10 ^ -4的误差(定义为两个解之间差异的L2范数)。
我觉得这很简单,但我似乎无法让两个图表在视觉上达成一致。 如果有人能告诉我出错的地方以及如何解决上述两点(最低采样频率和最小样本数量),我将非常感激。
由于
答案 0 :(得分:2)
首先要注意的是,函数exp(-t^2)
在+/-无穷大范围内的傅立叶变换对,实际上可以从tables of Fourier transforms导出:
最后,当您生成函数exp(-t^2)
时,您将t
的范围限制为正值(而不是取整个+/-无穷大范围)。
对于要保持的关系,您必须使用以下内容生成exp(-t^2)
:
t = 0:dt:10-dt; %time vector
t = t - 0.5*max(t); %center around t=0
y = exp(-(t.^2));
然后,变量w
表示以弧度表示的角频率,它与归一化频率freq
通过:
w = 2*pi*freq;
因此,
F = (exp(-((2*pi*freq).^2)/4))*sqrt(pi); %analytical solution