news 2026/8/22 13:17:34

OptiCommPy模拟线性光纤通道

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OptiCommPy模拟线性光纤通道

文章目录

    • 原理
    • 实现
    • 示例

原理

在实际光纤中,光信号传输存在诸多非线性效应,比如自相位调制 SPM、交叉相位调制 XPM、四波混频 FWM 等。而对于线性模型而言,则只考虑光线衰减和色度色散这两方面的因素。

从数学角度来说,线性衰减的过程可以在频域中通过快速傅里叶变换来实现,它本质上是将输入信号转换到频域,乘以一个线性光纤的频域传递函数H ( ω ) H(\omega)H(ω)再转换回时域。传递函数H ( ω ) H(\omega)H(ω)的数学表达式为

H ( ω ) = exp ⁡ ( − α 2 L ) exp ⁡ ( − j β 2 2 ω 2 L ) H(\omega)=\exp\left(-\frac{\alpha}{2}L\right)\exp\left(-j\frac{\beta_2}{2}\omega^2L\right)H(ω)=exp(2αL)exp(j2β2ω2L)

式中,exp ⁡ ( − α 2 L ) \exp\left(-\frac{\alpha}{2}L\right)exp(2αL)表示幅度衰减,exp ⁡ ( − j β 2 2 ω 2 L ) \exp\left(-j\frac{\beta_2}{2}\omega^2L\right)exp(j2β2ω2L)表示色散引起的相位偏移,β 2 = − λ 2 2 π c D \beta_2=-\frac{\lambda^2}{2\pi c}Dβ2=2πcλ2DD DD为色散系数。

实现

OptiCommPy提供了线性光纤通道函数,其函数签名为

optic.models.channels.linearFiberChannel(Ei,param)

其中Ei是输入的复数光场信号,param是OptiCommPy内置参数类,包括如下成员

  • param.L: 光纤总长度,单位 km。默认 50 km。
  • param.alpha: 光纤衰减系数,单位 dB/km。默认 0.2 dB/km。
  • param.D: 色度色散参数,单位 ps/nm/km。默认 17 ps/nm/km。
  • param.Fc: 光载波频率,单位 Hz。默认 193.1e12 Hz (即 193.1 THz,对应 C 波段 1550 nm 附近)。
  • param.Fs: 信号的采样频率,单位 Hz。默认 None。
  • param.returnParameters: 是否返回信道参数。如果为 True,除了返回输出信号,还会返回更新后的 param 对象,方便后续级联仿真。

示例

下面对linearFiberChannel进行测试,模拟信号光在光纤中传播80km之后的变化,结果如下

importnumpyasnpimportmatplotlib.pyplotaspltfromoptic.utilsimportparametersfromoptic.models.channelsimportlinearFiberChannel# 设置仿真参数Fs=100e9# 采样率 100 GHzFc=193.1e12# 载波频率 193.1 THzt=np.arange(-1000,1000)/Fs# 时间轴# 生成输入信号 (高斯脉冲)T0=20e-12# 脉冲宽度 20 psEi=np.exp(-(t**2)/(2*T0**2))# 配置光纤信道参数 (使用 optic.utils.parameters 对象)param=parameters()param.L=80# 传输距离 80 kmparam.alpha=0.2# 衰减 0.2 dB/kmparam.D=17# 色散 17 ps/nm/kmparam.Fc=Fc# 载波频率param.Fs=Fs# 采样率 (必须与信号匹配)param.returnParameters=FalseEo=linearFiberChannel(Ei,param)loss_linear=10**(-param.alpha*param.L/20)Eo_compensated=Eo/loss_linear# 6. 绘图对比plt.figure(figsize=(10,5))plt.plot(t*1e12,np.abs(Ei),'b-',linewidth=2,label='Input (Ideal)')plt.plot(t*1e12,np.abs(Eo_compensated),'r--',linewidth=2,label=f'Output after{param.L}km (Loss compensated)')plt.xlabel('Time (ps)')plt.ylabel('Normalized Amplitude')plt.title('Linear Fiber Channel: Pulse Broadening due to Chromatic Dispersion')plt.legend()plt.grid(True)plt.xlim([-100,100])plt.show()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 13:16:52

3 步完成量化回测可视化:backtrader-pyqt-ui 实战

3 步完成量化回测可视化:backtrader-pyqt-ui 实战 【免费下载链接】backtrader-pyqt-ui 项目地址: https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui 打开界面,改一个参数,点 Run,几秒后图表刷新出新标记——backt…

作者头像 李华
网站建设 2026/8/22 13:16:00

第234篇 运动规划面试高频题——面试官最爱问的15个规划问题

前面十篇(224-233)讲了运动规划的各种算法——Reed-Shepp曲线、混合A*、轨迹优化、B样条、TOPP、碰撞检测、CHOMP/TrajOpt。今天做一个总结:把面试官最爱问的15个运动规划问题整理在一起,每个问题给出精炼的回答要点。面试运动规划…

作者头像 李华
网站建设 2026/8/22 13:15:05

开源程序启动器OpenProgram:打造个人效率中枢的实践指南

1. 项目概述:一个开源的“程序启动器”能做什么?如果你和我一样,电脑里装满了各种开发工具、设计软件、效率应用和随手写的小脚本,那么每天打开电脑后,第一件头疼的事可能就是:我要从哪里启动它们&#xff…

作者头像 李华