Menu

Menu

  1. 首页
  2. 行业新闻
  3. 基于Python的自适应光学(AO)工具集,可用于简化AO系统的建模和分析流程,包含光传播、波前传感器等

基于Python的自适应光学(AO)工具集,可用于简化AO系统的建模和分析流程,包含光传播、波前传感器等

自适应光学(AO)作为一种实时校正光波前畸变的技术,使我们能够在高分辨率成像等领域获得更清晰的图像。随着对高精度波前控制需求的增长,开发灵活且易于使用的AO工具变得尤为重要。

 

AOtools 是一个开源的 Python 工具包,专为AO研究和应用而设计。它由全球多位 AO 科学家共同开发,旨在为研究人员和工程师提供一个统一、可靠且易于使用的工具集合,避免重复造轮子,提升研究效率

它提供了丰富的模块,涵盖了自适应光学系统中的多个关键方面,包括大气湍流建模、波前传感器模拟、图像处理以及光学传播模拟等功能。下面演示如何实现工具的安装以及部分模块的使用吧。

AOtools 源代码github链接如下

 

地址:https://github.com/AOtools/aotools

 

该文档涵盖各个模块的使用方法和示例代码

 

地址:https://aotools.readthedocs.io/en/v1.0.1/introduction.html

 

「READING」

 

安装

 

依赖项:Python ≥ 3.6

必要包:numpy、scipy、matplotlib、numba

Conda 安装,自动拉取并安装所有依赖

  •  
conda install -c aotools aotools

Pip 安装

  •  
pip install aotools

从源码安装

  •  
  •  
  •  
# 解压或 git clone 到本地目录cd aotools-1.0.7    python setup.py install
「READING」

 

简易示例

 

光传播示例

 

四大核心函数:angularSpectrum(角谱法传播)、oneStepFresnel(一步 Fresnel 近似衍射)、TWoStepFresnel(两步 Fresnel 近似衍射)、lensAgainst(透镜焦平面衍射(物平面紧贴透镜))

1. angularSpectrum

  •  
Uout = angularSpectrum(inputComplexAmp, wvl, inputSpacing, outputSpacing, z)

源代码:

https://aotools.readthedocs.io/en/v1.0.1/_modules/aotools/opticalpropagation.html#angularSpectrum

 

参数包括

 

  1. inputComplexAmp (ndarray):源平面上 N×N 的复振幅数组
  2. wvl (float):光波长(m)
  3. inputSpacing (float):源平面采样间距 d₁ (m/px)
  4. outputSpacing (float):目标平面采样间距 d₂ (m/px)
  5. z (float):传播距离 z (m)

2. lensAgainst

  •  
Uout = lensAgainst(Uin, wvl, d1, f)

源代码:

https://aotools.readthedocs.io/en/v1.0.1/_modules/aotools/opticalpropagation.html#twoStepFresnel

 

参数包括

 

  1. Uin (ndarray):入瞳(源)复振幅
  2. wvl (float):光波长(m)
  3. d1 (float):入瞳平面采样间距 (m/px)
  4. f (float):透镜焦距 (m)

3. oneStepFresnel

  •  
Uout = oneStepFresnel(Uin, wvl, d1,d, z)

源代码:

https://aotools.readthedocs.io/en/v1.0.1/_modules/aotools/opticalpropagation.html#oneStepFresnel

 

参数包括

 

  1. Uin (ndarray):源平面复振幅
  2. wvl (float):光波长(m)
  3. d1 (float):源平面采样间距 (m/px)
  4. z (float):传播距离 (m)

4. twoStepFresnel

  •  
Uout = twoStepFresnel(Uin, wvl, d1, d2, z)

源代码:

https://aotools.readthedocs.io/en/v1.0.1/_modules/aotools/opticalpropagation.html#twoStepFresnel
参数包括

 

  1. Uin (ndarray):源平面复振幅
  2. wvl (float):光波长(m)
  3. d1 (float):源平面采样间距 (m/px)
  4. d2 (float):目标平面采样间距 (m/px)
  5. z (float):总传播距离 (m)

下面演示从相位屏产生复振幅、再用两步 Fresnel 衍射到指定采样间距的完整流程

  •  
  •  
  •  
  •  
  •  
import numpy as npimport matplotlib.pyplot as pltfrom aotools.turbulence.phasescreen import PhaseScreenVonKarmanfrom aotools.opticalpropagation import twoStepFresnelfrom aotools.functions.pupil import circle# 参数N      = 256        # 网格大小dx     = 5e-3       # 源面采样间距 m/pxd2     = 2e-3       # 目标面采样间距 m/pxwvl    = 632.8e-9   # He–Ne 激光 λz      = 0.2        # 传播距离 mradius = 80         # 入瞳半径 px
# 1. 生成大气湍流相位屏screen = PhaseScreenVonKarman(N, dx, r0=0.15, L0=30.0, random_seed=1)phase  = screen.scrn
# 2. 构造入瞳复振幅pupil = circle(radius, N)Uin   = pupil * np.exp(1j * phase)
# 3. 两步 Fresnel 传播到新的采样间距Uout  = twoStepFresnel(Uin, wvl, dx, d2, z)
# 4. 计算并显示归一化强度psf   = np.abs(Uout)**2psf  /= psf.max()
plt.imshow(psf, extent=[-N/2*d2, N/2*d2, -N/2*d2, N/2*d2])plt.xlabel('输出面横坐标 (m)')plt.ylabel('输出面纵坐标 (m)')plt.title('Two–Step Fresnel PSF')plt.colorbar(label='归一化强度')plt.show()

免责声明:本文旨在传递更多科研资讯及分享,所有其他媒、网来源均注明出处,如涉及版权问题,请作者第一时间联系我们,我们将协调进行处理,最终解释权归旭为光电所有。