Matlab中高斯函数的FFT

3

我正在尝试使用Matlab的fft获取高斯曲线。问题是,在一种情况下,我试图通过除以

N=512;
T=10;
dt=T/(N-1);
t=linspace(-5,5,N);
f=exp(-t.^2);
F=fft(f);

F1=F(1:N/2+1);
F2=F(N/2+1:N);
F=[F2,F1];

dnu=(N-1)/(N*T);
nuNyq=1/(2*dt);
nu=-nuNyq+dnu*(0:N);
F=dt.*F;
%F=dt.*F./exp(-1i.*nu.*T/2);


y=linspace(-5,5,N);
F2=pi.^(1/2).*exp(-y.^2/4);

hold on
plot(y,F2); 
%plot(nu,real(F),'r');
plot(nu,abs(F),'r');
legend('analiticFT','FFT')
xlim([-5 5])
hold off

图片1 图片1

图片2 图片2

这是两张关于IT技术的图片。

1
只是一个提醒,当你给变量起有意义的名称时,我们可以更容易地帮助你。(注2:要实现使用F1和F2所做的操作,您可以调用fftshift(F)) - Daniel
你说的“不工作”是什么意思? - Luis Colorado
1个回答

6
似乎您的解析傅里叶变换公式中的缩放不太正确。根据维基百科上的这个傅里叶变换表格,连续时间域信号的变换为:

y\left(t\right) = e^{-a t^2}

Y\left(f\right) = \sqrt{\frac{\pi}{a}} \cdot e^{-\frac{\left(\pi f\right)^2}{a}}

在您的情况下,a=1。相应地,您应该比较时域信号的FFT。
t=linspace(-5,5,N);
f=exp(-t.^2);

使用解析傅里叶变换

F2 = sqrt(pi)*exp(-(pi*y).^2);

因此,将其与以下内容进行比较:

hold off;
plot(y,F2); 
hold on;
plot(nu,abs(F),'r');
legend('analiticFT','FFT')
xlim([-5 5])

产生:

enter image description here

现在我们已经建立了一个适当的比较基础,我们可以看一下为什么你在中会得到振荡。简单来说,你生成的参考高斯脉冲f=exp(-t.^2);t=0处有一个峰值。相应的“零”离散时间瞬间自然是数组中的第一个索引(索引1)。然而,在你的数组中,这个峰值出现在索引N/2处。根据Shift theorem,这会在频域中引起额外的exp(-pi*j*k)项,导致你看到的振荡。要解决这个问题,你应该使用ifftshift将高斯脉冲向后移动。
F=fftshift(fft(ifftshift(f)));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接