MATLAB:FFT信号到频率和IFFT回到时域,而不是第一个信号

时间:2014-10-03 10:46:40

标签: matlab signal-processing fft ifft

我试图重现~30飞秒激光脉冲的变化。我及时创建并显示这个脉冲就好了。此外,这个脉冲的fft在matlab上很好(中心频率和宽度非常精细)。但是当我使用ifft()函数反转变换的那个时,脉冲会及时移动(可能是由于相位变化??我不知道)并且峰值最大值也不同。原因可能是什么这个的?我用错误的方式使用ifft?

我使用的代码是:

    atto=1e-18;
c = 299792458;
femto=1e-15;
lamda0=800e-9;
f_0=c/lamda0;
omega0=2*pi*c/lamda0;
T=2*pi/omega0;
a=2*log(2)/((36.32*femto)^2);
Fs=3/atto; %samplying rate
t=-200*femto:1/Fs:200*femto;
Efield=exp(-a.*(t-T).^2).*exp(1j.*omega0.*(t-T));

nfft=2^nextpow2(length(Efield));
Efieldfft=fft(Efield,nfft);
f=(0:nfft-1)*Fs/nfft;
omega=2*pi*f;
figure(1)
plot(t,Efield)
xlabel('s [fs]')
ylabel('Amplitude')

figure(2)
plot(omega,abs(Efieldfft))
xlim([2e15 2.8e15])
xlabel('omega [rad]')
ylabel('Amplitude')

figure(3)
plot(f,abs(Efieldfft))
xlim([3.3e14 4.1e14])
xlabel('frequency [Hz]')
ylabel('Power')

test=ifft(Efieldfft,length(t));

figure(4)
plot(t,test)
xlabel('s[fs]')
ylabel('amplitude')

1 个答案:

答案 0 :(得分:4)

那是因为您正在修改FFT的长度与时间轴的长度相比。要查看此内容,请替换

nfft=2^nextpow2(length(Efield));

通过

nfft=length(Efield);

你会发现数字1和4现在是相等的,直到数值精度误差。