第3章 光学矩阵乘法原理:MZI干涉与矩阵架构

说实话,我第一次接触马赫-曾德尔干涉仪(MZI)的时候,觉得这东西不就是个光学版的"跷跷板"吗?后来真正在实验室里搭系统,才发现里面的门道比我预想的多得多。这一章,咱们就把MZI的干涉原理和用它搭矩阵乘法的架构聊透。

核心认知:MZI是硅光计算芯片中最基础的计算单元。你想想看,一个巴掌大的芯片上,可能要集成成百上千个MZI。搞懂它的原理,就等于拿到了光子矩阵乘法的入场券。

3.1 MZI干涉原理:从"分光"到"干涉"

MZI的结构其实不复杂。它由两个分束器和两条波导臂组成。光从左侧进入,先被第一个分束器一分为二,分别走上臂和下臂,然后在第二个分束器处汇合,发生干涉。

我在项目中用过热光效应的MZI,也用过电光效应的,各有各的坑。热光的调谐范围大,但响应慢;电光的快,但损耗大。选型的时候得仔细掂量。

为什么会发生干涉?说白了,就是两路光在汇合时,相位差决定了它们是"相互增强"还是"相互抵消"。控制其中一臂的相位,就能控制输出光的分配比例。

我的习惯:每次调试MZI之前,先用连续光扫一遍相位响应曲线。这样能快速发现分束器是否偏了、波导损耗是否异常。别问我为什么强调这个——我曾经在测试时发现干涉对比度上不去,折腾了两天才定位到是分束器的分束比偏离了50:50。

数学上,MZI的传输矩阵可以写成这样:

⎡ E_out1 ⎤   ⎡  cos(θ/2)   -i·sin(θ/2) ⎤ ⎡ E_in1 ⎤
⎣ E_out2 ⎦ = ⎣ -i·sin(θ/2)   cos(θ/2)  ⎦ ⎣ E_in2 ⎦

其中 θ 是两臂之间的相位差。通过改变 θ,就能连续调节两个输出端口的光强分配。

来个简单的Python函数,算一算输出光强:

import numpy as np

def mzi_output_power(p_in, theta):
    """
    计算MZI两个输出端口的光强
    p_in : 输入光功率(假设从端口1输入)
    theta: 相位差(弧度)
    """
    p_out1 = p_in * np.cos(theta / 2) ** 2
    p_out2 = p_in * np.sin(theta / 2) ** 2
    return p_out1, p_out2

# 举个栗子:θ=π/2 时,两路各分一半
p1, p2 = mzi_output_power(1.0, np.pi / 2)
print(f"输出1: {p1:.3f}, 输出2: {p2:.3f}")
# 输出1: 0.500, 输出2: 0.500

注意:实际芯片中的MZI会有额外损耗,分束器也不是完美的50:50。这些非理想因素会在矩阵乘法中引入误差。我的经验是——留好校准余量,别把理论值当实测定。

MZI干涉仪结构原理 E_in BS1 Δφ BS2 E_out1 E_out2 干涉结果取决于Δφ:相长 or 相消

3.2 光学矩阵乘法架构:把MZI串起来

单个MZI只能做2×2的矩阵运算。要做大矩阵怎么办?把它们级联起来。目前主流架构有两种:Reck架构和Clements架构。

我记得第一次用Reck架构搭3×3矩阵时,相位校准调了整整两天。后来换成Clements架构,校准效率高了不少。你想想看,架构选型直接影响工程实现的工作量。

Reck架构:三角形网格

  • MZI排成三角形,N×N需要 N(N-1)/2 个MZI。
  • 每个MZI负责消去矩阵中的一个元素,按顺序逐层收敛。
  • 优点:结构直观,适合理解原理。
  • 缺点:光路传播路径长度不一,造成相位误差累积。

Clements架构:矩形网格

  • MZI排成矩形,N×N同样需要 N(N-1)/2 个MZI。
  • 光路传播路径等长,相位误差更均匀,校准更友好。
  • 优点:误差分布均匀,适合大规模集成。
  • 缺点:结构稍复杂,布線需要更精细。

我的建议:如果你在做原型验证,用Reck架构就够了,调试起来直观。但如果是做产品级芯片,我强烈建议用Clements架构——大规模集成时,均匀的误差分布能省掉你大量的校准时间。

两种架构的对比如下:

对比维度Reck架构Clements架构
排列形状三角形矩形
MZI数量(N×N)N(N-1)/2N(N-1)/2
光路路径长度不一致一致
相位误差分布不均匀均匀
校准难度中等相对容易
大规模集成友好度一般高
<