FDTD 微环腔 透射率
微环腔这玩意儿在集成光学里简直就是个全能选手,滤波传感激光器样样精通。今天咱们拿FDTD方法折腾下它的透射特性,顺便聊聊怎么用代码抓取关键参数。先来个灵魂示意图:跑道形环腔和直波导耦合,光从左边进来,右边出去的时候透射谱就会出现凹陷的共振峰。
说到FDTD仿真,这里推荐用PSTD算法(伪谱时域法)。为啥?环腔这种旋转对称结构用周期性边界条件处理起来特别省事,计算量直接打三折。咱们先看个简化的二维模型代码片段:
import numpy as np
from photfdtd import Grid, Ring, Waveguide
sim = Grid((20, 20), grid_spacing=100e-9, permittivity=1.44**2)
ring = Ring(center=(10,10), radius=5, width=0.5)
wg = Waveguide(start=(0,9.5), end=(20,9.5), width=0.3)
sim.add_object(ring)
sim.add_object(wg)
注意grid_spacing别设太大,特别是工作波长在1550nm附近时,建议不超过50nm。耦合区距离控制是门玄学,这里波导和环间距0.2μm的设定能让临界耦合状态更容易出现。
跑完时域仿真后,重头戏在数据处理。透射率计算得抓取时域场然后转频域:
t = np.arange(0, 2e-12, 1e-15) # 时间序列
E_input = np.exp(-(t-0.5e-12)**2/(0.1e-12)**2) # 高斯脉冲
E_output = detector.get_E() # 假设有探测器记录输出场
freq = np.fft.fftfreq(len(t), d=1e-15)
transmission = np.abs(np.fft.fft(E_output))**2 / np.abs(np.fft.fft(E_input))**2
这里有个坑:必须用复数场做FFT,直接拿强度会丢失相位信息。对于高Q值环腔,记得延长仿真时间,否则共振峰看起来像被狗啃过似的。
共振峰拟合推荐用洛伦兹线型:
from scipy.optimize import curve_fit
def lorentzian(f, f0, FWHM, depth):
return 1 - depth/(1 + ((f-f0)/(FWHM/2))**2)
popt, pcov = curve_fit(lorentzian, freq[f_range], transmission[f_range],
p0=[193e12, 10e9, 0.8])
拟合完的FWHM别急着用,先检查R²系数。遇到过拟合的话,试试在初始猜测参数里把线宽调大两倍。实际测过一组数据,当环半径从5μm缩到3μm时,共振波长蓝移了约18nm,和理论公式Δλ≈λ·ΔR/R吻合得不错。
最后给个实战技巧:想抓高阶模的话,在光源处加个啁啾脉冲。曾经在同一个环里同时激发出TE00和TM01模,透射谱上两个凹陷峰间距刚好对应模式有效折射率差。代码里改个参数的事:
E_input *= np.exp(1j*2e8*t) # 加入线性啁啾
不过要小心数值色散捣乱,特别是高频分量多的时候。建议跑完仿真后做个收敛性测试,把网格加密一倍看看结果变化是否在5%以内。
搞明白这套流程后,微环滤波器设计就简单了。比如要做个三阶串联滤波器,只需要把多个环的共振峰间隔设成FSR(自由光谱范围)的整数倍。实测中发现相邻环的耦合会影响Q值,这时候在代码里微调耦合间距就能快速验证方案。

706

被折叠的 条评论
为什么被折叠?



