这是模拟哈特曼波前探测器的另一份代码,这里不需要设置微透镜的参数。
波前 ==> 光点,使用的是 离散一维DFT对应的fft(,),而不是 二维FFT对应的 fft2(),最大的优点是运算速度极快,其原因是 不需要通过双循环分别对 某个子透镜形成光点处理,利用并行运算直接得到整个微透镜的最终形成的光点阵。
也可以参考OOMAO中的哈特曼波前探测的模拟源码,源码见:
【GitHub - rconan/OOMAO: Object-Oriented, Matlab & Adaptive Optics】
clc;clear all; close all
% function wavePrgted = propagateThrough1(obj,src_in)
%{
for a given wave of size [n, n], full width at half maximum (FWHM)
nyquistSampling = 1, means 2 pixels per fhwm obtained by setting fftPad = 2,
FHWM 占据两个像素,可通过fftPad = 2 完成设置
fieldStopSize should be set to default 单子透镜分辨率 = n/nLenslet;
nyquistSampling = 0.5, means 1 pixels per fhwm obtained by setting fftPad = 1,
fieldStopSize should be set to default n/nLenslet/nyquistSampling/2
下面用的是 fft(A,) 而不是使用fft(fftshift(A) , ),
fft(),操作使用 有用的信息在四周,而不是中央,故
v((0:nLensletImagePx-1)+centerIndex-halfLength) ...
= false;
半宽高度的范围就是在四周,v设置mask的时候就中心部分的非半宽高度区域内的数据 清除掉
%}
nLenslet = 10; % 微透镜个数
nLensletImagePx = 10; % 单个子透镜分辨率
nLensletsImagePx = nLenslet * nLensletImagePx;
%% 给出一个湍流波前,必须是弧度单位。 波长为1.215um,==》 rad,乘以系数0.1934
real_coe = [ ...
-0.0804, 1.5517,-1.7531, 0.7195, 0.3470, 0.1209, 0.0477, 0.4413, 0.0409,-0.0088...
-0.1640, 0.0846,-0.0254, 0.0734,-0.1656,-0.2289, 0.1348,-0.0130, 0.062

最低0.47元/天 解锁文章
6917

被折叠的 条评论
为什么被折叠?



