2014-10-03 40 views
1

我想重現約30飛秒激光脈衝的變化。我及時創建和顯示這個脈衝就好了。此外,這個脈衝的fft在matlab上表現得很好(中心頻率和寬度都非常好)。但是,當我使用ifft()函數對變換後的那個進行逆變換時,脈衝會及時移動(可能是由於相位變化,我不知道),而且峯值最大值也不同。可能是這種原因?我正在使用ifft錯誤的方式?MATLAB:FFT信號到頻率和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') 

回答

4

那是因爲你正在修改你的時間軸長度相比,FFT的長度。看到這一點,替代

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

通過

nfft=length(Efield); 

你會發現,圖1和圖4是現在等於高達數值精度誤差。