2014-10-11 90 views
1

我想将exp(-t^2)的FFT与函数的解析傅里叶变换exp( - (w^2)/ 4)/ sqrt(2 ),在-3到3的频率范围内。在Matlab中比较FFT函数和分析FT解决方案

我已经写了下面的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)找到最小采样数, 达到一个误差(定义为二者之差的L2范数解决方案)的10^-4。

我觉得这很简单,但我似乎甚至看不到这两个图形在视觉上一致。 如果有人能让我知道我要出错的地方以及我如何处理上述两点(最小采样频率和最小采样数),我会非常感激。

由于

回答

2

要注意的第一件事是,傅立叶变换对的功能exp(-t^2)在+/-无穷大的范围,如可以从tables of Fourier transforms导出实际上是:

Gaussian FT: exp(-t^2) <==> exp(-(w^2)/4)*sqrt(pi)

最后,在生成函数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