我创建了一个代码(Python,numpy),它在频域中定义了一个超短激光脉冲(脉冲持续时间应为 4 fs),但是当我使用 DFT 执行傅里叶变换时,我在时域中的脉冲实际上比它应该是。
这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
#pulse duration [fs] FWHM -- what I should get after the FT
T0 = 4
#speed of light [nm/fs]
c = 299792458*10**(-6)
#central wavelength [nm]
wl0 = 800
#central frequency (angular)[rad/fs]
w0 = (2*np.pi*c)/wl0
#bandwidth [rad/fs] --> from FTL
delta_w = 2*np.pi*0.441/T0
#bandwidth in [nm]
delta_wl = delta_w*wl0**2/(2*np.pi*c)
#angular frequencies [rad/fs]
w = np.linspace(w0-delta_w*8, w0+delta_w*8, 2**9)
#wavelengths [nm]
wl = c/w
#frequencies [PHz]
f = w/(2*np.pi)
#to make the spectrum centered around the carrier frequency
diff_w = w-w0
sigma_w = delta_w/(np.sqrt(8*np.log(2)))
spectrum_w = np.exp(-(diff_w**2)/(2*sigma_w**2))
#phase terms (not relevant here)
phi_w = 0
def phase(phi_0,phi_1,phi_2,phi_3):
phi_w = phi_0 + phi_1*(w-w0) + (phi_2*(w-w0)**2)/math.factorial(2) + (phi_3*(w-w0)**3)/math.factorial(3)
return phi_w
#field in the frequency domain
E_w = np.exp(1j*phase(0,0,0,0))*spectrum_w
#FT:
n = len(E_w)
timestep = 0.01
fa = 1.0/timestep
t_1 = np.fft.fftfreq(n,d = timestep)
t = np.fft.fftshift(t_1)
field_ft = np.fft.ifft(E_w)
plt.plot(t,field_ft)
plt.show()
new = np.fft.fftshift(field_ft)
plt.xlim(-5,5)
plt.plot(t,new,t,np.abs(new))
plt.show()
我得到的输出是一个比它应该短的脉冲。大约 4 年前,我在这里发现了一个非常相似的问题,但没有收到任何回复。我今天充满希望!
正如之前的海报所说,这应该是一个非常简单明了的代码,但由于我一直遇到的这个问题,它并没有那么简单。
感谢你的帮助!