高斯光束的ABCD定律(二):薄透镜传输矩阵matlab仿真

#学习资料《MATLAB高等光学仿真(第3版)》、《MATLAB辅助激光光学 分析与应用》

一、教材示例:

如图所示,光束从左往右依次通过间隔为50mm的两个薄透镜:凹透镜M1(flens0=-50mm)、凸透镜(flens1=30mm),假设入射位置在M1左边60mm处,并计算M2之后40mm处的光束参数,则其传输矩阵的书写形式为:

M=\begin{bmatrix} 1 &40 \\ 0&1 \end{bmatrix}\begin{bmatrix} 1 &0 \\ -1/30&1 \end{bmatrix}\begin{bmatrix} 1 &50 \\ 0&1 \end{bmatrix}\begin{bmatrix} 1 &0 \\ 1/50&1 \end{bmatrix}\begin{bmatrix} 1 &60 \\ 0&1 \end{bmatrix}

通常情况下,我们希望获得光束在整个传播路径中的光束尺寸变化情况,然后从图形数据中获取信息。这时就要将路径划分成为若干个数据点,进行逐点计算,matlab程序如下:

%函数用于计算两个人透镜对高斯光束的变换
function beamspread(lambda,waist,M2,flens0,s0,flens1,s1)
num=1000; %采样点
R0=inf; %曲率半径无限大
lambda=1.064; %波长
M2=1.5; %光束质量因子
waist=0.1; %束腰半径
flens0=-50; %透镜1的焦距
s0=60; %物方束腰位置(距离透镜1的距离)
flens1=30; %透镜2的焦距
s1=50; %透镜1与透镜2之间的距离
lambda=lambda*1.0e-3; 
q0=1./(1./R0-1i*lambda*M2./pi./waist.^2); %高斯光束的复参数q

%第一个矩阵[1,40;0,1]
z=linspace(0,s0,num);
wp=zeros(size(z));
Rp=wp;
for gk=1:num
    M=space(z(gk));
    [ws,wr,q]=cavitystate(M,1,M2,q0,lambda);
    wp(gk)=ws;
    Rp(gk)=wr;
end
figure; %绘图
plot(z,wp,'k',z,-wp,'k','LineWidth',1.5);
xlabel('传播距离/mm');  %设置x轴标签为"位置(mm)";
ylabel('光斑尺寸/mm');  %设置y轴标签为"位置(mm)";
title('两个透镜光束变换');  %添加标题
hold on;

%第二个矩阵[1,-1/30;0,1]
[ws,wr,q]=cavitystate(lens(flens0),1,M2,q,lambda);

%第三个矩阵[1,50;0,1]
q0=q;
z=linspace(0,s1,num);
for gk=1:num
    M=space(z(gk));
    [ws,wr,q]=cavitystate(M,1,M2,q0,lambda);
    wp(gk)=ws;
    Rp(gk)=wr;
end
z=z+s0;
plot(z,wp,'k',z,-wp,'k','LineWidth',1.5);

%第四个矩阵[1,1/50;0,1]
[ws,wr,q]=cavitystate(lens(flens1),1,M2,q,lambda);


%第五个矩阵[1,60;0,1]
q0=q;
z=linspace(0,3*flens1,num);
for gk=1:num
    M=space(z(gk));
    [ws,wr]=cavitystate(M,1,M2,q0,lambda);
    wp(gk)=ws;
    Rp(gk)=wr;
end
z=z+s0+s1;
plot(z,wp,'k',z,-wp,'k','LineWidth',1.5);

%还需调用光学矩阵函数,也可以重新定义
%自由介质中的传输矩阵,用于产生一个长度L的自由传输空间矩阵;
%L是传输距离,n为介质折射率,当在空气中传输时,取n=1
function matrix=space(s)
% if nargin<2
%     n=1;
% end
matrix=[1,s;0,1];

%薄透镜的传输矩阵%用于产生一个焦距为f的透镜
function matrix=lens(flens)
matrix=[1,0;-1./flens,1];

程序中还包含了一个cavitysate函数(后续仿真晶体内部也需调用):

%cavitystate 调用函数
function varargout=cavitystate(matrix,s,MM2,q,lambda)
%用于计算ABCD传输矩阵的稳定性或高斯参数的传输
%matrix为传输矩阵,s指明是谐振腔(0)或者外部光束(1)
%当指明为谐振腔时,将返回腔的稳定性参数和基膜高斯光束参数
%当指明为外部光束时,只返回高斯光束的传输参数,这时需要输入光束的q参数
%MM2为光束的质量因子
% [spotsize,Rcurv,stable]=cavitystate(matrix,0)
% [spotsize,Rcurv]=cavitystate(matrix,1,M2,q)
A=matrix(1,1);
B=matrix(1,2);
C=matrix(2,1);
D=matrix(2,2);
if nargin<3
    MM2=1;
end
if nargin<4
    q=1/(-1i*lambda/(pi*0.1^2));%默认情况下为束腰宽度为0.5mm的光束
end
if nargin<2
    s=0;
end
if s==0
    stab=(A+D)^2/4;
    if stab>=1
        disp('warning:谐振腔不满足稳定条件');
        wspot=0;
        Rcurv=0;
    else
        wspot=sqrt(MM2*lambda*abs(B)/pi/sqrt(1-stab));
        Rcurv=2*B/(D-A);
    end
elseif s==1
    if isempty(q)
        q=input('请输入外部传输光束的q参数:');
        MM2=input('请输入光束的M2因子:');
    end
    q=(A*q+B)/(C*q+D);
    wspot=sqrt(lambda*MM2/pi/abs(imag(1/q)));
    Rcurv=1/real(1/q);
else
    error('腔内光束和外部光束用0和1区分,例如cavitystate(matrix,0).');
end
if nargout==1
    varargout{1}=wspot;
elseif nargout==2
    varargout{1}=wspot;
    varargout{2}=Rcurv;
elseif nargout==3&&s==0
    varargout{1}=wspot;
    varargout{2}=Rcurv;
    varargout{3}=stab;
elseif nargout==3&&s==1
    varargout{1}=wspot;
    varargout{2}=Rcurv;
    varargout{3}=q;
elseif nargout>3
    error('输出参数不正确!');
end

仿真结果:

 二、修改变量

1、将M2改为1,观察变化:

lambda=1.064; %波长
M2=1; %光束质量因子
waist=0.1; %束腰半径
flens0=-50; %透镜1的焦距
s0=60; %物方束腰位置(距离透镜1的距离)
flens1=30; %透镜2的焦距
s1=50; %透镜1与透镜2之间的距离

仿真结果:

 光束质量变为1后,光斑略有减小。

2、将束腰半径改为0.5mm

lambda=1.064; %波长
M2=1; %光束质量因子
waist=0.5; %束腰半径
flens0=-50; %透镜1的焦距
s0=60; %物方束腰位置(距离透镜1的距离)
flens1=30; %透镜2的焦距
s1=50; %透镜1与透镜2之间的距离

仿真结果:

3、改变多组参数,仿真两个凸透镜的光束传播变化

lambda=1.064; %波长
M2=1; %光束质量因子
waist=0.5; %束腰半径
flens0=100; %透镜1的焦距
s0=100; %物方束腰位置(距离透镜1的距离)
flens1=50; %透镜2的焦距
s1=200; %透镜1与透镜2之间的距离

仿真结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值