OptiSystem光纤传感器仿真:FBG与WDM系统设计实战 简介面向光通信、光纤传感与物联网方向工程师的Optisystem传感器系统仿真示例包集中解决利用仿真工具完成传感器建模、参数调试与性能评估的问题。压缩包共6个文件包含3个.osd仿真工程、2个.dat数据文件和1个MATLAB脚本整体约388KB文件类型覆盖工程模型、数据存储与辅助计算便于对应学习。示例涉及FMCW激光雷达的相干探测与直接探测方案、光纤布拉格光栅FBG温度及应变传感系统并配有TargetModel.m目标模型脚本可观察完整信号链路和目标响应设置。已有274人学习下载适合有一定光学基础、希望借助现成工程快速上手Optisystem传感器仿真或参考LiDAR与FBG典型案例进行二次开发的读者。1. 传感器系统仿真的首选工具为什么是 OptiSystemOptiSystem 是光通信系统仿真软件但它的价值远不止搭 PON 链路。做光纤传感器系统——光纤布拉格光栅FBG温度/应变传感、马赫-曾德尔干涉传感、光强调制式液位传感——在买激光器、光电探测器、开模打样之前先用 OptiSystem 把调制方式、光路损耗和解调方案验证一遍原型迭代成本会低一个数量级。标题里的两部分正好对应两条主线Sensor systems 是目标OptiSystem 是实现手段。这篇会讲清楚仿真链路怎么搭、参数怎么定、光谱数据怎么换算回物理量、多传感器通道怎么复用。适合做传感器与检测技术课程设计的学生也适合从光通信转向光纤传感的工程师。2. OptiSystem 传感器建模原理与关键参数选型传感器在 OptiSystem 里的建模本质是把温度、应变、压力这些物理量折算成光信号的某个可测量特征。仿真前先把传感机制归类后面选组件才不会乱。按被测对象对光的影响方式光纤传感器系统分成三大类它们在 OptiSystem 里的搭法完全不同参数侧重点也不一样。2.1 光强调制、波长调制与相位调制的仿真差异光强调制最简单被测物理量改变光功率大小典型代表是反射式光电传感器、浊度传感器和液位传感器。在 OptiSystem 里用可调衰减器模拟介质遮挡或折射率变化光电探测器输出的电流随衰减量线性变化链路只有光源、光纤、衰减器、探测器四件套。它的仿真重点在探测器响应度和暗电流因为功率检测的下限由噪声电流决定。波长调制以 FBG 为代表温度或应变让光栅周期改变反射谱中心波长发生漂移。这类传感器要用宽带光源或者可调谐激光器加环形器光谱分析仪OSA读峰值位置。仿真重点在 FBG 的中心波长、带宽和反射率以及 OSA 的分辨率是否足够分辨 1pm 量级的漂移。相位调制对应干涉型传感器比如马赫-曾德尔干涉仪传感臂和参考臂的光程差变化带来相位移动。这类仿真在 OptiSystem 里要保证光源相干性线宽参数直接决定干涉可见度计算量也最大。三类机制的传感器响应时间在仿真里统一由光电探测器的带宽参数控制做振动或声发射传感时探测器带宽要留出信号最高频率的 3 到 5 倍余量不然波形会明显迟钝。2.2 传感器仿真链路的核心器件参数表以最常用的 FBG 波长调制传感为例一套最小链路的器件角色和推荐参数如下组件链路中的角色关键参数FBG 传感推荐值CW Laser提供光源中心波长、功率、线宽1550nm10dBm线宽 1MHz环形器分离入射光与反射光插损、隔离度插损 1dB隔离度 40dBFBG传感元反射特定波长中心波长、带宽、反射率1550nm0.2nm反射率 0.9单模光纤传光与链路损耗衰减系数0.2dB/km光电探测器光电转换响应度、暗电流、带宽0.9A/W暗电流 1nA带宽 1GHzOSA读取反射光谱分辨率、扫描范围0.02nm扫描范围 10nm光源线宽 1MHz 对 FBG 反射谱测量已经足够窄线宽再小对结果没有帮助只会拖慢仿真。FBG 反射率 0.9 是为了让反射信号强度足够但反射率过高会加宽等效反射谱反而不利于峰值定位。OSA 分辨率 0.02nm 是中等精度仪表的水平仿真里再往小设意义不大因为实际仪器的分辨率上限就摆在那里。2.3 用探测极限公式反推传感器分辨率传感器系统设计里最容易犯的错是先把灵敏度做得很高最后发现噪声吃掉了全部信号。分辨率由噪声决定而不是由灵敏度决定这个关系在仿真阶段就该算一遍。下面这段代码估算探测器层面的噪声等效波长分辨率import math # 光电探测器散粒噪声与热噪声合并单位 A i_shot math.sqrt(2 * 1.6e-19 * 1e-3 * 1e9) # 1mA 光电流、1GHz 带宽 i_thermal 1e-9 # PIN 暗电流 1nA i_noise math.sqrt(i_shot**2 i_thermal**2) # 波长每漂移 1pm 引起的光电流变化量单位 A/pm # 这里按反射谱线性区斜率 1uW/pm、响应度 0.9A/W 折算 dI_dlambda 1e-6 * 0.9 resolution_pm 3 * i_noise / dI_dlambda print(f理论波长分辨率: {resolution_pm:.3f} pm)代码的逻辑是先算噪声电流再算波长漂移单位量对应的光电流变化两者之比乘 3 倍就是可分辨的最小波长变化。散粒噪声那一项里1e-3 是光电流1e9 是探测器带宽两个参数都直接取自 2.2 的参数表。算出来的数值如果大于 FBG 的实际温漂系数约 10pm/℃说明链路信噪比不足以支撑 1℃ 的测温需求需要提高光源功率或降低探测器带宽。注意 FBG 带宽 0.2nm 时反射谱线性区只有峰值两侧约 ±50pm超出这个范围的波长漂移会进入谱线平坦区斜率塌掉上面公式里的 dI_dlambda 不再成立解调就失效了。窄带宽 FBG 能提升分辨率但代价是解调范围变小这个权衡在选型时就要想清楚。3. 在 OptiSystem 搭建 FBG 传感器最小仿真链路原理层面对应清楚了这一步把它落成可运行的仿真。以 FBG 温度传感为例子搭一个能跑出反射谱、能看出波长随温度移动的最小链路整个搭建过程在 OptiSystem 图形界面里点选组件完成不需要写脚本。3.1 最小链路组件与布局顺序布局顺序决定了信号流向FBG 传感必须用环形器把反射光从入射光里分离出来。链路如下CW Laser → 环形器端口1 → 环形器端口2 → FBG → 反射光回环形器端口2 ↓ 环形器端口3 → 1×2 分路器 ↓ OSA(读光谱) 光电探测器(读强度)环形器端口 2 接 FBG入射光进入光栅满足布拉格条件的波长反射回端口 2从端口 3 输出这样反射光不会回流到激光器。端口 3 后面接一个 1×2 分路器一路进 OSA 看光谱一路进光电探测器看强度恰好覆盖波长调制和光强调制两种解调方式。很多仿真只接 OSA 不接探测器但实际解调设备往往是先光电转换再处理电信号仿真里保留探测器这一路后面验证解调算法时才有数据可用。3.2 FBG 参数与光源功率的设定值参考组件放好后双击编辑参数关键设置如下表。中心波长和带宽是传感核心不能随意改。设置项取值这样设的原因FBG 中心波长1550nm位于 C 波段光源与探测器选择面最宽FBG 带宽0.2nm兼顾 20dB 信噪比与 ±50pm 线性解调范围FBG 反射率0.9反射光强度够又不至于过度加宽反射谱光源功率10dBm经过环形器 1dB 插损和分路器损耗后探测器仍有足够光电流OSA 扫描范围1545~1555nm给温漂留出 10nm 余量避免峰值跑出视场OSA 采样点数2000扫描范围内的采样间隔 0.005nm低于 OSA 的 0.02nm 分辨率光源功率这个参数容易被忽略。FBG 反射率 0.9 意味着只有 10% 的光透射过去反射回来再经过环形器插损到达探测器的功率大约是入射的 0.9 倍减去 2dB 损耗所以 10dBm 输入实际只剩 8dBm 左右。如果光源功率低于 0dBm探测器光电流掉到微安级散粒噪声占比上升第 2 章算的分辨率就守不住。3.3 用参数扫描模拟应变和温度变化FBG 在 OptiSystem 里没有直接的温度或应变输入口常见做法是把传感量折算成中心波长的偏移用参数扫描来实现。我一般的步骤是把 FBG 中心波长设成表达式形式1550e-9 dlambda其中 dlambda 是全局变量然后在 Layout 的 Optimization/Sweep 模块里把 dlambda 作为扫描变量从 0 扫到 1nm步长 0.1nm每轮迭代记录一次 OSA 峰值位置。这一步的物理含义要先换算清楚。1550nm 波段的 FBG 温度系数约 10pm/℃应变系数约 1.2pm/με。所以 dlambda 每增加 0.1nm相当于温度升高 10℃或者应变增加约 83με。扫描完成后把每轮的峰值波长和对应的 dlambda 画出来理论上是一条斜率为 1 的直线。如果扫描步长取 0.05nm光纤光栅的中心波长按 0.05nm 跳变OSA 读出来却出现跳跃性误差先查 OSA 采样点数是不是太少而不是怀疑 FBG 本身。3.4 运行后的光谱与探针检查运行仿真后双击 OSA 查看反射谱重点检查三件事。第一峰值功率与噪声底之间的差值是否大于 20dB不满足就提高光源功率或加大 FBG 反射率。第二反射谱是否对称如果出现旁瓣说明 FBG 参数里的切趾设置没有打开旁瓣会干扰后面峰值拟合的精度。第三用 OptiSystem 的光功率计探针放在分路器输出端把测到的功率和手工估算值对一下。比如入射 10dBm环形器插损 1dBFBG 反射回来再经过环形器理论上功率计读数应该在 8dBm 附近偏差超过 1dB 就回去查光纤长度和连接损耗设置。4. 从 OptiSystem 光谱数据解调传感器物理量仿真跑通后真正决定传感器系统性能的是解调这一步把 OSA 读出的光谱转成峰值波长再换算成温度或应变。OptiSystem 本身不做物理量换算数据导出后用 Python 处理是最顺手的路径。4.1 OSA 数据导出格式与列含义在 OSA 显示界面右键选择 Export Data导出 CSV 文件前面两行一般是标题和单位从第三行开始才是数据。打开后形如, wavelength(nm), power(dBm) 0, 1549.50, -35.12 1, 1549.51, -34.98 2, 1549.52, -35.03第一列是采样点序号第二列是波长第三列是对数功率。注意功率单位是 dBm相对 1mW 的对数值峰值搜索如果直接在 dBm 域做谱线边缘的小起伏会被对数压缩掩盖解调代码里要先转回线性功率。不同版本的 OptiSystem 导出的分隔符可能是逗号也可能是制表符加载数据前先看文件头几行确认避免np.loadtxt解析报错。4.2 Python 峰值提取与高斯拟合代码峰值提取的常见做法是线性功率域里找最大值再用质心法精确定位。直接取功率最大点对应的波长会引入最多一个采样间隔的量化误差质心法则利用整段谱线信息可以把重复性做到远低于采样间隔。import numpy as np # csv 前两行为表头跳过 data np.loadtxt(fbg_spectrum.csv, delimiter,, skiprows2) wl data[:, 0] power_dbm data[:, 1] # 关键转线性功率再处理避免 dBm 域噪声被压缩 lin 10 ** (power_dbm / 10.0) # 以峰值下降 10dB 为阈值截取窗口剔除基线噪声 thr lin.max() * 0.1 mask lin thr # 质心法定位峰值波长 wl_peak (wl[mask] * lin[mask]).sum() / lin[mask].sum() print(f峰值波长: {wl_peak:.4f} nm)这段代码里有两个参数需要按实际数据调整。skiprows2对应 4.1 描述的导出格式如果版本不同导出了更多注释行改成实际行数阈值0.1表示取峰值功率下降 10dB 以内的点做质心。反射谱带旁瓣时窗口要收窄到下降 6dB阈值 0.25把旁瓣排除在质心计算之外否则旁瓣会拉偏峰值。如果追求更高精度可在窗口内对wl和lin做高斯拟合拟合中心作为峰值波长抗噪能力比质心法再强一档代价是每帧多几十微秒计算量静态传感足够高速振动传感就得权衡。4.3 灵敏度、分辨率与温度补偿换算峰值波长拿到后换算物理量用标定系数。1550nm 波段 FBG 的典型系数如下传感量标定系数换算公式温度0.01 nm/℃T (λp − λ0) / 0.01应变0.0012 nm/μεε (λp − λ0) / 0.0012λ0 是零输入时的初始峰值波长每一轮仿真开始前先记录一次。分辨率方面把多次独立扫描的峰值波长标准差取 3 倍除以对应系数就是测温或测应变的分辨率。比如标准差 0.5pm测温分辨率就是 0.15℃。这里必须提一个 FBG 传感的系统性难题温度和应变同时作用在光栅上峰值波长的移动是两者叠加的结果单通道解调无法区分各自贡献。这就是交叉敏感问题。解决办法是引入一路只感受温度、不感受应变的参考光栅用差分的方式把温度分量剥掉这正是第 5 章要做的双传感器结构。5. 双传感器差分补偿与多传感器 WDM 复用验证FBG 传感上到工程层面单一光栅几乎不够用。一方面需要参考通道解决交叉敏感另一方面需要在一根光纤上挂多个光栅测不同位置这就涉及波分复用WDM和多传感器融合。5.1 用 WDM 波长间隔规划多传感器通道多光栅复用时每个 FBG 分配一个互不重叠的波长窗口。中心波长间隔不能只看静态带宽要把最大温漂量算进去。带宽 0.2nm 的光栅温度测量范围若到 200℃温漂就有 2nm相邻通道间隔至少要 5nm 才安全通道FBG 中心波长测量用途通道 11545nm参考光栅只感受温度通道 21550nm应变传感通道 31555nm备用或第二测点通道间隔 5nm 是经验值等于 25 倍光栅带宽既避免光谱重叠又保证每个通道的峰值解调互不干扰。链路结构和单光栅完全一样只是把三个 FBG 串接在环形器端口 2 的光纤上OSA 一次扫出三个反射峰这就是多传感器融合在一根光纤上的落地方式。5.2 参考传感器通道的差分解调代码参考通道和传感通道处于相同温度环境但参考光栅不受应变。解调时先用参考通道算出温度再把这个温度引起的波长偏移从传感器通道里减掉# 参考通道与传感器通道读数单位 nm wl_ref 1545.12 # 参考光栅当前峰值 wl0_ref 1545.00 # 参考光栅初始峰值 wl_sensor 1550.38 # 传感光栅当前峰值 wl0_sensor 1550.00 # 传感光栅初始峰值 # 参考通道换算温度再折算成传感通道的温度漂移量 t (wl_ref - wl0_ref) / 0.01 temp_drift 0.01 * t # 从传感通道总漂移里扣除温度贡献剩余归应变 strain (wl_sensor - wl0_sensor - temp_drift) / 0.0012 print(f温度: {t:.1f} ℃, 应变: {strain:.0f} με)注意第二行temp_drift的单位要和传感通道的漂移单位一致这里都是 nm。工程上参考光栅的温漂系数要实测标定仿真里直接用理论值 0.01nm/℃误差可以接受。差分之后残留的读数抖动基本就代表了系统扣除温度影响后的真实应变分辨率。5.3 仿真可信度检查的三处关键点多通道仿真的结果能不能当设计依据落三个检查点。第一OSA 采样间隔要低于设备分辨率扫描范围除以采样点数必须小于 0.02nm否则通道峰值位置本身就不准。第二把每轮仿真的波长偏移量和扫描步长做一次线性回归斜率偏离 1 超过 5% 就说明光栅带宽设置过大反射峰已经进入平坦区。第三无源插损要能手工复算三个 FBG 串接后反射光功率会比单光栅低逐段加起来应该和功率计读数对得上。做一个 0 到 80℃ 的仿真扫描中心波长每步偏移 0.8nmOSA 读出的峰位移动应严格等于 0.8nm偏差超过 0.04nm 就回去查 FBG 带宽和采样点数。本文还有配套的精品资源点击获取