光通信元件建模:定向耦合器、分束器、合束器的仿真方法

做过光芯片仿真的朋友都知道,最基础也最常碰到的无源元件就是这三兄弟:定向耦合器、分束器、合束器。说它们基础,是因为几乎所有的复杂电路(MZI、谐振环、开关阵列)都离不开它们。但很多人一开始容易搞混——尤其是分束器和定向耦合器,总觉得都差不多。

我个人习惯用一句话区分:分束器是把光功率按固定比例分成两路;定向耦合器虽然也在分,但它还有一个方向选择性。至于合束器,说白了就是分束器反过来用,但要注意相位关系。

这一节我不讲枯燥的数学推导,重点聊仿真时要怎么建模、参数怎么设、有哪些坑。嗯,这些经验是我在好几个项目中一点点磕出来的。

光通信无源元件仿真知识体系 定向耦合器 分束器 合束器 耦合模理论 (CMT) FDTD 仿真 传输矩阵法 Y 分支仿真 MMI 仿真 定向耦合型分束 反向 Y 分支 逆 MMI 2×2 耦合器反向 仿真关键参数:耦合长度(Lc)、分光比、插入损耗、方向性、工作波长范围 常用仿真工具:FDTD (Lumerical/MEEP)、FEM (COMSOL)、传输矩阵 (Python)

定向耦合器仿真——从耦合模到布局

定向耦合器的核心参数是耦合长度 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)这个指标。其实定向耦合器也有方向性要求——隔离端口不能有太多泄露。仿真时别忘了加一个端口检测,看看从合束器隔离端漏了多少光。

好了,这三种元件的建模思路和仿真要点基本都覆盖了。实际项目中,我通常会建一个参数化的仿真模板,把波导宽度、间距、耦合长度做成变量,一次性跑参数扫描。这样做的好处是:后面做容差分析和热调谐优化时,不用再重新搭仿真。