optiland绘制光学系统的点列图
文章目录
- 基本概念
- 测试
- 评估指标
- SpotDiagram
基本概念
点列图是光学系统对物点发出光束在像面上截痕的几何投影,就数学意义来说,是入瞳坐标到像面坐标的非线性映射。设入瞳平面坐标为( x p , y p ) (x_p, y_p)(xp,yp),经光学系统的光线追迹后,光线在像面上的交点坐标为( x i , y i ) (x_i, y_i)(xi,yi),点列图即为该映射函数在离散入瞳采样点上的集合
S = { ( x i ( k ) , y i ( k ) ) ∣ ( x p ( k ) , y p ( k ) ) ∈ Pupil , k = 1 , 2 , ⋯ , N } S=\left\{\left(x_i^{(k)},y_i^{(k)}\right)\bigg\vert \left(x_p^{(k)},y_p^{(k)}\right)\in \text{Pupil}, k=1,2,\cdots,N \right\}S={(xi(k),yi(k))(xp(k),yp(k))∈Pupil,k=1,2,⋯,N}
其中N NN为追迹光线的总数。点列图的形态直接反映了映射函数的非线性畸变程度,即系统的几何像差。
测试
下面以最简单的消色差胶合透镜为例,其结构如下
图中共针对三个物点进行成像,不同颜色的光线代表不同的波长。这三个点的点列图如下
图中可见,位于光轴上的点偏差很小,几乎在微米量级,随着光线逐渐偏离光轴,点列图就越分散。绘图代码如下。
importmatplotlib.pyplotaspltfromoptiland.samplesimportCementedAchromat lens=CementedAchromat()lens.draw()plt.show()fromoptiland.analysisimportSpotDiagram spot=SpotDiagram(lens)spot.view()plt.show()评估指标
Optiland 在生成点列图时,会计算两个关键的统计指标来量化成像质量,即均方根半径(RMS Radiius)和几何半径(GEO Radius),二者定义为
R r m s = 1 N ∑ k = 1 N [ ( x i ( k ) − x c ) 2 + ( y i ( k ) − y c ) 2 ] R g e o = max k ( x i ( k ) − x c ) 2 + ( y i ( k ) − y c ) 2 \begin{aligned} R_{rms}&=\sqrt{\frac{1}{N}\sum^N_{k=1}\left[ \left(x^{(k)}_i-x_c \right)^2+ \left(y^{(k)}_i-y_c\right)^2 \right]}\\ R_{geo}&=\max_k\sqrt{\left(x^{(k)}_i-x_c \right)^2+ \left(y^{(k)}_i-y_c\right)^2} \end{aligned}RrmsRgeo=N1k=1∑N[(xi(k)−xc)2+(yi(k)−yc)2]=kmax(xi(k)−xc)2+(yi(k)−yc)2
式中x c , y c x_c, y_cxc,yc为所有光线交点坐标的算术平均值,代表光斑能量的几何中心
x c = 1 N ∑ k = 1 N x i ( k ) , y c = 1 N ∑ k = 1 N y i ( k ) x_c=\frac{1}{N}\sum^N_{k=1}x^{(k)}_i,\quad y_c=\frac{1}{N}\sum^N_{k=1}y^{(k)}_ixc=N1k=1∑Nxi(k),yc=N1k=1∑Nyi(k)
spot.rms_spot_radius()''' [[np.float64(0.0007160560338966489), np.float64(0.00030044346069136213), np.float64(0.0009093546785235328)], [np.float64(0.0062009419004590465), np.float64(0.006478127436073068), np.float64(0.005863964781384811)], [np.float64(0.013193574022352729), np.float64(0.013478204609735837), np.float64(0.012854624142347826)]] '''spot.geometric_spot_radius()''' [[np.float64(0.0012658074102686746), np.float64(0.0005373629890794854), np.float64(0.0012884677713641153)], [np.float64(0.011884205191984965), np.float64(0.012174297091610109), np.float64(0.011247689194430421)], [np.float64(0.024474576587270702), np.float64(0.02457540430166505), np.float64(0.02356916788532737)]] '''SpotDiagram
【SpotDiagram】即为optiland中的点列图类,在上面的示例中,只输入了一个optic类型的参数,这也是唯一必须输入的参数,其他参数如下
- 【fields】指定需要计算点列图的视场,默认为’all’
- 【wavelengths】指定参与光线追迹的波长,默认为’all’
- 【num_rings】定义入瞳采样的环数,默认为6,上面的点列图中,边缘处可以很清晰地看到,内外共六圈
- 【distribution】定义光线在入瞳内的空间分布拓扑,'hexapolar’为六角形极坐标网格,能均匀覆盖圆形入瞳,避免矩形网格在角落的无效采样;'uniform’为均匀笛卡尔网格;‘random’: 随机分布,适用于蒙特卡洛公差分析。
- 【coordinates】定义点列图坐标系的参考框架,默认’local’,以该视场的主光线或质心为原点;如果选’global’,则以像面的全局坐标系原点为参考点。
- 【reference】定义计算 RMS 和 GEO 半径时的中心点,默认’chief_ray’,表示以主光线与像面的交点为中心;也可以选’centroid’,表示以光斑的能量质心为中心。