1

〜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')
4

1 に答える 1

4

これは、時間軸の長さと比較して FFT の長さを変更しているためです。これを確認するには、

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

nfft=length(Efield);

図 1 と図 4 が、数値精度の誤差を除いて等しくなっていることがわかります。

于 2014-10-03T10:54:36.853 に答える