使用Henyey-Greenstein分布模拟体散射
概述
这篇文章介绍了如何使用Henyey-Greenstein(后文简称H-G)分布定义体散射。该模型可以更改输入参数的设置,因此可以模拟不同类型的系统,其中主要包括光线与生物样本或星际尘埃之间发生的散射效应。本文使用的示例文件请从以下链接下载:
https://customers.zemax.com/ZMXLLC/media/Knowledge-Base/Attachments/11008_ArticleAttachments.zip
介绍
H-G模型用来描述了光线入射到微小颗粒产生散射时的角分布。该模型可以应用于很多情况,最主要的应用为模拟生物样本产生的散射[1]及星际尘埃产生的散射[2]。在这个模型中,散射光线的角分布定义为:
其中参数g用来对分布进行描述。当g=0时,该模型模拟光线射入材料后,散射光线在所有方向的散射概率是相同的。随着g逐渐增大并接近1,散射分布逐渐集中于q=0度的方向。
H-G模型的能量分布
本节使用的示例文件请见下载附件中的HG-power.ZMX文件。
该系统中包含一个单光线光源 (Source Ray),光源发出的光线垂直射入一个矩形体,其中矩形体定义为H-G体散射分布,该分布使用一个用户自定义DLL来定义。
打开非序列元件编辑器中矩形体(本例中为物体2)的物体属性 (Object Properties),在体散射 (Volume Physics)选项卡中可以看到,该散射模型为DLL文件散射 (DLL Defined Scattering)并且DLL文件选择“Henyey-Greenstein-bulk.DLL”:
系统中使用的DLL文件及源代码(.c文件)默认位于Zemax根目录下DLL > BulkScatter文件夹中。
该DLL文件需要输入透过率(用来描述输入的能量在散射过程中的衰减)和参数g。在系统中还放置有三个探测器,这三个探测器距离散射体中发生散射点的距离是相同的,但是与入射光轴的夹角分别为0度,30度和60度:
上图所示的非序列3D视图 (NSC 3D Layout)中还未开启散射,因此我们只看到原始光线。在开始分析之前,我们需要开启散射设置。打开单光线光源的物体属性。在光源设置中,您会看到当前系统设置每条入射光线只发生一次散射:
系统默认的体散射设置为很多 (Many),这意味着光线在散射介质中会发生多次散射。如果选择“一次 (Once)”,则每根光线只发生一次体散射。如果光线在散射前发生分裂,例如发生在矩形体的表面,则每根子光线都有可能会发生散射。如果选择“从不 (Never)”,则该光源发射的所有光线都不会发生体散射。
我们可以通过选中设置中的“NSC光线散射 (Scatter NSC Rays)”以在非序列3D视图中观察光线的散射:
如图可见,许多光线并没有射入探测器,这些光线在图中只沿传播方向画出了一小部分。如果您想更改截止光线的绘制长度,请在系统选项 (System Explorer) > 非序列模式 (Non-Sequential)中的“系统单位下的截止光线长度 (Missed Ray Draw Distance In Lens Unit)”:
该参数用来设置没有入射到任何物体上时的光线绘制长度。如果设置为零,OpticStudio将采用默认长度显示这些光线。
我们可以使用过滤字符串 (Filter String)来分析那些在矩形体内产生散射并入射到矩形探测器上的光线。过滤字符串由指令或标签之间的逻辑运算构成,可表明光线所处的状态,如射入到某物体、未射入物体、在某物体上发生反射、折射、散射、衍射或鬼像反射等。在本例中,我们使用的过滤字符串如下所示:
·Bn:显示光线在#n物体内发生体散射
·Hn:显示光线射入#n物体
我们可以通过逻辑运算符连接这些字符串:
· &:逻辑和 (And),只有在符号“&”两边的指令同时为真 (True)时才返回真
· |:逻辑或 (Or),符号“|”两侧只要有一条指令为真,则该逻辑运算符返回真
因此,为了显示在矩形体(物体#2)中产生散射且射入其中一个矩形探测器(物体#3,#4,#5)的光线,我们可以使用字符串“B2&(H3|H4|H5)”来实现。我们可以在非序列3D视图以及非序列实体模型 (NSC Shaded Model)中使用字符串:
我们同样可以在光线追迹控制 (Ray Trace Control)中保存光线数据库时使用过滤字符串:
在本例中共追迹(透过率设为100%)5,000,000根光线且总功率为1W,通过分析每个探测器上的能量来分析散射光的强度分布。参数g分别为0.001和0.5时的结果如下表所示:
在本例中,平均自由程 (Mean Free Path)设为0.0001mm,远小于散射体积的0.1mm厚度。在只允许一次散射的情况下,OpticStudio的测量值和理论值相比均处于统计误差之内(每次光线追迹的数值结果根据统计原理都会有所不同,但值非常接近)。
上表中的测试数据是由下图中读取每一个探测查看器得到的:
需要注意的是:如果输入量参数g=0时,实际运算中将使用10E-4。这是为了避免因为g=0而在计算中产生奇点。当g的取值小时,其仿真结果实际上与g=0非常接近,因此我们可以认为这个近似足够精确。
H-G模型的角分布
本节使用的示例文件请见下载附件中的HG-angular.ZMX文件。
在该示例文件中,单光线光源同样发射总功率为1W,透过率为100%,共5,000,000根光线并垂直入射到具有H-G散射分布的物体中。并且光源设置为每根入射光线在物体中只发生一次散射,散射体积的平均自由程远小于物体的厚度。
在系统中,散射体之后4mm的位置为一个巨大的探测器来测量光线经过散射体后的辐射强度 (Watts/steradian)分布。对于g=0.001,分布为均匀分布:
对于g=0.5,能量分布变得更加集中:
我们可以使用该数据与理论模型的概率分布进行对比,可以看到量分布近乎相同:
小结
H-G模型可以用来描述光线经微小颗粒产生散射的角分布。OpticStudio中内置有的DLL可以帮助用户对任意非序列物体定义体散射模型。