第三章 评价函数基础:MTF、波前差与点列图

评价函数,说白了就是光学设计的“裁判”。你优化了半天,到底好不好,得有个标准。这个标准就是评价函数。

我个人习惯把评价函数分成两类:一类是物理光学层面的,比如MTF、波前差;另一类是几何光学层面的,比如点列图、光线像差。今天咱们就把这三样东西的数学原理讲透,再看看它们在Code V和Zemax里是怎么定义的。

3.1 MTF(调制传递函数)

MTF是光学系统最常用的评价指标。它描述的是系统对不同空间频率的对比度传递能力。

数学原理

MTF的数学定义其实很简单:

MTF(ν) = |OTF(ν)| = |∫∫PSF(x,y) · exp(-j2πνx) dxdy|

其中PSF是点扩散函数,ν是空间频率。说白了,MTF就是PSF的傅里叶变换的模。

我遇到过不少工程师,一看到傅里叶变换就头疼。其实你想想看,MTF就是告诉你:一个点经过光学系统后,变成了一个弥散斑,这个弥散斑对不同粗细的条纹能保留多少对比度。

Code V中的定义方式

Code V里计算MTF,我一般用这个命令:

MTF
  FREQ 10 20 30 40 50 60
  FIELD 0 0.5 1.0
  WAVE 2

这里FREQ指定空间频率,FIELD指定视场,WAVE指定波长编号。Code V默认用自相关法计算MTF,速度快,但精度一般。

Zemax中的定义方式

Zemax里MTF在“Analysis → MTF”菜单下。常用的有:

  • FFT MTF:基于快速傅里叶变换,速度快
  • Huygens MTF:基于惠更斯原理,精度高但慢
  • Geometric MTF:基于几何光线追迹,不考虑衍射

我个人习惯在优化初期用FFT MTF,最后验证用Huygens MTF。为什么?因为FFT MTF在像差较大时会有误差,而Huygens MTF更准确。

小技巧: 在Code V里,如果你用MTF作为评价函数,建议把采样点设密一点。我一般设到FREQ 5 10 15 20 25 30 35 40 45 50 55 60,这样曲线更平滑。

3.2 波前差(Wavefront Error)

波前差描述的是实际波面与理想波面之间的偏差。它直接反映了系统的像差大小。

数学原理

波前差通常用Zernike多项式展开:

W(ρ,θ) = Σ Cnm · Znm(ρ,θ)

其中Znm是Zernike多项式,Cnm是系数。常用的评价指标有:

  • RMS波前差:均方根值,反映整体波前质量
  • PV波前差:峰谷值,反映最大偏差
  • Strehl比:与RMS波前差直接相关,Strehl ≈ 1 - (2π·RMS/λ)²

Code V中的定义方式

Code V里看波前差,用这个:

WAV
  FIELD 0
  WAVE 2
  OUTPUT RMS PV

Code V的波前差计算是基于光线追迹的,它会自动拟合出Zernike系数。我遇到过一个问题:当系统有渐晕时,Code V的波前差计算会出问题。嗯,这时候需要手动设置光瞳采样。

Zemax中的定义方式

Zemax里波前差在“Analysis → Wavefront”菜单下。常用选项:

分析类型 用途 我常用的场景
Wavefront Map 显示波前差分布 看整体像差分布
Zernike Coefficients 列出Zernike系数 分析特定像差
Strehl Ratio 计算Strehl比 判断衍射极限
注意: 我曾经在Zemax里用默认设置计算波前差,结果发现RMS值偏大。后来查了半天,发现是光瞳采样点太少。建议把“Pupil Sampling”设为“64x64”以上。

3.3 点列图(Spot Diagram)

点列图是最直观的像差评价方式。它显示的是从物点发出的光线经过系统后,在像面上的分布。

数学原理

点列图的RMS半径定义为:

RMS = √(Σ[(xi - x̄)² + (yi - ȳ)²] / N)

其中(xi, yi)是第i条光线的像面坐标,(x̄, ȳ)是质心坐标,N是光线总数。

点列图的好处是:它不依赖任何近似,直接反映几何像差。但缺点也很明显——它不考虑衍射效应。

Code V中的定义方式

Code V里生成点列图:

SPO
  FIELD 0 0.5 1.0
  WAVE 2
  RAYS 100

Code V默认用均匀网格采样光线。我建议把RAYS设到200以上,这样点列图更准确。特别是对于大像差系统,光线太少会漏掉细节。

Zemax中的定义方式

Zemax里点列图在“Analysis → Spot Diagram”菜单下。常用设置:

  • Pattern:Hexapolar(六边形极坐标)或Rectangular(矩形网格)
  • Reference:Centroid(质心)或Chief Ray(主光线)
  • Show Scale:显示艾里斑大小

我个人习惯用Hexapolar模式,因为它在光瞳边缘采样更密,能更好地反映轴外像差。

核心对比:
  • MTF:适合评价成像对比度,对低频敏感
  • 波前差:适合评价衍射极限系统,对高频敏感
  • 点列图:适合评价几何像差,直观但忽略衍射

3.4 三种评价函数的对比

你可能会问:到底用哪个好?我的经验是:

  • 优化初期:用点列图或波前差,计算快,能快速收敛
  • 优化中期:用MTF,特别是对成像质量有明确要求时
  • 最终验证:三个都要看,互相印证

我曾经做过一个投影镜头,优化时只看MTF,结果做出来点列图很大。后来才发现,MTF在低频好不代表点列图小。所以,千万别只看一个指标。

下面这张图总结了三种评价函数的关系:

光学评价函数知识体系 MTF 波前差 点列图 傅里叶变换 Zernike多项式 光线追迹 成像对比度评价 衍射极限判断 几何像差分析 三者关系 MTF = |FT(PSF)|,PSF = |FT(波前差)|²,点列图是几何近似

3.5 Code V与Zemax的差异总结

项目 Code V Zemax
MTF计算方法 自相关法(默认) FFT(默认)
波前差拟合 自动Zernike拟合 手动选择Zernike项数
点列图采样 均匀网格 Hexapolar/Rectangular
优化速度 快(C++底层) 中等(.NET底层)
精度控制 手动设置采样 自动适配(但可调)

嗯,最后说一句:评价函数只是工具,不是目的。你的目的是设计出好用的镜头,而不是让MTF曲线好看。我见过太多人为了优化MTF,把系统搞得很复杂,结果实际做出来根本没法用。所以,保持清醒,别被数字迷惑了。