OptiCommPy模拟光同相/正交调制器

文章目录

简介

同相/正交调制器(In-Phase/Quadrature Modulator, IQM)顾名思义,核心光路由I和Q组成,二者均为完整的马赫-曾德尔调制器(MZM),分别用于调制同相分量和正交分量。其工作流程为

  1. 将输入光分为两束,分别进入上臂(I-MZM)和下臂(Q-MZM)。
  2. 在Q-MZM的输出端,放置一个90° 移相器,将Q路的光场相位偏移 90°( π 2 \frac{\pi}{2} 2π)。
  3. 将 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)

其中Eiu分别是输入光场和电压,与公式中的值一一对应。param为OptiCommPy内置的参数类,其成员包括

成员说明默认值单位
param.Vpi半波电压2V
param.VbII-MZM的偏置电压-2V
param.VbQQ-MZM的偏置电压-2V
param.Vphi移相器偏置电压1V
param.ERII-MZM消光比60dB
param.ERQQ-MZM消光比60dB

测试

下面生成 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值