ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

FBG与LPFG互补设计:光纤光栅温度、应变与折射率传感方案

FBG与LPFG互补设计:光纤光栅温度、应变与折射率传感方案 简介一套基于Matlab的光纤光栅仿真源码包围绕布拉格光栅FBG与长周期光纤光栅LPFG的光谱特性计算展开面向光纤通信、光学传感及光纤激光器领域的研究者和高校学生可直接用于计算并绘制两类光栅的反射谱或传输谱。资源共包含9个m脚本压缩包大小仅7KB覆盖均匀、切趾、啁啾等布拉格光栅以及温度变化下的光谱响应等典型模型每个文件对应独立功能便于按需调用和参数修改。已有294人学习下载。通过运行源码读者可结合耦合模理论观察周期、长度、折射率调制深度等参数对光谱峰值、带宽和漂移的影响深入理解布拉格反射条件与长周期模式耦合机制也可作为科研预研或课程实验的起点快速上手光纤光栅的Matlab建模仿真。特别适合光学工程专业的学生用于课程设计或毕业设计中的光栅特性分析。1. 拿着FBG去测液体折射率纹丝不动换上LPFG才偏移光纤光栅的互补逻辑FBG光纤光栅和LPFG长周期光纤光栅很多人一开始以为只是周期长短不同实际用起来才发现是完全不同的两类传感器。刚接触光纤光栅的人最常见的翻车场景是把布拉格光纤光栅贴到待测液体上期待反射峰跟着折射率移动结果光谱纹丝不动换上LPFG之后透射谱确实动了可温度一变它也东飘西飘。这篇笔记把FBG和LPFG放在一起讲——它们不是竞争关系而是互补关系FBG擅长测温度和应变LPFG擅长测周围介质折射率串在一根光纤上可以同时把三路物理量分开。下面的内容覆盖选型参数、仿真脚本、串接方案和落地坑给做光纤传感或准备把光栅写进监测方案的人一份能复现的路径。2. 设计FBG前先看耦合模中心波长、带宽和反射率由哪几个数决定2.1 布拉格光纤光栅为什么对温度和应变敏感FBG的反射原理可以用一个极其简洁的相位匹配条件描述λ_B 2 n_eff Λ其中λ_B是布拉格波长n_eff是纤芯导模的有效折射率Λ是光栅周期。典型通信光纤的n_eff在1550 nm附近约为1.448那么一个1550 nm的FBG周期只有535 nm左右属于亚微米量级。正因为这个周期小FBG内部发生的是前向导模与反向导模的耦合反射谱表现为一个尖锐的窄带峰。温度和应变如何改变布拉格波长对上面的式子求全微分能得到工程界常用的简化式Δλ_B / λ_B (1 - p_e) ε (α ζ) ΔTp_e是有效弹光系数对石英光纤约为0.22α是热膨胀系数约0.55×10⁻⁶ /°Cζ是热光系数约6.4×10⁻⁶ /°C。代入1550 nm可得到两个非常好用的经验系数应变灵敏度约1.2 pm/με温度灵敏度约10.4 pm/°C。这两个系数是所有FBG传感方案设计的出发点后面做实验标定的时候就是用它们来核对实测值是否正常。这里要特别强调一个新手容易误解的点FBG对外界折射率几乎不敏感是因为导模的能量被约束在纤芯内倏逝波在包层外已经衰减殆尽。哪怕把FBG整个泡进水里反射峰也不会移动超过几个皮米。所以在一个折射率传感项目里把FBG当作主传感器从一开始方向就错了——FBG在这个场景的角色应该是温度补偿。2.2 一个最小可运行的FBG反射谱仿真脚本选好了中心波长、调制深度和栅区长度之后先用脚本把反射谱算出来再动手写栅能省掉大量试错。均匀FBG的反射谱不需要动用复杂的商业软件用传输矩阵或者解析解就能算。下面这段Python脚本用的是均匀光栅的解析公式核心是耦合模方程在均匀折射率调制条件下的闭合解。import numpy as np import cmath import matplotlib.pyplot as plt # 光纤与光栅参数 lambda_B 1550e-9 # 设计布拉格波长 1550 nm n_eff 1.448 # 纤芯有效折射率SMF-28典型值 dn 1.5e-4 # 折射率调制幅度紫外写入常见量级 L 10e-3 # 栅区长度 10 mm # 波长扫描范围 wl np.linspace(1548.5e-9, 1551.5e-9, 4000) def fbgr(wl, lambda_B, n_eff, dn, L): # 直流耦合系数描述失谐程度 sigma 2 * np.pi * n_eff * (1 / wl - 1 / lambda_B) # 交流耦合系数描述折射率调制强度 kappa np.pi * dn / wl R np.zeros_like(wl) for i, (sig, kap) in enumerate(zip(sigma, kappa)): # 复数传播常数统一处理带内与带外 gamma cmath.sqrt(kap**2 - sig**2) s cmath.sinh(gamma * L) c cmath.cosh(gamma * L) r -kap * s / (sig * s 1j * gamma * c) R[i] abs(r)**2 return R R fbgr(wl, lambda_B, n_eff, dn, L) # 打印中心反射率与3dB带宽 peak np.max(R) idx np.argmax(R) band wl[abs(R - 0.5 * peak).argmin()] # 简单找3dB左侧边界 print(f峰值反射率: {peak:.3f}) print(f峰值波长: {wl[idx]*1e9:.3f} nm)这段代码的关键在耦合系数的处理上sigma是失谐项波长偏离布拉格波长越远sigma越大kappa是折射率调制幅度的直接体现dn越大纤芯里被反射回来的能量越强。gamma取复数是为了让公式同时覆盖禁带内与禁带外两个区域避免了分段判断。如果手头没有matplotlib把R输出成CSV文件导入任何绘图工具也一样用。用上面这组参数跑出来的结果中心反射率约0.963dB带宽约0.25 nm这是一个典型的10 mm栅区、中等调制深度的FBG。如果实际写栅后测到的带宽比仿真宽很多大概率是光栅非均匀或者包层模耦合漏掉了。2.3 三个必调参数中心波长、3dB带宽、峰值反射率FBG设计时真正要拍板的参数就三个中心波长、3dB带宽、峰值反射率。它们之间存在耦合关系不能孤立地定。中心波长直接由相位掩膜板的周期决定选1550 nm还是1310 nm取决于解调仪的光源范围和待测对象的谱线干扰。如果用光谱仪加宽带光源建议让FBG反射峰避开光源的ASE尖峰和熔接点的菲涅尔反射区。3dB带宽主要受两个因素控制栅区长度越长光谱越窄折射率调制越深光谱先变窄后展宽。弱调制条件下带宽与栅长近似成反比所以做高精度应变测量时喜欢用20 mm以上的长栅但代价是空间分辨率下降。分布式应变测量里空间分辨率由栅长决定这个trade-off要在方案设计阶段就写清楚。峰值反射率由dn和L的乘积决定。dn1e-4、L5 mm时的反射率只有约0.08而dn2e-4、L10 mm时轻松超过99%。实际工程里不建议追99.9%的极致反射率因为过强的折射率调制会导致光谱边模振荡反射峰两侧出现不规则的旁瓣给多光栅复用带来麻烦。我一般把目标定在70%到95%之间既能保证信号强度边模也能控制在可接受范围。3. LPFG的周期与相位匹配为什么100μm量级光栅能感知折射率3.1 LPFG和FBG的本质差异前向耦合决定了折射率敏感LPFG的周期通常在100 μm到500 μm之间比FBG大两个数量级。周期不同耦合的对象就完全不同FBG把前向导模耦合到反向导模LPFG把纤芯基模耦合到同向传输的包层模。包层模不像导模那样被约束在纤芯内它的倏逝场会一直延伸到包层外表面因此外界介质的折射率会直接影响包层模的有效折射率。正是这个机制让LPFG对外界折射率高度敏感。当环境折射率从1.33变化到1.44附近时LPFG谐振峰的偏移可以达到几十纳米比FBG对折射率的响应大四到五个数量级。代价是LPFG的透射谱带宽很宽单峰动辄十几纳米没法像FBG那样在一根光纤里密集复用。LPFG的谐振波长满足相位匹配条件λ_res (n_core - n_clad,m) Λ这里的n_clad,m是第m阶包层模的有效折射率不是包层材料的折射率。工程上说的阶数决定谐振峰的个数和位置同一个LPFG周期高阶包层模的n_clad,m更小谐振波长更长。设计时选哪个模式取决于这个模式对外界折射率的灵敏度曲线。3.2 手算谐振波长波长-周期曲线怎么用设计LPFG的第一步通常是手算一个粗略的谐振波长再用仿真软件精修。核心公式就一个λ_res (n_core - n_clad,m) Λ公式看起来简单难点在n_clad,m的取值。拿SMF-28来说1550 nm附近的基模有效折射率n_core约1.446二阶包层模的有效折射率大约在1.444到1.445之间具体值由波长、模式和外界折射率共同决定。如果手头没有模式求解工具可以从文献数据或者用Bessel函数特征方程自己算。举个例子想要谐振波长落在1550 nm附近取n_core - n_clad,m 0.0062那么周期Λ 1550 nm / 0.0062 ≈ 250 μm。这是一个非常典型的LPFG设计周期。写栅的时候掩膜板周期稍微偏一点谐振波长就会大幅漂移——这既是LPFG难写的地方也是它能做高灵敏度折射率传感的原因。需要提醒的是这个式子里的n_core和n_clad,m都随波长变化所以λ_res和Λ不是严格线性关系。真要精确设计必须把Sellmeier色散方程代进去做迭代求解。下面给一段可直接运行的波长-周期计算代码。import numpy as np # Sellmeier 系数纯石英近似值 B1, C1 0.6961663, 0.0684043**2 B2, C2 0.4079426, 0.1162414**2 B3, C3 0.8974794, 9.896161**2 def n_silica(wl_um): # wl_um 单位是微米 w2 wl_um**2 return np.sqrt(1 B1*w2/(w2-C1) B2*w2/(w2-C2) B3*w2/(w2-C3)) # 纤芯掺锗折射率略高于纯石英 def n_core(wl_um): return n_silica(wl_um) 0.005 # 典型Δn0.005 # 包层模有效折射率使用近似表达式精确值需要模式求解 def n_clad_m_approx(wl_um, m): # 简化近似包层模有效折射率随波长单调下降 # 这里用基准点 线性斜率模拟实测值需用特征方程求解 return n_silica(wl_um) - 0.0012 - 0.00008 * m # 计算相位匹配曲线 def phase_matching(wl_target_nm, m): wl_um wl_target_nm / 1000.0 nc n_core(wl_um) ncm n_clad_m_approx(wl_um, m) Lambda wl_target_nm / (nc - ncm) # 单位 nm return Lambda for m in range(2, 7): lam 1550.0 Lambda phase_matching(lam, m) print(fm{m}: 周期 {Lambda:.1f} μm, dn_eff{0.005 0.0012 0.00008*m:.5f})这段脚本没有精确求解包层模的有效折射率而是用一个线性近似模型演示设计流程。真正做产品时n_clad_m要用三层波导特征方程去求Bessel函数根或者直接用COMSOL、OptiGrating这类工具。但即便用近似值也能把周期估算到正负几十微米内足够决定该买什么周期的掩膜板了。3.3 LPFG透射谱的简化仿真LPFG的透射谱仿真比FBG麻烦得多完整做法需要求解耦合模方程组把基模和多个包层模之间的能量交换全算进去。工程上有一个足够用的简化把每个包层模对应的谐振峰看成独立的洛伦兹型凹陷透射谱是多个凹陷的乘积。这种近似在弱耦合和低包层模密度条件下误差不大。import numpy as np def lpfg_transmission(wl, n_core_val, n_clad_eff_list, Lambda, L, kappa_list): LPFG透射谱简化模型每个包层模对应一个洛伦兹型凹陷 适用于弱耦合、谐振峰不重叠的常规设计 T np.ones_like(wl) for n_clad_eff, kappa in zip(n_clad_eff_list, kappa_list): lam_res (n_core_val - n_clad_eff) * Lambda # 相位失配项 delta 2 * np.pi * (n_core_val - n_clad_eff) * (1 / wl - 1 / lam_res) gamma np.sqrt(kappa**2 delta**2) # 交叉耦合功率 P (kappa / gamma * np.sin(gamma * L))**2 T * (1 - P) return T # 参数设置 wl np.linspace(1400e-9, 1700e-9, 10000) # 扫描 1400-1700 nm n_core 1.4495 # 纤芯有效折射率 1550 n_clad_list [1.4408, 1.4385, 1.4338] # 不同包层模有效折射率示意值 Lambda 250e-6 # 周期 250 μm L 30e-3 # 栅区长度 30 mm kappa_list [8.0, 6.5, 5.0] # 每个模式的耦合系数单位 1/m T lpfg_transmission(wl, n_core, n_clad_list, Lambda, L, kappa_list) print(f最小透射率: {T.min():.3f})这个模型的物理含义很直接每个包层模对应一个谐振波长kappa越大该模式的能量耦合越强凹陷越深栅区长度L越长模式间的能量交换越彻底。工程上写LPFG时如果发现谐振峰深度不够最常见的手段就是增加曝光长度或者加大折射率调制。不过耦合过强会导致谐振峰变形甚至分裂这是LPFG设计和写制中最常踩的坑之一。4. FBGLPFG串接一根光纤上温度和折射率怎么分工测量4.1 两段光栅串接后光谱怎么读把FBG和LPFG串在同一根光纤上可以在一段光纤上同时获得两类传感信息。常见的接法是宽带光源从一端注入光先经过LPFG段再经过FBG段另一端接光谱仪读透射光谱。光谱仪上会同时出现LPFG宽达十几纳米的谐振凹陷和FBG只有零点几纳米的尖锐凹陷两者互不干扰。读谱的方式要根据解调设备区分。如果用的是光谱仪直接跟踪两个凹陷的中心波长就行。如果用的是FBG解调仪需要注意大部分解调仪只能识别反射峰对LPFG这种透射型光栅无解这时需要在光纤末端加反射镜或者用法布里-珀罗结构把透过光变成反射光。我一般建议在方案验证阶段直接用光谱仪带宽覆盖1400 nm到1600 nm一版光谱就能把两个光栅的信号都看清。FBG的温度灵敏度约10.4 pm/°CLPFG的温度灵敏度则要看包层模阶数和外界折射率常见值在10 pm/°C到80 pm/°C之间。两者对温度都敏感对折射率的响应却差了几百倍。这就带来一个明确的信号分工FBG的波长变化主要归因于温度和应变LPFG的波长变化主要归因于折射率和温度。把FBG当作温度参考在FBG不感受应变的安装方式下可以从LPFG的读数里扣除温度贡献。4.2 波长规划FBG反射峰必须避开LPFG凹陷的三个约束串接之后不是随便选波长就能用规划不当光谱会互相污染。第一个约束是FBG的工作波长不能落在LPFG谐振峰的半高宽范围内。LPFG凹陷动辄十几纳米宽FBG反射峰一旦落进它的底部光谱叠加后FBG凹陷会被淹没解调时峰值定位会产生偏移。第二个约束是LPFG谐振波长随折射率变化会大幅度漂移标定条件下避开的距离不足以应对测量范围工作波长应设计在LPFG凹陷边缘的延伸区之外。第三个约束是FBG的边模和反射次峰不能用强调制FBG边模可能延伸到LPFG凹陷里选型时优先用切趾FBG或者降低折射率调制。实际项目里常见的波长分配是LPFG谐振波长放1530 nm附近FBG反射峰放1555 nm附近中间留下至少15 nm的净空。测折射率最大偏移超过20 nm的应用就要把LPFG放到1510 nm以下或者选择折射率灵敏度更低的包层模来压住偏移量。4.3 解调方案的成本与精度取舍串接方案选解调仪有个绕不开的取舍光谱仪便宜直观但精度受像素间距限制通用机型横向分辨率约0.2 nm光纤光栅解调仪精度能做到1 pm但价格翻几倍且不认透射光谱。一种折中方案是用CCD光谱仪加高斯拟合算法对FBG凹陷做亚像素插值可以在不换硬件的条件下把定位精度提到几个皮米量级。处理LPFG凹陷时洛伦兹拟合比高斯拟合更可靠因为LPFG谐振峰偏离理想对称线型时洛伦兹拟合的残差更小。我的做法是先把光谱做基线扣除再用三点重心法做粗定位最后在粗定位波长附近做洛伦兹精拟合。这一套在纯Python里就能实现不需要专用软件。下面这段代码演示了重心法的核心逻辑。import numpy as np def peak_center_by_centroid(wl, T, search_range): # 限制搜索范围避免把噪声包进去 mask (wl search_range[0]) (wl search_range[1]) wl_m wl[mask] T_m T[mask] # 凹陷深度权重反转后做重心 depth 1 - T_m # 去掉基线偏置只用凹陷的深度做加权 depth depth - depth.min() if depth.sum() 1e-12: return np.nan center np.sum(wl_m * depth) / np.sum(depth) return center # 示例搜索 1525-1545 nm 范围内的LPFG凹陷中心 center peak_center_by_centroid(wl, T, [1525e-9, 1545e-9]) print(fLPFG凹陷中心: {center*1e9:.2f} nm)这个重心定位的误差来源主要是基线不平整和凹陷重叠。写LPFG时光谱基线往往带着宽带光源的ASE起伏必须先做平滑和基线扣除再做重心计算不然重心会被光源轮廓带偏。5. 光纤光栅落地避坑写栅、退火和串接的踩坑记录5.1 写栅后反射峰消失光谱上只有平整基线现象紫外曝光完成后立刻接光谱仪测FBG应该出现的反射峰完全不见整条光谱平坦得像没写过栅。原因最常见的是相位掩膜板与光纤贴得太紧或太松导致写入的条纹对比度极低。掩膜板与光纤接触过紧时高阶衍射条纹被抹平距离过远则相干条纹消失。另一个高频原因是光纤的载氢处理失效光敏性不足紫外光写不动。解决先把掩膜板与光纤的间距控制在50 μm到100 μm之间重新曝光一段短栅做测试。如果还不行检查紫外激光器的平均功率和重复频率功率密度建议保持在200 mW/mm²以上。写完后不要马上测光谱先做24小时自然老化或者快速退火再看因为刚写完的栅区有大量不稳定缺陷光谱会边漂边变。5.2 反射峰中心波长天天漂今天1550.2明天1550.8现象同一只FBG在相同温度下中心波长每天漂移幅度超过0.5 nm完全没法做定量测量。原因紫外写入过程中光纤内部产生了应力梯度和未稳定的缺陷中心。没有经过退火的光栅内部结构在室温下会持续缓慢弛豫波长随弛豫过程移动。解决写栅后必须做退火。常见做法是80°C到120°C下保温4到12小时然后再测常温波长。退火后的光栅短期稳定性能做到正负几个皮米。这个后悔药一定要在标定之前吃否则后面所有标定数据全部作废。5.3 LPFG谐振峰太浅透射谱上只有0.5 dB的凹陷现象设计的谐振波长位置有反应但凹陷深度只有0.5 dB反射率太低信噪比不足以支撑测量。原因耦合系数偏小通常是折射率调制幅度不够或者栅长过短。也可能是选用的包层模阶数本身耦合强度就低能量从基模耦合到该模式的比例很小。解决先加曝光时间把折射率调制做大观察凹陷深度是否同步上升。如果提升不明显说明模式选择有问题换成低阶包层模重新匹配周期。写LPFG比写FBG更依赖试错每写一版就做一次光谱记录把周期、曝光剂量和凹陷深度对应起来查。5.4 串接后两个凹陷互相干扰FBG凹陷旁边冒出不认识的次峰现象FBG与LPFG串接后FBG反射峰出现在透射谱中时旁边多出一串不规则的尖峰严重时主峰定位都受影响。原因FBG折射率调制过深产生边模振荡或者是LPFG的包层模与FBG的包层模之间发生了二次耦合。串接后两个光栅距离太近耦合还会叠加。解决把两个栅区的间距拉开到1米以上消除近场耦合。FBG写入时降低调制深度让峰值反射率控制在90%以下削弱边模。如果项目允许优先选择切趾FBG边模能被压到主峰下30 dB以上。5.5 温度补偿怎么算都不对FBG和LPFG测出的温度差好几度现象同一水浴里用FBG算出的温度和用LPFG算出的温度不一致差3°C到5°C。原因两个光栅对温度的响应曲线不是同一条。LPFG的温度灵敏度强烈依赖包层模阶数和环境折射率环境折射率变化时温度灵敏度也跟着变。直接用固定温度系数做补偿超出标定区间自然对不上。解决在目标测量范围内做矩阵标定把温度、折射率两维的变化同时记录下来得到交叉灵敏度矩阵而不是单一系数。使用的时候用FBG的温度读数先算温度修正项再解LPFG的折射率。这个顺序不能反过来因为FBG对折射率不敏感它的温度读数是干净的。6. 验证FBGLPFG方案能不能用三个低成本标定实验6.1 千分尺拉伸台应变系数实测对照1.2 pm/με把一个FBG粘在铝梁表面梁的一端固定另一端用千分尺推进每次给10 με的增量记录中心波长。实测斜率如果落在1.15到1.25 pm/με之间说明光栅写制和退火工艺正常。偏离这个区间首要怀疑粘贴胶层蠕变其次是光栅没有完全粘贴平直。6.2 蔗糖溶液梯度LPFG折射率灵敏度测定配一组10%到50%的蔗糖溶液折射率从1.3479变到1.4201把LPFG段浸泡在溶液里记录谐振波长。逐点拟合出波长-折射率曲线。这条曲线注意不要外推到包层折射率1.444以上接近包层折射率时灵敏度急剧上升曲线非线性非常强标定区间必须覆盖实际测量区间。6.3 水浴温度实验交叉验证两个光栅的温漂把串接好的光栅放入恒温水浴从25°C加热到60°C每5°C记录一次两个凹陷的中心波长。用FBG段的数据算出实际温度系数再把这个系数代入LPFG段的温度修正公式里检验修正后的LPFG读数是否还能在纯水中回到初始折射率。这个实验能一次性暴露温度补偿矩阵的错误。三个实验做完这套FBGLPFG方案能不能投入现场就有数了。我自己的习惯是每次标定都保留原始光谱文件随时可以回查当时基线的形状因为光栅老化后回看标定记录是判断数据是否可信的唯一依据。光纤光栅这东西很多问题到现场才暴露但基础扎实的标定能帮你把排查范围缩到最小。希望这些笔记能帮你在写栅和标定路上少走几步少烧几段宝贵的特种光纤。本文还有配套的精品资源点击获取
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表