VirtualLab Fusion中相干时间与相干长度的计算及光学仿真应用

发布时间:2026/9/9 14:01:48
VirtualLab Fusion中相干时间与相干长度的计算及光学仿真应用 做光学仿真的人多少都遇到过这种尴尬仿真文件里明明设置的是多模光源跑出来的干涉条纹却比实验干净得多对比度接近1。最开始我怀疑是实验光路没调好后来才发现问题出在“相干性”这三个字上——在VirtualLab Fusion里如果忽略了相干时间和相干长度这两个参数很多仿真结果会悄悄偏离物理现实而且查不到原因。这篇文章就围绕相干时间和相干长度计算器展开讲清楚两件事这两个量在VirtualLab Fusion中到底怎么算、怎么用以及我实际搭计算流程时踩过的坑。适合正在用VirtualLab Fusion做干涉、光谱、OCT或激光光源仿真的人参考尤其是那种“仿真结果过于完美”却不知道哪里出了问题的情况。1. 为什么相干时间和相干长度在光学仿真中这么容易被低估先说说我为什么会专门去搞这个东西。之前做一套迈克尔逊干涉仪的仿真目的很简单模拟宽谱光源LED经过干涉仪后的条纹可见度衰减。我在VirtualLab Fusion里用的光源是“部分相干平面波”中心波长532nm频谱带宽设了20nm按理说干涉条纹应该随着光程差增大而明显变模糊。结果仿真出来条纹对比度始终接近1扫了很大的光程差范围也不衰减。当时我第一反应是光源参数没生效后来把光源换成高斯谢尔模型、甚至直接上编程光源结果依然“完美相干”。最后发现问题出在我对软件内部计算逻辑的理解上VirtualLab Fusion对光源相干性的处理并不完全等价于在实验里放一个宽谱LED。它需要你把频谱信息和空间相干性分开设置而且有些默认选项会直接把时间相干性“锁死”在完全相干状态。这就是相干时间和相干长度这两个概念在仿真里容易被低估的原因——界面里到处都是“默认值”而这些默认值往往不是你以为的物理情况。相干时间和相干长度描述的是光场在时间维度和纵向空间维度上的关联程度。实验上一台He-Ne激光器的相干长度可以达到几十厘米甚至几米而一枚普通LED的相干长度通常只有几十微米到百微米量级。两者差了四五个数量级如果你的仿真把这四五个数量级的差别吞掉了那所有依赖相干叠加的仿真都会失真。在VirtualLab Fusion里这种“失真”往往不是报错而是结果看起来很合理但物理上不对。所以理解这两个参数怎么算、在哪一步影响仿真结果是避免这类问题的关键。2. VirtualLab Fusion里相干参数的计算逻辑从频谱宽度到相干包络2.1 相干时间与相干长度的物理定义和计算关系相干时间τc和相干长度Lc的定义并不复杂。对一束光可以用自相干函数的半高全宽或1/e宽度来定义相干时间。多数工程场景下采用频谱宽度来估算τc ≈ 1 / Δν其中Δν是光源的频率半高全宽或有效谱宽。对应的相干长度为Lc c · τc c / Δν用波长形式来表达更常用。因为ν c/λ对中心波长λ₀、谱宽Δλ且Δλ远小于λ₀的光源Δν ≈ c · Δλ / λ₀²于是Lc ≈ λ₀² / Δλ举个例子532nm波长、20nm谱宽的光源Lc ≈ (532 × 10⁻⁹)² / (20 × 10⁻⁹) 532² × 10⁻¹⁸ / 20 × 10⁻⁹ 14.1 × 10⁻⁶ m ≈ 14.1μm也就是说这台LED光源的相干长度只有大约14微米干涉仪两臂光程差只要超过这个量级条纹对比度就会明显下降。这个公式是有适用范围的它假设频谱是矩形的。实际光源的频谱更多是高斯形或洛伦兹形不同线型对应的相干包络形状不同相干长度的定义系数也会差一点。高斯谱对应的相干函数也是一个高斯包络而洛伦兹谱对应的相干函数是单边指数衰减包络后者在光程差较大时衰减更慢尾部更长。在VirtualLab Fusion里做定量仿真时不能只用“λ²/Δλ”估算完事要直接从频谱数据出发计算相干函数的实际形态。2.2 VirtualLab Fusion中光源设置如何体现相干性VirtualLab Fusion处理光源相干性的核心机制是允许你在光源定义中指定频谱权重和空间相干度而不只是简单地选一个“单色平面波”。具体来说软件里有几个典型的光源选项完全相干平面波频带无限窄空间上任意两点完全相干。适合模拟理想单色平面波但几乎不存在于真实实验。高斯波束空间相干性很高时间相干性取决于频谱带宽设置。部分相干光源可以理解为多个互相不完全相干的模式叠加。编程光源通过脚本或外部数据文件用户自定义频谱函数、空间分布甚至可以直接输入互强度mutual intensity分布。问题往往出在“频谱带宽”这个参数上。如果你选的是完全相干模型软件会在数值上直接把所有频率成分视为相位锁定干涉结果就是完全相干条纹跟带宽设置没关系。只有当光源类型明确支持“非相干叠加”时频谱带宽才会真正影响时间相干性。我用的部分相干平面波光源其实是把宽谱当作一组频率成分的非相干叠加来处理。理论上没问题但实际仿真时软件会把光谱离散成若干个频率采样点然后在探测器上对每个频率成分的强度场直接求和。这就带来一个采样精度问题如果频率采样数太少等效的相干长度会被错误地拉长仿真结果就会偏向“过于相干”。这个细节非常关键也是后面计算器设计时要重点考虑的因素。3. 亲手搭一个相干参数计算器操作步骤与工具逻辑3.1 确定计算所需的输入参数中心波长、谱宽、光源类型我做的这个“相干时间和相干长度计算器”本质上不是一个独立软件而是基于VirtualLab Fusion加外部脚本的一套工作流。它的输入参数有三类参数说明影响中心波长 λ₀光源频谱的中心位置决定干涉条纹的空间周期频谱半高全宽 Δλ光源的频谱宽度决定相干长度量级频谱线型高斯、洛伦兹、矩形或实测数据决定相干包络的衰减形态光源类型其实可以算作第4个输入它决定了前面这些参数是否真的参与计算。如果光源被设置为完全相干模型那相干时间就是无穷大后续计算没有意义。在实际操作中我首先会打开VirtualLab Fusion的光源编辑界面确认当前光源的光谱类型和带宽设置。很多工程同事给我的仿真文件里光源是直接从元件库拖进来的打开一看频谱模型是“monochromatic”这就是干涉条纹“永远清晰”的根源。这个习惯一定要改做干涉仿真之前第一步是检查光源频谱设置而不是直接看探测器结果。3.2 用VirtualLab Fusion提取光谱数据有了光源参数后下一步是从光源模型中提取频谱数据。手动记录中心波长和带宽再写进Excel也可以但效率低且容易出错。我建议用VirtualLab Fusion的Python API来读取光源的光谱权重函数把离散的频率-权重数组导出来。下面是我常用的Python脚本逻辑import numpy as np # 从VirtualLab Fusion中导出的光谱数据 # 第一列是波长nm第二列是归一化光谱强度 data np.loadtxt(source_spectrum.txt) wavelength data[:, 0] # 单位nm spectral_weight data[:, 1] # 计算频谱的一阶矩得到中心波长 lambda0 np.sum(wavelength * spectral_weight) / np.sum(spectral_weight) # 计算二阶矩得到频谱方差 sigma_sq np.sum((wavelength - lambda0)**2 * spectral_weight) / np.sum(spectral_weight) sigma_lambda np.sqrt(sigma_sq) # 将波长谱宽换算为频率谱宽 c 299792458.0 # 单位m/s lambda0_m lambda0 * 1e-9 sigma_lambda_m sigma_lambda * 1e-9 sigma_nu c * sigma_lambda_m / lambda0_m**2 # 相干时间和相干长度基于高斯谱的1/e定义 tau_c 1.0 / (2 * np.pi * sigma_nu) # 高斯谱束腰对应的时间 L_c c * tau_c print(f中心波长: {lambda0:.2f} nm) print(f频谱均方根宽度: {sigma_lambda:.3f} nm) print(f相干时间: {tau_c*1e12:.3f} ps) print(f相干长度: {L_c*1e6:.3f} um)这里用的是均方根宽度而非半高全宽因为高斯谱的物理计算用均方根更自然。如果你想换算成半高全宽对高斯谱有关系FWHM 2√(2ln2) σ ≈ 2.355σ。这个脚本的意义不只在于计算一个数值它把光源的实际频谱形态纳入了计算而不是套一个“λ²/Δλ”的近似公式。对高斯谱来说处理起来比较简单如果光源是洛伦兹线型同样的脚本需要改用洛伦兹谱的定义。3.3 以光程差扫描法验证相干长度计算器给出相干长度后不要急着信我建议在VirtualLab Fusion里搭一个简单干涉仪做交叉验证在迈克尔逊干涉仪模型里扫描两臂光程差记录条纹对比度随光程差的变化曲线。操作思路如下在VirtualLab Fusion里搭建迈克尔逊干涉仪分束器用50:50分光。两臂反射镜的位置分别设为可调给其中一臂加一个可变光程延迟。光源使用前面配置好的部分相干光源。扫描光程差从0到几倍计算出的相干长度。在探测器上记录每一组光程差下的干涉条纹计算可见度V (Imax − Imin) / (Imax Imin)。如果计算器给出的相干长度准确那么可见度下降到1/e或你定义的水平时对应的光程差应该和计算值吻合。我往往在验证这一步发现偏差原因通常是VirtualLab Fusion对光谱的频率采样点数不足。4. 三种典型光源的计算结果对比与工程判断为了把计算器用起来我整理了几种典型光源的参数和计算结果可以直接作为仿真初始参考。光源类型中心波长频谱宽度相干长度估算仿真注意点窄线宽激光器632.8nm1MHz约0.001pm数百米量级实际仿真受模型尺寸限制通常按完全相干处理激光二极管780nm0.5nm约1.2mm需要注意外腔反馈导致的有效线宽变化LED520nm30nm约9μm仿真时必须使用部分相干模型SLD超辐射发光二极管830nm20nm约34μmOCT系统典型光源相干长度直接决定纵向分辨率白光光源滤光后550nm50nm约6μm频谱线型复杂建议用实测数据这个表里最有意思的是激光二极管。名义上LD的线宽可能只有几十兆赫算出来的相干长度很长但实际LD工作时经常伴有模式跳变和频率漂移等效相干时间远小于理论值。如果仿真中直接把它当作完全相干源得到的干涉条纹会过于完美。遇到这种情况我会在VirtualLab Fusion里用“频率漂移”或“多纵模”的方式来建模而不是单纯依赖一个线宽参数。LED的相干长度只有几微米到十几微米这意味着什么意味着如果你用LED做干涉仪光源两臂光程差稍微大一点条纹就完全消失了。但很多光学教材习惯用LED做“零光程差定位”就是因为相干长度短——只有接近零光程差的位置才有高对比度条纹。在VirtualLab Fusion里复现这个现象计算器给出的相干长度可以直接用来预估扫描范围。SLD的情况也值得多说一句。SLD虽然是自发辐射光源但谱宽大、亮度高是OCT系统的主力光源。OCT的纵向分辨率直接和相干长度挂钩分辨率大约等于相干长度的一半。对830nm、20nm谱宽的SLD来说理论分辨率大约15μm。当你用VirtualLab Fusion做OCT系统仿真时敲进计算器的这些参数会直接决定你能否看到清晰的层析信号。5. 仿真与实验对不上的常见原因和排查建议5.1 频率采样不足导致的“虚高相干性”这是我在VirtualLab Fusion里遇到的最大坑。部分相干光源在数值上被离散成有限个频率成分每个频率成分独立传播后在探测器面上进行强度叠加。假设光源频谱范围是5nm软件默认只采样了3个频率点。此时等效光谱是3根极细的谱线它们的互相关会产生周期性的“相干复活”现象远在理论相干长度之外还能看到高对比度条纹。这不是物理问题是离散采样带来的数值伪影。排查方法很简单改变频率采样数观察干涉条纹对比度曲线是否明显变化。如果采样数从3变到5结果就有显著变化继续加密直到结果稳定。我现在做这类仿真时习惯把频率采样数设到20以上再跑。5.2 光程差测量基准不一致相干长度的计算结果对应的是光在真空中的光程差。实验里干涉仪两臂中间可能插了玻璃板、透镜等介质这时光程差要乘以折射率。VirtualLab Fusion里计算的是几何路径还是光学路径取决于介质设置。如果你忽略了折射率修正相干长度和条纹衰减位置会对不上。具体来说玻璃折射率1.55mm玻璃引入的光程差是7.5mm而不是5mm。误差会累积。5.3 空间相干性和时间相干性同时起作用很多干涉系统里条纹可见度下降不只是时间相干性的功劳还有空间相干性的因素。VirtualLab Fusion里这两者是分开设置的部分用户只调整了频谱带宽时间相干却忘了空间相干度仍然是完全相干得到的条纹对比度依然偏高。如果你模拟的是一个扩展光源比如LED贴片发光面积较大必须在光源设置里同时调整空间相干长度参数。一个快速判断的方法是在VirtualLab Fusion里改变光束直径或光源尺寸如果干涉条纹对比度几乎不变说明空间相干性可能设置过强。我自己遇到过案例仿真中条纹一直很清晰以为时间相干性计算出了问题折腾了很久最后发现是光源尺寸设成了0也就是点光源空间上完全相干。把光源尺寸改成实验中的实际尺寸后对比度立刻降下来了。5.4 频谱线型对相干包络的影响高斯谱和洛伦兹谱的相干包络衰减规律不同高斯谱的相干函数近似高斯形衰减比较“温和”洛伦兹谱的相干函数是指数衰减中心附近对比度下降更快但尾部拖得更远。在计算器里如果只输入FWHM而忽略了线型误差在小数点后第二位但如果你要精确预测远处光程差的条纹对比度线型的影响就是决定性的。实测光源最好直接导入光谱数据而不是用理想线型拟合。VitualLab Fusion里的编程光源可以读取外部光谱文件这个功能我强烈推荐使用。把光谱仪实测的LED光谱数据存成文本直接导入软件就会自动按实测频谱形态进行仿真。6. 计算器使用中的一些实操心得最后说几个个人经验可能对正在做相干仿真的朋友有直接帮助。第一不要迷信单值计算结果。相干长度是一个特征尺度不是硬边界。仿真时我不会只看“相干长度14μm”就完事而是会把可见度随光程差的完整曲线导出来看它和实验测量曲线是否匹配。匹配的是曲线形状而不仅仅是1/e位置。第二VirtualLab Fusion的探测器和后处理模块支持对干涉条纹做傅里叶分析。利用这一点你可以在一次仿真中得到整个光程差扫描范围内的条纹数据然后用脚本做可见度计算效率远高于逐点扫描。第三算完相干参数以后回头检查一下光源设置的“频率采样”选项。我在第5章反复提这个问题因为它确实太隐蔽了。很多情况下不是物理模型设错了而是数值离散参数不合适。对于一个相干长度只有几微米的LED光源频率采样不足会让仿真结果偏离实际几个量级。第四把计算器脚本和VirtualLab Fusion的光源参数联动。我在工程实践中会把Python脚本写成一个函数输入是VirtualLab Fusion导出的光谱文件输出是正确的频率采样数、相干时间、相干长度建议值。这样每次修改光源参数后一步就能得到全部需要的信息。光凭感觉去猜太容易出问题。光学系统的相干性本质上是光场统计特性问题。VirtualLab Fusion给了我们一个很好的数值平台去复现和预测这些统计特性但前提是你要理解每一步仿真设置对应的物理含义。相干时间和相干长度计算器只是其中一个工具但它背后的思路是共通的永远把仿真参数映射回物理量再判断结果是否合理。希望这篇分享能帮你在解决“仿真过于完美”这类问题时少走一些弯路。