用于高斯函数的 Matlab FFT
Matlab FFT for gaussian function
我正在尝试通过使用 matlab 的 fft 来获得 gaussian curve
。问题是,在一种情况下,我尝试通过除以 F=dt.*F./exp(-1i.*nu.*T/2)
来减少噪音是行不通的(img 1),在第二种情况下,如果我试图获取 fft 结果的绝对值,我在图表中没有合适的比例(图片 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
img2
您的解析傅里叶变换公式中的缩放比例似乎不太正确。根据this Fourier Transform table on Wikipedia,连续时域信号的变换
是
你的情况 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])
产量:
现在我们已经建立了适当的比较基础,我们可以看看为什么 img 1
会出现振荡。简单地说,您生成的参考高斯脉冲 f=exp(-t.^2);
在 t=0
处有一个峰值。对应的"zero"离散时间点自然是数组中的第一个索引(索引1)。但是在您的数组中,此峰值出现在索引 N/2
处。在 Shift theorem 下,这会在频域中产生一个额外的 exp(-pi*j*k)
项,导致您看到的振荡。要解决此问题,您应该将高斯脉冲移回 ifftshift
:
F=fftshift(fft(ifftshift(f)));
我正在尝试通过使用 matlab 的 fft 来获得 gaussian curve
。问题是,在一种情况下,我尝试通过除以 F=dt.*F./exp(-1i.*nu.*T/2)
来减少噪音是行不通的(img 1),在第二种情况下,如果我试图获取 fft 结果的绝对值,我在图表中没有合适的比例(图片 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
img2
您的解析傅里叶变换公式中的缩放比例似乎不太正确。根据this Fourier Transform table on Wikipedia,连续时域信号的变换
是
你的情况 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])
产量:
现在我们已经建立了适当的比较基础,我们可以看看为什么 img 1
会出现振荡。简单地说,您生成的参考高斯脉冲 f=exp(-t.^2);
在 t=0
处有一个峰值。对应的"zero"离散时间点自然是数组中的第一个索引(索引1)。但是在您的数组中,此峰值出现在索引 N/2
处。在 Shift theorem 下,这会在频域中产生一个额外的 exp(-pi*j*k)
项,导致您看到的振荡。要解决此问题,您应该将高斯脉冲移回 ifftshift
:
F=fftshift(fft(ifftshift(f)));