系统参数设置对比:波长、视场、孔径的定义方式

做光学设计,第一步就是告诉软件:你要设计什么。说白了,就是三个核心参数——波长、视场、孔径。这三个东西在 Zemax 和 Code V 里叫法不同,操作逻辑也有差异。我刚开始从 Zemax 切到 Code V 时,光是找「孔径类型」就花了十分钟。嗯,今天咱们就把这事彻底捋清楚。

4.1 波长设置:从「波长组」到「波长表」

Zemax 里波长存在「波长数据编辑器」里,默认是 0.486、0.587、0.656 μm 三根线。你可以加权重,也可以设多个波长组(Multi-Configuration 里搞)。Code V 呢?它叫「波长表」(Wavelength Table),存在 .len 文件的 WL 段。

核心差异一句话:Zemax 把波长当「数据表」管理,Code V 把波长当「命令参数」管理。

我个人习惯在 Zemax 里先配好波长再输视场,因为波长影响玻璃库的色散计算。Code V 反过来——它允许你随时改波长,甚至用 WL 命令直接追加。

Zemax 操作路径

  1. 打开「System → Wavelengths」
  2. 输入波长值(μm)和权重
  3. 点「OK」——系统自动更新色差计算

Code V 操作路径

  1. 在命令行输入 WL 回车
  2. 按提示输入波长数、起始波长、结束波长
  3. 或用 WL 0.486 0.587 0.656 一次性定义

小技巧:Code V 支持用 WLI 命令插入波长,用 WLD 删除。我经常在优化中途加一根监控波长,看看离焦漂移——Zemax 里得切回波长编辑器,Code V 一行命令搞定。

波长定义方式对比表

对比项 Zemax Code V
界面入口 System → Wavelengths 命令行 WL 或菜单栏
单位 μm(默认) μm(默认),可用 UNITS 改 nm
权重 每根波长独立权重 每根波长独立权重
多组波长 靠 Multi-Configuration 靠 Zoom 或 WL 切换
修改方式 表格编辑 命令行 + 表格双模式

我记得有一次做投影镜头,客户要求覆盖 0.45~0.65 μm 连续光谱。Zemax 里我设了 5 根波长,Code V 里用 WL 0.450 0.550 0.650 3 三根加权重——结果优化出来的 MTF 几乎一样。所以别纠结波长数量,关键是覆盖范围。

4.2 视场定义:角度 vs 物高 vs 像高

视场定义是新手最容易踩坑的地方。Zemax 默认用「角度」(Degree),Code V 默认用「物高」(Object Height)。你想想看,一个望远系统用角度合理,一个显微系统用物高合理——但如果你从 Zemax 导个文件到 Code V,视场类型不匹配,优化直接跑偏。

避坑指南:我曾经把一个广角镜头从 Zemax 转到 Code V,忘了改视场类型。结果 Code V 把 60° 视场当成 60 mm 物高去算,光线全飞出去了。折腾了两小时才发现——嗯,从那以后我每次迁移第一件事就是检查 FOV 类型。

Zemax 视场设置

  • 类型:Angle(角度)、Object Height(物高)、Paraxial Image Height(近轴像高)、Real Image Height(实际像高)
  • 操作:System → Fields → 选类型 → 输入视场值 + 权重
  • 注意:Zemax 的「Angle」是半视场角,不是全视场

Code V 视场设置

  • 类型:Object Height(物高)、Angle(角度)、Image Height(像高)
  • 操作:命令行 FOV 或菜单栏
  • 注意:Code V 的 FOV 默认是物高,需用 FOV 0.0 10.0 20.0 ANGL 切到角度

迁移口诀:Zemax 角度半视场,Code V 物高默认值。要切角度加 ANGL,权重位置别搞错。

视场定义方式对比表

对比项 Zemax Code V
默认类型 Angle(角度) Object Height(物高)
角度单位 度(°) 度(°),需显式声明
权重 每个视场独立权重 每个视场独立权重
对称视场 自动对称(Y 方向) 需手动设置对称
非对称视场 支持 X/Y 独立 支持 X/Y 独立

