Matlab中函数的FFT与分析FT解的比较

时间:2014-10-11 00:15:20

标签: matlab signals signal-processing fft

我试图将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范数)。

我觉得这很简单,但我似乎无法让两个图表在视觉上达成一致。 如果有人能告诉我出错的地方以及如何解决上述两点(最低采样频率和最小样本数量),我将非常感激。

由于

1 个答案:

答案 0 :(得分: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