第四章 POP算法原理:菲涅尔衍射、夫琅禾费衍射、角谱传播算法

各位好,我是老张。这一章咱们聊聊POP算法的核心——三种传播模型。说实话,很多新手一上来就问我:“张工,POP到底怎么算的?”其实说白了,就是这三种数学工具在背后撑腰。我个人习惯把POP算法比作“光的快递服务”——你告诉系统光从哪里出发、要送到哪里,它帮你算中间怎么走。

嗯,咱们先理清一个概念。物理光学传播(POP)跟几何光学最大的区别在哪?几何光学只管光线方向,POP管的是光波的“脾气”——振幅、相位、偏振,一个都不能少。我当年刚接触Zemax时,总觉得POP是个黑盒子,后来亲手推导了一遍,才发现其实没那么玄乎。

4.1 菲涅尔衍射:近场传播的“主力军”

菲涅尔衍射,说白了就是处理“不太远”的情况。什么叫不太远?你想想看,光源到观察面的距离,比孔径尺寸大,但又没大到可以忽略曲率波前的程度。这时候,菲涅尔近似就派上用场了。

数学上,菲涅尔衍射积分长这样:

U(x,y) = (exp(jkz) / (jλz)) * ∫∫ U(ξ,η) * exp{ jk/2z * [(x-ξ)² + (y-η)²] } dξ dη

别被这个式子吓到。我在项目中遇到过类似情况——设计一个激光扩束系统,接收面离透镜只有几十毫米。用几何光学算出来光斑大小,结果实测差了一大截。后来换成菲涅尔衍射模型,才把问题揪出来。原来那个二次相位因子,在近场根本不能忽略。

关键点:菲涅尔衍射保留了波前的二次曲面近似。这意味着它比几何光学更精确,但计算量也更大。Zemax里默认的POP算法,很多场景下用的就是它。

Zemax中怎么用?很简单。在POP设置里,传播算法选“菲涅尔”。系统会自动判断距离是否满足近似条件。不过我个人建议——如果你不确定,可以先用菲涅尔跑一遍,再换角谱对比一下。差得不多,说明没问题。

4.2 夫琅禾费衍射:远场的“简化版”

夫琅禾费衍射,是菲涅尔衍射的“远房亲戚”。当观察距离足够远,远到波前可以近似为平面波时,二次相位项就消失了。公式一下子清爽很多:

U(x,y) = (exp(jkz) / (jλz)) * exp{ jk/2z (x²+y²) } * ∫∫ U(ξ,η) * exp{ -j2π/λz (xξ + yη) } dξ dη

你看,积分里面变成了一个标准的傅里叶变换。这就是为什么很多人说“夫琅禾费衍射就是光的傅里叶变换”。我记得有一次做光纤耦合仿真,接收端离输出端很远,大概几米。用菲涅尔算,网格得设得很密,跑一次要等半天。换成夫琅禾费,速度直接快了一个数量级。

我的经验:判断用哪种衍射,有个简单方法——算一下菲涅尔数 N = a²/(λz)。N << 1 时,放心用夫琅禾费。N > 1 时,老老实实用菲涅尔。这个经验帮我避过不少坑。

不过要提醒一句:夫琅禾费衍射虽然快,但它假设了远场条件。如果你把近场场景硬套上去,结果会严重失真。我曾经见过有人用夫琅禾费算激光二极管输出,光斑形状完全不对——因为激光二极管的出射面离透镜太近了。

4.3 角谱传播算法:最通用的“全能选手”

角谱传播算法,是我个人最喜欢的一种。它不依赖任何近似,直接从亥姆霍兹方程出发。原理很简单:把光场分解成不同方向传播的平面波,每个平面波独立传播,最后再合成回来。

数学表达是这样的:

A(fx, fy; z) = A(fx, fy; 0) * exp{ jkz * sqrt(1 - (λfx)² - (λfy)²) }

这里 A(fx, fy) 是光场的角谱,也就是空间频率域的表示。传播过程,说白了就是给每个频率分量乘一个相位因子。这个因子包含了传播距离和方向信息。

Zemax里用角谱算法时,要注意采样。为什么?因为角谱算法本质上是做两次傅里叶变换——从空间域到频率域,再回来。如果采样点数不够,高频分量会被截断,导致能量泄漏。我遇到过最惨的一次,仿真结果能量只有输入的80%,查了半天才发现是采样率设低了。

避坑指南:我曾经在仿真高数值孔径系统时,直接用默认的角谱设置,结果光斑边缘出现奇怪的振荡。后来发现是网格尺寸太大,导致高频角谱被“折叠”回来了。解决办法:把网格点数翻倍,或者减小网格间距。记住,角谱算法对采样要求最高。

4.4 三种算法的对比与选择

说了这么多,到底什么时候用哪个?我整理了一个表格,方便你对照:

算法 适用场景 计算速度 精度 限制条件
菲涅尔衍射 近场到中距离传播 中等 较高 需满足菲涅尔近似
夫琅禾费衍射 远场传播 中等 需满足远场条件
角谱传播 任意距离,尤其近场 较慢 最高 对采样要求高

我个人习惯是:先判断距离。如果传播距离远大于孔径尺寸,优先用夫琅禾费。如果距离适中,用菲涅尔。如果系统里有大角度光线或者近场效应明显,直接上角谱。别嫌慢,精度才是硬道理。

嗯,这里再补充一点。Zemax的POP算法其实很智能——它会根据你设置的参数自动选择传播模型。但自动选择不一定最优。我建议你手动指定,尤其是做高精度仿真时。比如激光谐振腔设计,我从来只用角谱,因为菲涅尔近似会忽略一些高阶像差。

4.5 实战中的注意事项

最后聊几个实战中容易踩的坑:

  • 网格尺寸:三种算法都对网格敏感。网格太粗,高频信息丢失;网格太细,内存爆炸。我一般从 256x256 开始试,不够再加。
  • 边界效应:菲涅尔和角谱算法都假设光场在边界处为零。如果光斑跑到边界上,结果会出错。解决办法:加孔径光阑,或者扩大网格范围。
  • 相位包裹:Zemax默认显示包裹相位。如果你看到条纹突然跳变,别慌,那是相位从 -π 跳到 π。用“解包裹”功能就能恢复。

我记得有一次帮客户调试一个自由空间光通信系统,接收端光斑总是比预期大。折腾了两天,最后发现是角谱算法的采样率不够,导致高频衍射分量被截断了。把网格从 128x128 改成 512x512,问题立刻解决。所以啊,仿真遇到问题,先检查采样——这是最容易被忽略的环节。

好了,这一章就到这里。三种算法各有千秋,没有绝对的好坏。关键是根据你的场景选对工具。下一章咱们聊聊如何在Zemax里实际搭建POP仿真链路,到时候我会手把手带你走一遍流程。