尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

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

OptiCommPy模拟光同相/正交调制器 文章目录简介实现测试简介同相/正交调制器(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_iEi​在经过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​​[1exp(jπVπ​uI​(t)VbI​​)]Ei​cos(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)jEi​cos(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,paramNone)其中Ei和u分别是输入光场和电压与公式中的值一一对应。param为OptiCommPy内置的参数类其成员包括成员说明默认值单位param.Vpi半波电压2Vparam.VbII-MZM的偏置电压-2Vparam.VbQQ-MZM的偏置电压-2Vparam.Vphi移相器偏置电压1Vparam.ERII-MZM消光比60dBparam.ERQQ-MZM消光比60dB测试下面生成 QPSK 的复数基带信号经过IQM调制器之后其实部和虚部分布如下代码为fromoptic.models.devicesimportiqmimportnumpyasnpimportmatplotlib.pyplotasplt plt.rcParams[font.sans-serif]Times New RomanEi1.00j# 生成 QPSK 的复数基带信号 (4个星座点)symbolsnp.array([11j,1-1j,-11j,-1-1j])# 为了画图好看每个符号重复 100 次u_signalnp.repeat(symbols,100)Eoiqm(Ei,u_signal)fig,axplt.subplots(figsize(6,6))# 提取输出光场的实部和虚部Eo_Inp.real(Eo)Eo_Qnp.imag(Eo)# 绘制散点图ax.scatter(Eo_I,Eo_Q,s50,cred,alpha0.8,edgecolorsblack)ideal_Inp.real(symbols)ideal_Qnp.imag(symbols)max_valnp.max(np.abs(Eo))ax.scatter(ideal_I*max_val/np.sqrt(2),ideal_Q*max_val/np.sqrt(2),s200,facecolorsnone,edgecolorsblue,linewidths2,labelref position)ax.axhline(0,colorgray,linestyle--,alpha0.5)ax.axvline(0,colorgray,linestyle--,alpha0.5)ax.set_xlabel(Real($E_I$))ax.set_ylabel(Imag($E_Q$))ax.set_aspect(equal,box)ax.grid(True,alpha0.3)ax.legend()plt.tight_layout()plt.show()
返回列表