简介
同相/正交调制器(In-Phase/Quadrature Modulator, IQM)顾名思义,核心光路由I和Q组成,二者均为完整的马赫-曾德尔调制器(MZM),分别用于调制同相分量和正交分量。其工作流程为
- 将输入光分为两束,分别进入上臂(I-MZM)和下臂(Q-MZM)。
- 在Q-MZM的输出端,放置一个90° 移相器,将Q路的光场相位偏移 90°( π 2 \frac{\pi}{2} 2π)。
- 将 I 路和 Q 路的光场重新合并输出。
输入光场 E i E_i Ei在经过IQM后,其I路输出光场为
E I ( t ) = E i 2 [ 1 + exp ( j π u I ( t ) + V b I V π ) ] = E i cos ( π 2 u I ( t ) + V b I V π ) exp ( j ϕ c , I ) \begin{aligned} E_I(t)&=\frac{E_i}{2}\left[1+\exp\left(j\pi\frac{u_I(t)+V_{bI}}{V_\pi}\right)\right]\\ &=E_i\cos\left(\frac{\pi}{2}\frac{u_I(t)+V_{bI}}{V_\pi}\right)\exp(j\phi_{c,I}) \end{aligned} EI(t)=2Ei[1+exp(jπVπuI(t)+VbI)]=Eicos(2πVπuI(t)+VbI)exp(jϕc,I)
其中, ϕ c , I \phi_{c,I} ϕc,I为共模相位,通常在直接检测中可忽略,在相干检测中会被本振光抵消。
Q路MZM在经过90°相移器后,其输出电场需要乘以相移因子 e j π 2 e^{j\frac{\pi}{2}} ej2π,最终得到
E Q ( t ) = j E i cos ( π 2 u Q ( t ) + V b Q V π ) E_Q(t)=jE_i\cos\left(\frac{\pi}{2}\frac{u_Q(t)+V_{bQ}}{V_\pi}\right) EQ(t)=jEicos(2πVπuQ(t)+VbQ)
总输出光场为
E o ( t ) = E i [ cos ( π 2 u I ( t ) + V b I V π ) exp ( j ϕ c , I ) + j cos ( π 2 u Q ( t ) + V b Q V π ) ] E_o(t) = E_i\left[ \cos\left(\frac{\pi}{2}\frac{u_I(t)+V_{bI}}{V_\pi}\right)\exp(j\phi_{c,I}) + j\cos\left(\frac{\pi}{2}\frac{u_Q(t)+V_{bQ}}{V_\pi}\right) \right] Eo(t)=Ei[cos(2πVπuI(t)+VbI)exp(jϕc,I)+jcos(2πVπuQ(t)+VbQ)]
实现
OptiCommPy提供了IQM模型函数,函数签名为
optic.models.devices.iqm(Ei, u, param=None)
其中Ei和u分别是输入光场和电压,与公式中的值一一对应。param为OptiCommPy内置的参数类,其成员包括
| 成员 | 说明 | 默认值 | 单位 |
|---|---|---|---|
| param.Vpi | 半波电压 | 2 | V |
| param.VbI | I-MZM的偏置电压 | -2 | V |
| param.VbQ | Q-MZM的偏置电压 | -2 | V |
| param.Vphi | 移相器偏置电压 | 1 | V |
| param.ERI | I-MZM消光比 | 60 | dB |
| param.ERQ | Q-MZM消光比 | 60 | dB |
测试
下面生成 QPSK 的复数基带信号,经过IQM调制器之后,其实部和虚部分布如下

代码为
from optic.models.devices import iqm
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'Times New Roman'
Ei = 1.0 + 0j
# 生成 QPSK 的复数基带信号 (4个星座点)
symbols = np.array([1+1j, 1-1j, -1+1j, -1-1j])
# 为了画图好看,每个符号重复 100 次
u_signal = np.repeat(symbols, 100)
Eo = iqm(Ei, u_signal)
fig, ax = plt.subplots(figsize=(6, 6))
# 提取输出光场的实部和虚部
Eo_I = np.real(Eo)
Eo_Q = np.imag(Eo)
# 绘制散点图
ax.scatter(Eo_I, Eo_Q, s=50, c='red', alpha=0.8, edgecolors='black')
ideal_I = np.real(symbols)
ideal_Q = np.imag(symbols)
max_val = np.max(np.abs(Eo))
ax.scatter(ideal_I * max_val / np.sqrt(2), ideal_Q * max_val / np.sqrt(2),
s=200, facecolors='none', edgecolors='blue', linewidths=2, label='ref position')
ax.axhline(0, color='gray', linestyle='--', alpha=0.5)
ax.axvline(0, color='gray', linestyle='--', alpha=0.5)
ax.set_xlabel('Real($E_I$)')
ax.set_ylabel('Imag($E_Q$)')
ax.set_aspect('equal', 'box')
ax.grid(True, alpha=0.3)
ax.legend()
plt.tight_layout()
plt.show()

199

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



