Matlab FFT用于高斯函数

时间:2015-12-19 06:10:41

标签: matlab fft

我试图通过使用matlab的fft来获取gaussian curve。问题在于,在一种情况下,我试图通过除F=dt.*F./exp(-1i.*nu.*T/2)来减少噪音是不起作用的(img 1)而在第二种情况下,如果我试图取fft结果的绝对值,我在图中没有相当大的比例( img 2)。

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

img 1 img. 1

IMG2 img. 2

1 个答案:

答案 0 :(得分:3)

分析傅立叶变换的公式中的缩放似乎不太正确。根据{{​​3}},连续时域信号的变换

this Fourier Transform table on Wikipedia

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

在您的案例中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])

的产率:

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

现在我们已经建立了适当的比较基础,我们可以看看你在img 1中获得振荡的原因。简而言之,您生成的参考高斯脉冲f=exp(-t.^2);t=0处具有峰值。相应的"零" 离散时刻自然是数组中的第一个索引(索引1)。但是,在数组中,此峰值出现在索引N/2处。在enter image description here下,这会在频域中产生额外的exp(-pi*j*k)项,从而导致您看到的振荡。要解决此问题,您应该使用ifftshift

将高斯脉冲移回
F=fftshift(fft(ifftshift(f)));