我个人建议:做成像系统时,先用物高定义视场,优化后期再切到像高检查畸变。Zemax 和 Code V 都支持这个流程,只是 Code V 的命令行更灵活——你可以用 FOV 0.0 5.0 10.0 WT 1.0 0.8 0.5 一行搞定视场值和权重。

4.3 孔径定义:入瞳直径 vs F/# vs NA

孔径决定了系统的通光能力和分辨率。Zemax 的孔径类型在「System → General → Aperture」里选,Code V 则在 APER 命令里定义。两者都支持入瞳直径、F/#、NA(数值孔径),但默认行为和单位有区别。

Zemax 孔径类型

  • Entrance Pupil Diameter:直接输入入瞳直径(mm)
  • Image Space F/#:像方 F 数
  • Object Space NA:物方数值孔径
  • Float by Stop Size:由光阑尺寸决定

Code V 孔径类型

  • APER 命令: APER DIA 50 表示入瞳直径 50 mm
  • F/# 定义: APER F/2.8 表示 F 数 2.8
  • NA 定义: APER NA 0.25 表示数值孔径 0.25
  • 注意:Code V 的 F/# 默认是「像方 F/#」,与 Zemax 一致

经验之谈:我习惯用入瞳直径做初始定义,因为它是物理量,不受像面位置影响。等系统结构稳定了,再切到 F/# 去匹配客户指标。Zemax 里切孔径类型会重置光阑位置,Code V 不会——这点 Code V 更友好。

孔径定义方式对比表

对比项 Zemax Code V
入口 System → General → Aperture 命令行 APER
入瞳直径 直接输入数值 APER DIA 数值
F/# 选择 Image Space F/# APER F/数值
NA 选择 Object Space NA APER NA 数值
光阑关联 自动关联 Stop 面 需手动指定 Stop 面
切换影响 可能重置光阑位置 不影响光阑位置

你可能会问:为什么 Code V 不自动关联光阑?其实它给了你更多控制权。Zemax 默认把第一个面的光阑当孔径光阑,Code V 允许你任意指定——用 STO 命令把某个面设为光阑。我做过一个双远心系统,光阑在中间,Zemax 里得手动设,Code V 里一行 STO 5 搞定。

4.4 三参数联动关系与迁移检查清单

波长、视场、孔径不是孤立的。它们共同决定了系统的拉赫不变量(Lagrange Invariant),也就是光学系统的信息吞吐能力。迁移时,这三个参数必须同时检查,否则优化结果对不上。

迁移检查清单:

  • ☐ 波长单位一致(μm vs nm)
  • ☐ 视场类型匹配(角度 vs 物高)
  • ☐ 视场值是否半视场(Zemax 默认半视场)
  • ☐ 孔径类型一致(入瞳直径 vs F/#)
  • ☐ 光阑位置是否正确
  • ☐ 权重是否保留

下面这张图展示了三个参数在光学设计中的层级关系,以及迁移时的对应逻辑:

系统参数定义与迁移对应关系 波长 (Wavelength) Z: 波长编辑器 / C: WL 命令 视场 (Field) Z: 角度 / C: 物高 孔径 (Aperture) Z: 入瞳直径 / C: APER 三者共同决定:拉赫不变量 = n × y × u × θ 迁移时必须保持拉赫不变量一致,否则系统性能对不上 迁移流程:Zemax 导出参数 → 检查单位/类型 → Code V 导入 → 验证拉赫不变量 陷阱1:半视场 vs 全视场 陷阱2:F/# 定义差异 陷阱3:权重丢失 总结:先统一单位 → 再匹配类型 → 最后验证光阑位置 → 跑一次光线追迹确认 推荐使用入瞳直径作为迁移时的「锚点参数」

最后说一句:别怕参数多。波长、视场、孔径,每个软件都有自己的「脾气」。Zemax 偏可视化,Code V 偏命令行。你只要记住核心物理量不变,迁移就是个翻译工作。我做了十几年设计,现在两边切换基本不用查手册——肌肉记忆了。