光通信元件建模:定向耦合器、分束器、合束器的仿真方法
做过光芯片仿真的朋友都知道,最基础也最常碰到的无源元件就是这三兄弟:定向耦合器、分束器、合束器。说它们基础,是因为几乎所有的复杂电路(MZI、谐振环、开关阵列)都离不开它们。但很多人一开始容易搞混——尤其是分束器和定向耦合器,总觉得都差不多。
我个人习惯用一句话区分:分束器是把光功率按固定比例分成两路;定向耦合器虽然也在分,但它还有一个方向选择性。至于合束器,说白了就是分束器反过来用,但要注意相位关系。
这一节我不讲枯燥的数学推导,重点聊仿真时要怎么建模、参数怎么设、有哪些坑。嗯,这些经验是我在好几个项目中一点点磕出来的。
定向耦合器仿真——从耦合模到布局
定向耦合器的核心参数是耦合长度 Lc 和分光比。仿真时我一般先做两步:先用耦合模方程(CMT)快速估算几何尺寸,再用 FDTD 做精细验证。
举个例子,两个直波导平行靠近时,功率会来回交换。传输矩阵可以写成:
import numpy as np
def directional_coupler(L, kappa, delta_beta=0):
"""
定向耦合器的传输矩阵(耦合模理论)
L: 耦合区域长度 (um)
kappa: 耦合系数 (1/um)
delta_beta: 相位失配
返回: 2x2 传输矩阵
"""
gamma = np.sqrt(kappa**2 + (delta_beta/2)**2)
if gamma == 0:
return np.eye(2, dtype=complex)
c = np.cos(gamma * L)
s = np.sin(gamma * L)
T11 = (c + 1j * delta_beta/(2*gamma) * s) * np.exp(-1j * delta_beta * L/2)
T12 = -1j * (kappa/gamma) * s * np.exp(-1j * delta_beta * L/2)
T21 = -1j * (kappa/gamma) * s * np.exp(1j * delta_beta * L/2)
T22 = (c - 1j * delta_beta/(2*gamma) * s) * np.exp(1j * delta_beta * L/2)
return np.array([[T11, T12], [T21, T22]])
# 假设耦合系数 kappa=0.1 um^-1,耦合长度 L=10 um
T = directional_coupler(L=10, kappa=0.1)
print("传输矩阵:\n", T)
print("直通端功率:", np.abs(T[0,0])**2)
print("耦合端功率:", np.abs(T[1,0])**2)
小技巧:仿真时先固定波导间距,用参数扫描找出 Lc 对应的耦合长度。我在项目中常把 Lc 作为优化变量,配合反向传播算法自动调参。
分束器仿真——Y 分支 vs MMI
分束器最常用的两种结构:Y 分支 和 多模干涉器(MMI)。Y 分支结构简单,但需要大角度来减少辐射损耗;MMI 长度稍长但工艺容差大。
| 结构类型 | 仿真方法推荐 | 关键参数 | 适用场景 |
|---|---|---|---|
| Y 分支 | FDTD / BPM | 分支夹角、波导宽度、过渡区长度 | 低分光比、紧凑布局 |
| MMI | FDTD / 模式传播 | MMI 宽度、长度、输入输出端口位置 | 1×2 / 2×2 通用分光 |
| 定向耦合型 | 耦合模 + FDTD | 耦合间距、耦合长度 | 可调分光比 |
仿真 Y 分支时要注意:过渡区不能太短。我见过新手为了节省长度把过渡区压到 5 μm,结果损耗增加了 2 dB。实际上,分束角小于 2° 时辐射损耗才比较可控。
避坑指南:我曾经用 MMI 做 1×2 分束器,仿出来分光比总是 52:48,怎么调都不对。后来发现是我忽略了输入波导的 offset 偏差——哪怕偏移 0.1 μm,MMI 内部模式都会改变。所以仿真时一定要把工艺偏差考虑进去。
合束器仿真——反向思维
合束器就是分束器的逆向使用。但这里有个关键区别:两路输入的相位差会影响合束效率。如果你仿真的是 MZI 中的合束器,必须保证两臂的相位一致,否则会有一部分功率损耗到非目标端口。
仿真方法很简单:把分束器的传输矩阵转置,然后加上相位项。比如 2×2 MMI 作为合束器时,输入光从输出端反向进入,仿真设置与分束器完全相同,只需调换激励端口。
⚠ 注意:合束器仿真中,插入损耗比分束器更容易超标。原因在于两路输入的 coherence(相干性)——如果存在相位差,会出现干涉相消,导致合束效率下降。仿真时务必同时扫描两个端口的相对相位。
三种元件仿真参数对比表
| 参数 | 定向耦合器 | 分束器 | 合束器 |
|---|---|---|---|
| 端口数 | 2×2 | 1×2 或 2×2 | 2×1 或 2×2 |
| 关键参数 | 耦合长度 Lc,间距 d | 分光比,过渡区长度 | 合束效率,相位灵敏度 |
| 典型仿真工具 | CMT + FDTD | FDTD / BPM | FDTD / 传输矩阵反向 |
| 常见指标要求 | 直通/耦合输出功率误差 <5% | 分光比误差 <3% | 合束损耗 <0.5 dB |
| 工艺敏感度 | 高(对间距敏感) | 中 | 中(对相位敏感) |
很多人在做合束器仿真时会漏掉方向性(directivity)这个指标。其实定向耦合器也有方向性要求——隔离端口不能有太多泄露。仿真时别忘了加一个端口检测,看看从合束器隔离端漏了多少光。
好了,这三种元件的建模思路和仿真要点基本都覆盖了。实际项目中,我通常会建一个参数化的仿真模板,把波导宽度、间距、耦合长度做成变量,一次性跑参数扫描。这样做的好处是:后面做容差分析和热调谐优化时,不用再重新搭仿真。