被动调Q速率方程建模与数值仿真:从脉冲微分方程到重复频率分析

发布时间:2026/9/11 7:44:06
被动调Q速率方程建模与数值仿真:从脉冲微分方程到重复频率分析 简介激光器设计与工程调试中速率方程是描述腔内光子与粒子数动态平衡的核心工具。通过建立光子密度、增益介质反转粒子数及可饱和吸收体基态布居的耦合微分方程组能够精确模拟调Q脉冲的建立过程。这类脉冲微分方程的数值求解不仅帮助工程师理解脉宽与峰值功率的物理边界也为优化重复频率、输出稳定性提供了可量化的设计依据。在固体激光器样机、调Q种子源及OPO泵浦源等场景中基于RK4等数值方法的仿真脚本已成为替代反复试错的高效手段。被动调Q激光器的速率方程建模要点、参数提取与校验技巧以及可运行的多周期仿真框架为实际工程中的参数权衡提供了切实参考。1. 可饱和吸收体被动调Q的脉冲微分方程为什么脉宽和重复频率要一起算换了一支初始透过率更低的可饱和吸收体原本是想压窄脉冲宽度结果输出能量掉了一半重复频率也从 10 kHz 漂到了 6 kHz。这种问题在被动调Q激光器调试时常遇到脉冲宽度由光子寿命和增益裕度决定重复频率由泵浦速率和阈值损耗差决定两者又被同一个速率方程耦合在一起。标题里“可饱和吸收体、脉冲微分方程、调用速率方程、重复频率”这几个词连在一起实际上要求的就是一件事把腔内光子数、增益介质反转粒子数、可饱和吸收体基态布居这三个量写成一组常微分方程组用数值方法解出脉冲波形再从波形里提取脉冲宽度、峰值功率和重复频率。这套方法适合做固体激光器样机、调Q种子源、OPO 泵浦源的工程师也适合写激光器设计脚本的研发人员。2. 被动调Q速率方程的建模可饱和吸收体的基态与激发态吸收怎么写入方程2.1 三个状态变量与三个时间尺度被动调Q过程里真正随时间变化的状态量有三个腔内光子数密度 φ(t)、增益介质反转粒子数密度 N(t)、可饱和吸收体基态布居密度 N₁(t)。增益介质用四能级模型近似吸收体用基态吸收加激发态吸收的双截面模型腔光子方程负责把这两者通过往返损耗耦合在一起。常见的一组速率方程写法如下单位统一用 cm-g-sdφ/dt (φ / t_r) · [ 2σ_g N l_g − 2σ_gs N₁ l_a − 2σ_es (N_a0 − N₁) l_a − ln(1/R) − L ]dN/dt R_p − N/τ_f − σ_g c N φdN₁/dt −σ_gs c N₁ φ (N_a0 − N₁)/τ_a这里 t_r 是光子在腔内的往返时间σ_g 是增益介质受激发射截面l_g 是增益介质长度σ_gs 和 σ_es 分别是可饱和吸收体的基态吸收截面和激发态吸收截面l_a 是吸收体长度N_a0 是吸收体总掺杂密度R 是输出镜反射率L 是腔内其他往返损耗τ_f 是增益介质荧光寿命τ_a 是吸收体基态恢复时间R_p 是泵浦速率密度。从时间尺度上看脉冲建立通常在几十纳秒量级增益荧光寿命在百微秒量级吸收体恢复时间在微秒量级。脉冲期间可以忽略增益自发辐射和吸收体恢复这使得脉冲段的微分方程可以相对干净地解出来。泵浦段则反过来光子数近似为零只需考虑粒子数恢复。这个时间尺度分离是后面把“脉冲段数值解 泵浦段解析解”拼接起来的物理依据。2.2 双截面模型为什么比单一饱和强度更接近真实调Q晶体Cr⁴⁺:YAG、V:YAG、SESAM 这类可饱和吸收体在强光下并非简单的“吸收到零”而是吸收截面从基态吸收过渡到激发态吸收。基态吸收使吸收体饱和变透明激发态吸收则留下一个残余损耗这个残余损耗直接限制了脉冲尾部能降到多低也影响脉冲后沿的斜率。具体到速率方程里吸收体对往返损耗的贡献写作 2σ_gs N₁ l_a 2σ_es (N_a0 − N₁) l_a。小信号时 N₁ ≈ N_a0损耗主要由基态吸收项决定对应小信号透过率 T₀ exp(−σ_gs N_a0 l_a)。强脉冲通过时 N₁ 被耗尽第二项逐渐起主导最终趋近于 2σ_es N_a0 l_a这就是不可饱和损耗。设计时不能让这个残余损耗占总损耗比例过高否则输出效率会明显下降。2.3 Nd:YAG 加 Cr⁴⁺:YAG 的典型仿真参数表以下是做脉冲波形仿真常用的起步参数单位已经在表中注明。实际仿真时按自己腔型替换注意所有截面的长度单位必须一致。参数符号数值单位说明真空中光速c3e10cm/s与截面单位配套增益截面σ_g2.8e-19cm²Nd:YAG 1.06 μm 处增益长度l_g5cm晶体棒长度增益荧光寿命τ_f230e-6sNd:YAG 上能级寿命吸收体基态截面σ_gs4.1e-18cm²Cr⁴⁺:YAG吸收体激发态截面σ_es8.2e-19cm²约为基态的 1/5吸收体长度l_a0.2cm薄片厚度吸收体总密度N_a0由 T₀ 反推cm⁻³T₀85% 时约 1.98e17输出镜反射率R0.85无输出耦合 15%往返杂散损耗L0.02无散射吸收等N_a0 不要随手给建议先用小信号透过率反推N_a0 −ln(T₀)/(σ_gs l_a)。很多仿真结果偏软就是因为把吸收体密度和高损耗重复叠加了。2.4 小信号阈值条件与增益裕度的意义脉冲能否建立取决于初始增益是否超过总损耗。在小信号状态 N₁ ≈ N_a0阈值反转粒子数密度为N_th [ 2σ_gs N_a0 l_a ln(1/R) L ] / (2σ_g l_g)代入上表参数N_th ≈ 1.81e17 cm⁻³。泵浦速率 R_p 决定粒子数最终能到多高。设定初始反转粒子数 N_i 与阈值之比为增益裕度通常取 1.3 到 2.0。裕度越大脉冲建立越快脉宽越窄但吸收体容易被过度漂白尾部残余损耗占比上升。实际工程上往往用这个裕度作为调节旋钮而不是直接去改吸收体浓度。速率方程建模时初始条件固定为φ(0) 取非常小的种子光子密度比如 1e-6 cm⁻³N(0) 取设计裕度对应的粒子数N₁(0) 取 N_a0。接下来就可以进入数值求解阶段。3. 用 RK4 求解脉冲微分方程一套可直接运行的单脉冲仿真程序3.1 把速率方程封装成可调用的 Python 函数下面是一个完整的单脉冲仿真脚本用四阶龙格库塔法求解上一章的三个常微分方程。代码把导数函数单独封装成laser_derivs方便后续替换成不同的吸收体模型或加入温升项。import numpy as np # 物理常数 C_LIGHT 3e10 # cm/s # 腔与增益介质参数 sig_g 2.8e-19 # cm^2 l_g 5.0 # cm tau_f 230e-6 # s R_out 0.85 # 输出镜反射率 L_paras 0.02 # 杂散往返损耗 l_cav 15.0 # 等效光学腔长 cm, 含晶体折射率贡献 t_r 2.0 * l_cav / C_LIGHT # 光子往返时间 # 可饱和吸收体参数 sig_gs 4.1e-18 # cm^2 sig_es 8.2e-19 # cm^2 l_a 0.2 # cm T0 0.85 # 小信号透过率 N_a0 -np.log(T0) / (sig_gs * l_a) # cm^-3 tau_a 3.5e-6 # s, 基态恢复时间 # 阈值与初始条件 L_total 2.0 * sig_gs * N_a0 * l_a np.log(1.0 / R_out) L_paras N_th L_total / (2.0 * sig_g * l_g) N_i 1.6 * N_th # 增益裕度 1.6 phi_0 1e-6 N1_0 N_a0 def laser_derivs(t, y): phi, N, N1 y dphi phi / t_r * (2.0 * sig_g * N * l_g - 2.0 * sig_gs * N1 * l_a - 2.0 * sig_es * (N_a0 - N1) * l_a - np.log(1.0 / R_out) - L_paras) dN -sig_g * C_LIGHT * N * phi - N / tau_f dN1 -sig_gs * C_LIGHT * N1 * phi (N_a0 - N1) / tau_a return np.array([dphi, dN, dN1]) def rk4_step(f, t, y, dt): k1 f(t, y) k2 f(t dt/2, y dt/2 * k1) k3 f(t dt/2, y dt/2 * k2) k4 f(t dt, y dt * k3) return y dt / 6.0 * (k1 2*k2 2*k3 k4) # 时间窗口: 200 ns, 步长 1 ps t_end 200e-9 dt 1e-12 n_steps int(t_end / dt) y np.array([phi_0, N_i, N1_0]) phi_trace np.empty(n_steps) t_trace np.empty(n_steps) for i in range(n_steps): t_now i * dt phi_trace[i] y[0] t_trace[i] t_now y rk4_step(laser_derivs, t_now, y, dt)运行结果中可以看到光子密度 φ 从种子值快速爬升对应脉冲前沿随后增益被消耗φ 从峰值指数回落。需要注意这一步方程的物理量全部是密度不是功率。输出功率要单独换算P_out hν · A · c · φ · ln(1/R) / 2A 是光束截面积hν 是单光子能量。3.2 从光子密度波形里提取脉冲宽度FWHM脉冲宽度定义为半高全宽也就是光子密度上升到峰值一半到下降到峰值一半之间的时间差。直接用离散数组找半高交点时前后沿各取一个插值点精度更高代码加在上一段主循环之后phi_peak phi_trace.max() half phi_peak / 2.0 idx_peak phi_trace.argmax() idx_rise np.where(phi_trace[:idx_peak] half)[0][0] idx_fall idx_peak np.where(phi_trace[idx_peak:] half)[0][0] t_rise np.interp(half, [phi_trace[idx_rise-1], phi_trace[idx_rise]], [t_trace[idx_rise-1], t_trace[idx_rise]]) t_fall np.interp(half, [phi_trace[idx_fall-1], phi_trace[idx_fall]], [t_trace[idx_fall-1], t_trace[idx_fall]]) pulse_width_ns (t_fall - t_rise) * 1e9 print(f峰值光子密度: {phi_peak:.3e} cm^-3) print(f脉冲宽度 FWHM: {pulse_width_ns:.2f} ns)这段逻辑的关键是先在峰值左侧找首次越过半高的索引再在峰值右侧找最后一次高于半高的索引。如果吸收体激发态吸收太强脉冲尾部可能出现一个小的二次鼓包直接取“小于半高”的最后一个点会被鼓包干扰稳妥做法是限制搜索范围在峰值之后的一段固定窗口内。3.3 步长和初始光子密度的边界时间步长取 1 ps对一个标准调Q脉冲来说大约需要 5 万到 50 万步。如果步长大于 5 ps脉冲前沿会出现明显的数值振荡因为光子密度增长率的瞬时值可以非常大。初始光子密度 φ(0) 取 1e-6 cm⁻³ 附近即可这个值对应自发辐射种子。取太大比如 1e-3 以上会导致脉冲提前建立脉冲宽度虚小取太小1e-12则脉冲建立时间拉长计算窗口要加大。增益裕度较低时初始光子密度的影响会更敏感建议在裕度 1.3 以下时做一个 φ(0) 的敏感性扫描确认脉宽变化在 1% 以内。4. 把泵浦过程接回速率方程多周期模拟与重复频率统计4.1 泵浦段用解析解脉冲段用数值解单脉冲仿真只覆盖脉冲期间几十纳秒的变化无法得到重复频率。重复频率取决于脉冲结束后粒子数重新积累到阈值所需的时间这一过程比脉冲长三个数量级以上。如果仍然用 1 ps 步长连续积分模拟 1 ms 就需要十亿步完全没有必要。常见做法是把泵浦段和脉冲段分开处理。泵浦段腔内没有强脉冲φ ≈ 0速率方程退化为两个独立的一阶线性方程。增益粒子数的解是N(t) N_sat (N_f − N_sat) · exp(−t / τ_f)其中 N_sat R_p · τ_f 是泵浦速率对应的饱和粒子数密度N_f 是上一脉冲结束时的剩余粒子数。吸收体基态布居同样按指数恢复N₁(t) N_a0 − (N_a0 − N₁_f) · exp(−t / τ_a)当 N(t) 重新达到阈值 N_th 时下一个脉冲开始。这样每个周期里只需要做一次脉冲数值积分泵浦时间用封闭表达式直接算出来速度快且数值稳定。注意这里的 N_th 应该用吸收体恢复完成后的值即 N₁ ≈ N_a0 对应的小信号阈值。若泵浦时间与 τ_a 相当阈值会随时间变化需要把 N₁(t) 和增益阈值耦合起来迭代求解。4.2 多周期脉冲序列的模拟框架下面给出一个混合推进框架它把“泵浦解析 脉冲数值”交替执行模拟连续调Q输出。为简单起见这里假设泵浦时间远大于吸收体恢复时间固定使用小信号阈值。Rp 2.2e21 # cm^-3 s^-1, 泵浦速率密度 N_sat Rp * tau_f # 饱和粒子数密度 N_th L_total / (2.0 * sig_g * l_g) N_f N_i # 第一个脉冲从初始过阈值状态开始 N1_f N_a0 intervals [] peak_power_list [] for k in range(2000): # 泵浦段解析解: 粒子数从 N_f 上升到 N_th if N_f N_th: T_pump tau_f * np.log((N_sat - N_f) / (N_sat - N_th)) else: T_pump 0.0 N1_f N_a0 # 吸收体已恢复 # 用当前粒子数做脉冲段数值积分 y np.array([1e-6, N_th * 1.0001, N1_f]) phi_rec [] for step in range(n_steps): y rk4_step(laser_derivs, step * dt, y, dt) if step % 10 0: phi_rec.append(y[0]) phi_rec np.array(phi_rec) t_rec np.arange(len(phi_rec)) * 10 * dt phi_peak phi_rec.max() idx_pk phi_rec.argmax() half phi_peak / 2.0 # 提取脉冲结束后的剩余粒子数 N_f y[1] N1_f y[2] # 脉冲持续时间近似取 3 个 FWHM 对应区间内找到的能量加权中心偏离 intervals.append(T_pump n_steps * dt) peak_power_list.append(phi_peak)这段代码把泵浦时间 T_pump 和脉冲持续时间的总和记为周期长度。对大部分被动调Q系统T_pump 占绝对主导重复频率近似为 f ≈ 1 / T_pump。利用上一节的 N_f 反馈到下一轮泵浦就可以看到增益余量在不同泵浦功率下的动态平衡。4.3 Web 检索词“重复频率”背后的稳定性抖动来源与统计口径重复频率不是简单的 1 / 周期工程上更关心它的短期稳定性。泵浦功率波动、增益介质自发辐射的随机性、吸收体恢复不完全都会让每个周期的 T_pump 略有不同。用上面的多周期框架可以很方便对脉冲间隔做统计intervals np.array(intervals) mean_interval intervals.mean() std_interval intervals.std() cv std_interval / mean_interval print(f平均重频: {1.0/mean_interval:.2f} Hz) print(f周期抖动 CV: {cv*100:.2f}%)如果仿真里没有引入任何随机性CV 会趋近于零不代表真实系统。真实系统至少有三类抖动源泵浦源功率的工频纹波通常为 1% 到 5% 的幅度波动增益介质自发辐射导致的脉冲建立时间涨落在低增益裕度时更明显吸收体温度变化引起的小信号透过率漂移导致阈值随时间缓慢变化。仿真时可以给 N_th 叠加一个 0.5% 的高斯随机扰动再统计 CV得到的数值与实测更有可比性。泵浦功率提升时N_sat 增大T_pump 缩短重复频率上升但脉宽对泵浦功率的敏感度下降。输出镜反射率 R 的影响则相反R 越小输出耦合越强阈值损耗越大阈值粒子数越高重复频率下降单脉冲能量上升。设计阶段可以用这个多周期框架扫描 R 和 T₀直接画出“重复频率–脉冲宽度”的权衡曲线这是被动调Q设计里最常用的决策图。5. 脉冲宽度与重复频率仿真结果的三个校验方法阈值平衡、能量守恒与单位陷阱5.1 峰值时刻的增益损耗平衡检查脉冲峰值时刻满足 dφ/dt 0也就是增益恰好等于总损耗。这是一个不依赖数值精度的物理恒等式非常适合用来检查速率方程有没有写错。仿真之后在峰值附近取 N_pk 和 N1_pk代入2σ_g N_pk l_g ≈ 2σ_gs N1_pk l_a 2σ_es (N_a0 − N1_pk) l_a ln(1/R) L左右差异超过 1%优先检查符号吸收体激发态项前面的减号是否遗漏输出镜项是否误用了 R 而不是 −ln R。这个检查是体系性的一旦通过基本能排除方程项写错的可能。5.2 输出能量守恒交叉核对脉宽仿真结果合理不代表能量正确。能量守恒校验的思路是增益介质释放的储能应等于输出能量被提取的比例。数值上输出能量用 E_out ∫P_out(t)dt 计算P_out hν A c φ ln(1/R) / 2提取的总储能近似为 E_extract hν A l_g (N_i − N_f)。两者之间应满足 E_out / E_extract ≈ ln(1/R) / (ln(1/R) L_total_avg)其中 L_total_avg 取脉冲期间吸收损耗的平均值。实际校验时可以看到若激发态吸收截面设得过大吸收体残余损耗导致提取效率下降E_out / E_extract 会明显低于输出耦合占比。偏差超过 10% 时要复核 N_a0 反推公式用小信号透过率算密度时用的是单程损耗还是往返损耗这是最常见的单位陷阱。5.3 常见单位与初值陷阱速查现象常见原因修正方式脉宽偏宽且峰值偏低截面单位用了 m²其他长度单位用了 cm全部统一成 cm截面对应 cm²脉冲完全建立不起来N_i 与阈值差距过小或 φ(0) 太小提高增益裕度到 1.3 以上脉冲尾部出现第二个小峰步长太大导致数值振荡dt 降到 0.5 ps 再试重复频率计算值比实测偏高忽略了吸收体恢复时间泵浦时间加上 τ_a 的等效延迟输出功率数量级不对光束面积 A 与增益介质横截面积不一致确认 A 是腔内光束的有效面积最后一个值得单独提的技巧把“峰值时刻增益损耗平衡”检查和“能量守恒”检查直接写进仿真脚本的断言里每次改参数后自动跑一遍。这两个断言能挡住绝大多数参数录入错误比盯脉冲波形判断可靠得多。本文还有配套的精品资源点击获取