多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

VirtualLab Fusion复合光源仿真:从谐波集到光源通道的完整指南

VirtualLab Fusion复合光源仿真:从谐波集到光源通道的完整指南 搞光学仿真这么多年我发现一个很有意思的现象越基础的设置越容易被忽视。就拿光源来说——很多人在VirtualLab Fusion里拖一个高斯波光源进去设好波长、光腰、位置就开始追光追得快快乐乐直到某天遇到一个实际项目——比如客户给了一个白光LED或者一套RGB激光照明系统才发现单一波长的仿真根本交不了差。我今天想聊的就是在VirtualLab Fusion里怎么做复合光源仿真以及我在实际项目里踩过的一些坑。所谓复合光源通俗点说就是不止一个波长或不止一个发光点的光源。激光投影里的红绿蓝三色合光、汽车大灯里的多芯片LED阵列、激光雷达里的VCSEL面阵甚至一个普通白光LED的宽谱发光都属于复合光源的范畴。这类光源的共同点是你在仿真里没法用单一波长、单一位置的理想光源去近似否则结果会和实际系统差出十万八千里。而这正是VirtualLab Fusion这类基于物理光学的仿真平台最擅长处理的场景。1. 从单光源到复合光源现实项目逼出来的仿真需求1.1 单波长仿真的舒适区陷阱说句实在话我刚接触VirtualLab Fusion的时候也特别喜欢用单波长高斯光源。操作简单快结果又直观后处理也省事。但随着项目深入我慢慢发现这个舒适区是会坑人的。举个我真实踩过的例子。有次要给一套激光照明系统做光学设计整个系统用单波长650nm建模焦平面上的光斑又小又圆衍射极限附近MTF曲线漂亮得让人以为可以直接投产。结果原型装出来焦斑不仅偏了边缘还带着明显的彩色条纹。后来一查才知道实际光源虽然是单横模激光器但光谱宽度并不是零而且我在仿真里完全忽略了光源的偏振态和发光面尺寸对光束质量的影响。那个漂亮的结果只是在理想化条件下才成立。这件事之后我养成了一个习惯任何项目开始前先搞清楚这个光源在真实世界里到底是什么样的。是单色还是多色是相干还是部分相干是单点发射还是面阵发射只有在建模阶段把这些问题答清楚后面的仿真才有参考价值。1.2 必须上复合光源的四个高频场景根据我接触过的项目下面四类场景几乎是绕不开复合光源仿真的第一个是激光显示与投影系统。红光、绿光、蓝光三色激光合光波长分别可能落在638nm、520nm、465nm附近三束光在空间合束后还要经过扩束、匀化和投影物镜。这里就必须把三个波长放进同一个模型中否则你根本无法评估合束后的色差分布、匀光元件的衍射效率随波长变化以及投影物镜的轴向色差。第二个是LED照明系统。白光LED本质上是蓝色芯片激发荧光粉得到的一个连续宽谱光源。虽然很多仿真工具允许你用中心波长替代但一旦涉及颜色均匀性、透镜的色差对光斑边缘颜色分离的影响单波长建模就不够用了。哪怕不做连续光谱至少也要在可见光范围内取四五个代表性波长按光谱功率密度分配权重来近似。第三个是多发射元件的阵列光源。VCSEL激光器阵列、LED阵列、光纤束都属于空间维度上的复合。阵列中每个发射元都有独立的位置和方向它们之间还可能存在相干叠加或非相干叠加。这类场景用单个光源加人为发散角是模拟不出来的必须用多通道光源。第四个是偏振敏感的检测系统。比如某些光通讯模块中的偏振合束器设计需要分别仿真TE、TM两个偏振态的光源在系统中的透过率差异。每个偏振态又可能对应多个波长组合起来就是一个典型的复合光源问题。1.3 复合光源仿真到底能解决什么往小了说复合光源仿真能让你看到多波长系统焦平面的颜色分离、多发光点系统的干涉条纹、宽谱光源透过衍射元件后的光谱畸变。往大了说它决定了你能否在样机投板之前就把系统的极限性能估准。我自己的体会是单波长仿真适合做链路预算和初步架构验证而复合光源仿真适合做工程化落地和公差敏感性分析。两个阶段都有价值但后者更贴近真实工作。2. 谐波集与光源通道多波长和多发射点如何被组织起来2.1 谐波集(Harmonic Set)到底是个什么东西初次接触谐波集这个名词的人多半会以为它和傅里叶级数有关。其实在VirtualLab Fusion的语境里谐波集就是光源所包含的一组单色谐波波长的集合每一个谐波(Harmonic)代表一个特定的波长、相对权重和偏振状态。我用一个特别俗但特别贴切的类比来理解谐波集它就像调音台上的多路推子。每一路推子对应一个乐器一个谐波推子位置决定音量权重而音色偏振态、相位可以单独调。所有推子一起输出就是一段混合的音乐——对应到仿真里就是一组复合光源同时出射。这个设计的好处是你在整个光学系统中只需要维护一个光源对象但内部却可以携带几十个波长每个波长独立传播、独立评估。系统计算时会把每个谐波当作一次独立的子仿真来处理等所有谐波都算完了再通过探测器把结果整合起来。2.2 如何在光源编辑器中配置谐波在VirtualLab Fusion中新建一个光源比如高斯波光源双击进入光源编辑界面就能看到Harmonic Set相关的设置区域。这里有一个谐波列表默认情况下会有一个谐波波长通常是绿光波长线比如532.0nm。如果要做复合光源第一个操作就是往这个列表里添加更多谐波。具体步骤大概是这样的在谐波集管理区点添加按钮新建一个谐波条目设置这个谐波的波长值。VirtualLab Fusion支持以纳米或微米为单位也支持从波长列表中直接选取常见激光准线波长设置相对权重。权重直接决定这个谐波在光源总能量中的占比比如RGB三色光源里可以把三个谐波都设成1代表等功率LED近似时则要根据光谱曲线来定设置偏振态。每个谐波可以拥有独立的偏振椭圆包括琼斯向量或者Stokes参数在偏振敏感的系统里这一步绝对不能省如果涉及部分相干还需要在谐波集之外额外配置相干模式。全部配置完成后确认界面光源对象就从一个单色光源变成多波长复合光源了。此时再看系统光路图光源图标并不会发生什么显著变化但它携带的信息量已经完全不同。2.3 光源通道(Light Source Channels)空间维度的复合波长和偏振是复合光源的一个维度空间位置和发射方向是另一个维度。如果你要仿真VCSEL阵列就不能只靠谐波集还要用到VirtualLab Fusion的光源通道功能。光源通道可以理解为在同一个光源组件里定义多个独立的发射单元。每个单元有自己的位置偏移、发射方向、光束尺寸甚至可以有自己的谐波集。这样你就无需在系统树里摆一长串光源再去做阵列拼接整体的建模效率和可维护性都高很多。我用VCSEL阵列仿真做例子一个4x4的阵列总共16个发光孔孔径20微米间距250微米每个孔发射的是高斯型光束。在光源通道设置里我只需要建立16个通道每个通道写上相对中心位置的偏移量其他光束参数保持一致保存后一个光源对象搞定。如果某些通道因为工艺原因波长略有不同也可以通过独立谐波集去设置。2.4 相干还是非相干谐波集背后的叠加逻辑这是复合光源仿真中最容易糊涂的一个点。多波长谐波在探测器上到底是能量直接相加还是存在相干干涉答案取决于谐波之间的时间相干性。VirtualLab Fusion里同一谐波集内的谐波共享时间相干性它们之间是相干叠加的也就是说会产生波长的拍频或干涉效应。而不同通道、不同谐波集之间通常按不相干叠加处理能量直接相加。这一点在系统模型里是由物理机制决定的激光器不同纵模之间有固定相位关系就是相干不同LED芯片发出的光几乎没有固定相位关系就是非相干。我在做仿真时一般先判断光源类型再决定是放在同一个谐波集里还是分开。做多纵模激光器时所有纵模放同一个谐波集仿真结果能看到它们之间的干涉条纹做多芯片LED时用多个谐波集或修改相干参数避免算出虚假的高对比度干涉条纹。3. 三种典型复合光源的搭建全过程3.1 案例一RGB三色激光复合光源用于评估透镜色差这是最经典的多波长仿真场景。我有一次要评估一个F-Theta扫描物镜在RGB三色激光下的聚焦差异三个波长分别是465nm、520nm、638nm功率比大约为1:1.2:1.5。搭建过程是这样的新建一个高斯波光源初始波长设为465.0nm进入谐波集编辑界面添加第二个谐波波长设为520.0nm权重1.2添加第三个谐波波长设为638.0nm权重1.5三个谐波的偏振统一设为圆偏振因为实际系统中光纤传输后偏振态并不固定光源位置放在准直镜前光束半角按照光纤出光参数计算得到把F-Theta透镜组的光学面依次导入系统让光源先经过准直再进入扫描物镜在焦平面位置放置一个通用探测器并且把探测器的光谱显示打开。仿真跑完我可以在探测器中分别查看每个谐波在焦平面上的光斑分布。三个波长的光斑中心会有明显的横向偏移那是色差导致的每个光斑的尺寸也略有差异因为波长不同则衍射极限不同。这个结果直接为后面的消色差设计提供了量化依据。3.2 案例二白光LED的多波长近似从光谱曲线到谐波权重白光LED的根本问题是连续光谱。但连续光谱在物理光学仿真里没法直接逐波长跑完工程上最常见的做法是选取代表性波长离散化。我通常选取460nm、520nm、580nm、620nm、680nm这五个波长基本覆盖可见光的主要波段。权重怎么定最严谨的办法是拿LED厂家提供的光谱功率分布曲线把每个波长处的相对辐射强度记录下来作为权重填到对应谐波里。如果没有实测数据用厂家的典型光谱图也能估个大概。具体操作上VirtualLab Fusion支持通过脚本或数据文件导入光谱信息。我一般会在外部把光谱数据整理成两列波长、相对强度然后导入光源设置里的光谱输入区域软件会自动生成对应的谐波列表和权重。这样比手动一个一个添加谐波要快得多也不容易敲错数字。建模完成后把LED近似光源打入一个反射式杯形反光碗模型里观察目标面上的照度分布均匀性和色温分布。因为这个模型里包含了光学面的镀膜色散数据不同波长的透过率不一样最终照明面上会出现细微的色温不均这在实际项目中非常重要。3.3 案例三VCSEL阵列多通道光源用于计算阵列干涉效应VCSEL阵列我在前面提过这里补充一个关键细节阵列光源仿真最有意思的并不是单通道的光斑而是相邻发光孔之间的相干叠加。如果孔间距取样合适、相干条件满足远场光斑会出现明显的干涉峰结构这在激光雷达的照明均匀性设计中既可能是好处也可能带来麻烦。建模步骤新建一个高斯波光源设置发射孔径大小和发散角打开光源通道设置选择阵列布局模式输入行列数、间距、偏移方向每个通道的波长可以一致也可以微调。比如模拟实际工艺中波长分布不均的情况我给不同列通道设置了相差0.5nm的微调波长设置通道之间的相位关系建模相干场景在目标面上放置探测器切换远场分析模式。跑完之后远场探测器上的结果让我印象很深单个通道的发光高斯斑本来很平滑但阵列叠加后焦平面上出现了一堆次级峰峰值位置和通道间距直接相关。如果当初只用单通道光源外推阵列结果这个现象完全会被遗漏。3.4 关于光源尺寸、数值孔径与发射角的工程经验这里值得提醒一个细节复合光源的每个谐波或通道通常还要单独设置光束尺寸和发散角。很多人设置多个谐波时只改波长其他参数沿用默认值这在波长跨度很大的系统中会引入误差。原因是高斯光束的光腰尺寸和发散角跟波长相关。一个650nm的红光光束如果设计的发散角是20mrad那换到465nm蓝光同样发散角对应的光腰尺寸就变了。更严谨的做法是每个谐波按实际激光器出厂指标分别输入M2、光腰半径、发散角。在VirtualLab Fusion的光源参数里这些量是可以分开配置的不要嫌麻烦。4. 探测器配置与多波长结果判读别被漂亮的彩图骗了4.1 通用探测器与相机探测器怎么选VirtualLab Fusion里涉及光强分析的探测器主要有通用探测器和相机探测器两大类。简单来说通用探测器更偏向物理参数提取比如平面上的光强分布、相位分布、Poynting矢量相机探测器则是模拟真实相机传感器包含像元尺寸、量子效率、噪声等参数。复合光源仿真中我的习惯是做系统级像质评估比如算MTF、PSF优先用通用探测器做成像效果模拟想直接看到类似于相机拍摄出来的画面用相机探测器做光斑定量分析比如评估焦斑尺寸、斯特列尔比也以通用探测器为准。4.2 多波长结果如何分开看、叠加看、波段合成看复合光源仿真跑完探测器上默认显示的是所有谐波叠加之后的总强度。这在有些场合是想要的但更多时候你需要先分开看每个波长的表现再做对比。VirtualLab Fusion的探测器后处理界面里一般会列出所有已仿真的谐波条目。你可以切换显示任意一个谐波的独立结果也可以勾选多个谐波叠加。我常用的判断套路是先单独看每个波长的PSF和光斑半径再看所有波长叠加后的总光斑和包围圆能量对比单波长的SPF和叠加后的SPF差异判断色差和相干效应对系统的综合影响。4.3 一个量化评估色差的小模板为了说明判读方法我以那个RGB扫描物镜为例。Simulation完成后我在探测器上分别读取465nm、520nm、638nm三个谐波的光斑质心位置。表格如下波长理论衍射极限光斑半径实际仿真光斑半径质心偏移量465nm8.2 μm10.5 μm12 μm520nm9.1 μm12.0 μm0 μm638nm11.2 μm18.3 μm-15 μm从这个表能立刻看出来红光波长的光斑劣化明显比蓝绿严重而且质心偏移方向和其他两波长相反。这说明系统对该波长的色差校正不够。我拿着这张表去找做镜片设计的同事沟通双方很快就锁定了是哪两片透镜的光焦度分配出了问题。这里有个经验判读多波长结果时不要只看强度分布图上的彩色图——眼睛会被颜色骗过去。一定要读数把每个谐波的质心和光斑RMS数据导出来做对比。VirtualLab Fusion支持将探测器数据导出为文本或表格务必利用好。5. 采样、内存与仿真速度复合光源最容易翻车的地方5.1 采样网格不是越密越好复合光源仿真的计算量和光源包含的谐波数成正比例增长。如果一个系统只跑单波长时需要1024x1024的采样网格那跑了5个谐波后理论上计算量就是原来的5倍。这还是在网格尺寸不变的情况下。我见过不少新手为了追求高清效果把采样网格一路升到2048x2048空间采样密度越提越高结果电脑内存吃满仿真一跑就是好几个小时最后结果还不一定更好。我的建议是采样密度只要满足每根光束在最大传播距离处的局部采样不少于几个点就够了。具体来说观察焦平面上的光斑时采样窗口只要覆盖3到5倍光斑直径采样点数在256x256通常足够。盲目加大网格只会让计算变慢不会让物理精度有明显提升。5.2 内存消耗的爆炸点与应对方案复合光源仿真最让人头疼的是多波长同时传播时的内存峰值。尤其是当系统里有大尺寸光学元件时每个波长都要在工作窗口内表示整个场分布内存占用会成倍上涨。有一次我仿真一个直径100mm的准直镜系统光源包含8个谐波工作窗口设为120mm x 120mm采样网格512x512跑一个谐波时内存占用还正常跑到第五个谐波时虚拟机直接卡死。排查后发现我为了图方便把工作窗口设得很大而实际光束只用了中间一小块区域。解决办法也很简单让工作窗口贴合光束实际尺寸或者使用VirtualLab Fusion的自动窗口设置。软件本身有智能算法会根据光场的局部扩展调整采样网格强行用手动固定窗口反而可能破坏这个优化机制。在这个问题上我的原则是能用默认模式就不要手动覆盖。5.3 时间预算什么场景才值得跑参数扫描复合光源参数多比如各谐波的权重、通道间距、孔径尺寸。有人习惯把所有参数都丢进参数运行(Parameter Run)里自动扫描一次跑几十上百个组合。这样做在某些场合有效但复合光源本身计算量就大全参数扫描很容易让时间预算失控。我自己的策略是先用粗网格跑几组极端工况比如最大权重组合、最小通道间距组合判断系统行为是否单调。如果变化趋势明确再决定要不要做精细全扫描。这样能把仿真时间压缩到原来的十分之一甚至更少。6. 一次复合光源仿真项目的完整复盘6.1 项目任务与最初建模方案最后我完整复盘一个我之前做过的项目这个过程最能说明复合光源仿真在实战中的完整逻辑链路。任务很直接一套多芯片LED阵列照明模块用于工业视觉检测系统中的表面缺陷照明。光源是4颗异色LED芯片按方形排列波长大约在450nm蓝、520nm绿、590nm黄、630nm红附近每颗芯片功率不一致照明模块后接一片自由曲面透镜要求在400mm工作距上形成一个近似均匀的矩形光斑。我最初的建模方案是这样的建立四个高斯光源通道分别对应四颗芯片的位置和发射方向每个通道携带独立谐波集波长和功率按芯片实测数据填写设置通道间距20mm与PCB板上芯片的实际位置一致导入自由曲面透镜的透过面和出射面数据在400mm处放置通用探测器分析照度分布。6.2 中途踩过的两个大坑第一个坑出现在通道权重设置上。我最初按芯片电功率比例直接折算成光学权重但四颗芯片的光电转换效率差异很大导致仿真结果里蓝光能量明显偏低照明面的均匀性评估完全失真。后来改成按实际辐射功率比例重新设置谐波权重才恢复正常。第二个坑和相干性设置有关。我把四个通道放在同一个相干系统里仿真结果探测器上出现了一些很规则的干涉条纹。当时我觉得不对但说不清哪里不对。后来重新梳理了物理模型意识到LED发出的是非相干光芯片之间不存在固定相位关系应该按非相干叠加处理。修改了相干性设置后条纹消失照度曲线变得平滑。这个坑的核心教训是不能因为软件允许你建模相干现象就不判断物理上是否应该存在相干。6.3 仿真结果到工程样机的验证仿真收敛之后我得到的矩形光斑均匀性大约在±8%以内边缘过渡带宽度约15mm。之后制作了工程样机进行实测实测均匀性在±9.5%左右边缘过渡带约18mm两者趋势一致差异主要来自透镜面型加工公差和LED芯片出光角分布的测量误差。这个结果让我对复合光源仿真建立了比较强的信心多波长、多通道、非相干的建模思路是走得通的而且能直接指导照明设计落地。当然仿真的绝对值不会完全等于实测值但只要相对趋势对得上设计迭代的效率就能大幅提升。6.4 针对复合光源仿真的几条硬经验走完这个项目有几条经验必须分享第一模型里的每个波长和通道都要有实测依据别拍脑袋定权重。仿真最大的误差来源从来不是算法而是输入参数本身偏离物理真实。第二先问相不相关再决定建模方式。相干和非相干叠加结果差异巨大物理机制想清楚了软件设置只是执行层面的问题。第三探测器判读时多关注数值少沉迷彩图。强度分布图适合演示和汇报质心、RMS、包围能量这些数字才是设计决策的依据。第四学会用中间探测器做分阶段验证。不要等整个系统跑完才去检查光源设置正确与否在每个关键光学面后面临时放一个探测器看一眼光斑直径有没有异常放大、能量有没有异常衰减。这套习惯帮我提前发现了至少三次建模错误。6.5 后续可以扩展的方向复合光源仿真这个方向后续还能往几个方向延伸。比如把多波长光源与衍射光学元件结合看不同波长下的衍射效率分布或者把光源通道与公差分析联动评估阵列装配误差对系统性能的影响。VirtualLab Fusion本身支持这些能力但都需要从复合光源这个基础建模开始。这篇博文里的内容算是把这个地基打牢了。就我个人经验而言复合光源仿真并不是什么高不可攀的技术核心就是搞清楚谐波集、光源通道、相干性叠加这三件事再配合合理的采样策略和务实的判读方法。把思路理顺了你会发现它在项目里带来的信息量远比单波长仿真多得多。
返回列表