第三章 评价函数基础: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更准确。
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比 | 判断衍射极限 |
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在低频好不代表点列图小。所以,千万别只看一个指标。
下面这张图总结了三种评价函数的关系:
3.5 Code V与Zemax的差异总结
| 项目 | Code V | Zemax |
|---|---|---|
| MTF计算方法 | 自相关法(默认) | FFT(默认) |
| 波前差拟合 | 自动Zernike拟合 | 手动选择Zernike项数 |
| 点列图采样 | 均匀网格 | Hexapolar/Rectangular |
| 优化速度 | 快(C++底层) | 中等(.NET底层) |
| 精度控制 | 手动设置采样 | 自动适配(但可调) |
嗯,最后说一句:评价函数只是工具,不是目的。你的目的是设计出好用的镜头,而不是让MTF曲线好看。我见过太多人为了优化MTF,把系统搞得很复杂,结果实际做出来根本没法用。所以,保持清醒,别被数字迷惑了。