摘要:模拟光束的传播通常需要多模输入光束。在这这篇文章中我们来解释如何产生这样的输入与随机相位和振幅剖面。
当对光束在多模器件(例如多模光纤和光纤泵浦组合器)中的传播进行数值模拟时,首先遇到的问题之一就是如何生成类似于多模输入(多模光束)的光束剖面。
这实际上是一个比创建单模态输入配置剖面更困难的问题。这就引出了一个问题,即人们通常没有输入光束的精确规格。例如,你可能只有一个给定的光束分布(例如高斯或超高斯)和一个特定的光束散度,但显然这几个参数不能决定一个完整的二维相位分布。但是,对于数值光束传播,我们需要一个完整场的复杂振幅作为输入-那么应该怎么做呢?
一种可能的方法是使用给定的强度剖面,并将其与表现出随机和不规则波动的相位剖面结合起来。你可以调整这些波动的幅度(例如用一个r.m.s.值量化),例如得到给定的光束散度。从技术上讲,这可能有点棘手。如何精确地产生一个具有合理统计特性的二维随机相位分布,理想地使过程自动化,从而达到给定的光束散度呢?
这里有一个我们经常使用的非常实用的方法:
你可以从一个复杂振幅的场开始,它具有给定的强度轮廓,同时它每个网格点的光学相位完全随机且是不相关的值。这是很容易做到的。只是,这个剖面将显示一个巨大的光束散度,因此不能成为最终的解决方案。
然后应用二维空间进行傅里叶变换。根据巨大的光束散度,它会呈现出非常广泛的分布。现在在傅里叶域中对场进行滤波,只需将每个傅里叶振幅乘以一个滤波函数——例如,傅里叶空间中的一个顶帽函数或高斯函数。该函数的宽度由所需散度计算。这样就抑制了高频成分,从而限制了散度。
将其转换回实际空间,您就得到了所需的输入字段!在某些情况下,您可能希望在实际空间中应用另一个过滤器函数,但这通常是不必要的。
上面所描述的过程看起来好像难以实现,但实际上并没有那么难。在RP Fiber Power软件中,您只需要如下几行代码(在各种输入参数的定义之后,这里不显示):
defarray A0%[0, (N - 1) * dr, dr; 0, (N - 1) * dr, dr] (periodic) { array for complex input amplitudes } sg(x2) := exp(-3 * x2^8) { normalized super-Gaussian function, made such that the values at x2 = x^2 = 1 are already pretty small } calc begin { Calculate the initial beam profile: low spatial coherence, but high enough for efficient launching} var f_max, df, f_m, P; { First step: top-hat intensity profile (according to fiber core diameter) with totally random amplitudes } processarray_e(A0%[], '=', if x^2 + y^2 <= r_co^2 then ReIm(rnd(-1), rnd(-1)), 'x-,y-'); { Filter out higher spatial frequency components } FFT(A0%[], A0_f%[], +1); { Fourier transform, resulting in new array A0_f%[] } df := 1 / (2 * r_max); f_max := 0.5 * N * df; f_m := NA_in / lambda; { maximum allowed spatial frequency based on NA of fiber } processarray_e(A0_f%[], '*', sg((f_x^2 + f_y^2) / f_m^2), 'f_x-,f_y-'); FFT(A0_f%[], A0%[], -1); { inverse Fourier transform } { Filter again in real space: } processarray_e(A0%[], '*', sg((x^2 + y^2) / r_co_in^2), 'x-,y-'); { Normalize the power to 1 W: } P := arraysumsqr(A0%[]) * dr^2; processarray(A0%[], '/', sqrt(P)); end A0%(x, y) := A0%[x, y] { amplitude profile function taking values out of the array }
由此可见,我们从processarray()等函数的可用性中受益匪浅,这些函数使用完整的二维数组执行某些操作——避免了嵌套循环,因为嵌套循环编写起来更麻烦,执行起来也更慢。顺便说一下,这样的代码可以在一个普通的PC上在几分之一秒内执行。下面是用该代码获得的配置剖面示例:
如果想知道如何在合理的时间内开发这样一段代码,如果是我们的RP Fiber Power软件用户,可以随时联系我们获取。
那结构强度分布图如何呢?
正如示例中看到的,所得到的强度配置剖面通常是非常结构化的——而不是我们在本示例中开始时使用的顶帽配置剖面。那么,如何将其与在现实中经常看到的平面剖面协调呢?
对于光束的数值传播,我们使用的是单色场,而单色场不可能是平的——要理解这一点,可以把它们看作是许多光纤模式的叠加。因此,如果在现实中你有一个平坦的光束轮廓,它一定是多色输入——例如,来自一个光带宽为几纳米的激光二极管的输入光束。它的每个频率组件都有一个相当结构化的配置文件,但是每个频率组件看起来都不一样,当添加这些配置剖面时,结构或多或少会被删除。
在某些情况下,您可能需要通过在略有不同光频率的多个单色场中进行数值光束传播,并将结果的强度分布相加来适当地模拟这种情况。我们可以做到;问题可能只是对于大量的频率成分,你将相应地需要更长的计算时间。然而,通常你可以把一个单一的频率组件看作是代表性的-特别是在设备有大量的引导模式的情况下。
基于导向模式的替代方法
简要描述一种产生多模态剖面的简单替代方法。在这里,您使用由模式求解器计算的引导模式。你把输入场构造成所有导模的叠加,每一个导模都有一个随机的光功率和光相位,根据正确定义的函数,例如获得正确的空间轮廓和光束散度。例如,你可以通过给高阶模式分配低功率来减少光束散度。
这个方法与前面解释的方法在许多方面不同:
它甚至在概念上更简单一些。
它自然地产生一个只由导模组成的轮廓,完全抑制包层模式中的任何功率。这在某些情况下可能有用,但在其他情况下不可接受。
在导向模态数量很大的情况下,该方法不实用,因为所有这些模态的计算可能过于耗时,甚至超出了模态求解器的能力。
所以选择哪种方法取决于具体情况。
结束语
我们已经看到,多模光束分布的生成涉及到一些棘手的方面,这是模拟数值光束传播所必需的——例如,研究和优化多模器件,如光纤泵浦组合器、分束器和包层模剥离器。对于一个新学者说,这些看起来好像很麻烦。但其实有我们强大的RP Fiber Power软件作为后盾,操作起来一点也不麻烦。我们会定期更新软件和提供技术支持服务。例如,对物理问题的精心措辞的解释,对某些方法和脚本代码的使用的建议,甚至是完整的脚本。对于那些不想处理所有这些技术,我们甚至可以提供一个很好地解决脚本包含自定义表单,用户只需要输入他们的输入参数,按下按钮启动计算,然后生成所需的数值和图形输出。下面是一个在锥形多模光纤上进行模拟的例子:
相关文章可在仿真秀搜索:
RP Fiber Power 无源光纤之多模光纤
RP Fiber Power 无源光纤之单模光纤
RP Fiber Power 无源光纤之玻璃光纤
RP Fiber Power 无源光纤之光纤模式
RP Fiber Power 新增Numerical Power Package数字工具箱 | 让运算速度快得飞起