【光学】GS算法高斯光转换成高阶高斯光+一阶空心高斯光+贝塞尔高斯光【含Matlab源码 2166期】

在这里插入图片描述

⛄一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【光学】基于matlab GS算法高斯光转换成高阶高斯光+一阶空心高斯光+贝塞尔高斯光【含Matlab源码 2166期】
点击上面蓝色字体,直接付费下载,即可。

获取代码方式2:
付费专栏Matlab物理应用(初级版)

备注:
点击上面蓝色字体付费专栏Matlab物理应用(初级版),扫描上面二维码,付费29.9元订阅海神之光博客付费专栏Matlab物理应用(初级版),凭支付凭证,私信博主,可免费获得1份本博客上传CSDN资源代码(有效期为订阅日起,三天内有效);
点击CSDN资源下载链接:1份本博客上传CSDN资源代码

⛄二、GS算法原理简介

GS算法是相位恢复技术中的一种经典算法,而相位恢复技术是指利用直接测量得到的强度信息通过一系列计算得到物体的相位信息,从而重建原物体的波函数.相位恢复算法的主要算法有两类:GS迭代算法和基于TIE方程的方法.Gerchberg等人在1972年提出了Gerchberg-Saxton算法(简称GS算法),主要思想是在图像空间和傅立叶空间之间利用已知的信息或者约束来重复迭代.后来国内外学者在GS算法的基础上也先后提出了很多的改进算法,提高了算法的精度和收敛速度.GS算法原理如下:设光束的光场函数为
在这里插入图片描述
其对应的聚焦平面上的光场函数可以表示为
在这里插入图片描述
其中,|f(x,y)|2,|g(x,y)|2为强度信息,φ1(x,y),φ2(x,y)为相位信息.其中,f和g满足正反傅立叶变换的关系.GS算法流程图如图1所示,具体思想是任意给定一输入面上的初始相位,这里的相位可以是随机的相位.然后与入射光的振幅组合在一起,构成入射波函数f(x,y),再对入射波函数f(x,y)作傅立叶变换,这时得到函数g(u,v),对函数g(u,v)的相位部分,再与输出面上希望得到的振幅分布函数|G(u,v)|构成函数g′(u,v).然后对函数g′(u,v)作逆傅立叶变换,这时将得到下一步迭代波函数f′(x,y),最后取其相位部分代入原初始相位中.重复上述过程一直到设定的迭代次数或者误差小于预先设置好的值为止.
在这里插入图片描述
图1 GS算法流程图

⛄三、部分源代码

clear all;close all;clc;
%--------------------------------------------------------------------------
d0=0.008; % 单位 mm
%--------------------------------------------------------------------------
x01=-7.672:d0:7.68;
y01=-4.312:d0:4.32;
[x011,y011]=meshgrid(x01,y01); % LCSLM面坐标
x0=x011’; y0=y011’;
[m0,n0]=size(x0);
%--------------------------------------------------------------------------
d=0.008; % 单位 mm
%--------------------------------------------------------------------------
x1=-7.672:d:7.68;
y1=-4.312:d:4.32;
[x11,y11]=meshgrid(x1,y1); % 输出面坐标
x=x11’; y=y11’;
[m,n]=size(x);
%--------------------------------------------------------------------------
lambda=633e-6; % 单位 mm
w=0.9sqrt(2); %单位 mm 为测得输入光斑(e-1)处半径的sqrt(2)倍
L=500; % 单位 mm
f0=exp(-((x0./w).2+(y0./w).2)); % 给定输入光束的复振幅分布 矩阵大小为 m0
n0
f0=f0/sqrt(sum(sum(f0.^2)));
phi=rand(m0,n0); % m0n0
figure(1),mesh(f0),view(0,90);title(‘输入光场分布’)
%% 给定理想输出光束复振幅分布 矩阵大小为m
n
% 超高斯型

% c=2sqrt(x.2+y.2)/w;
% J1=beselj(1,c);
% F0=J1.exp(-((x./w).2+(y./w).2));
F0=F0/sqrt(sum(sum(F0.^2)));
figure(2),mesh(F0),view(0,90);title(‘理想输出光场分布’)
%--------------------------------------------------------------------------
k=2
pi/lambda;
P=2
piphi; % m0n0
iter=1; MaxIter=2000;
err=ones(MaxIter); epsilon=1e-7;
% F=zeros(m,n); Fp=zeros(m,n);
delta_F1=1; delta_U1=1;
while (iter<=MaxIter && err(iter) > epsilon)
U=f0.exp(1iP);
U1=frt(U,lambda,d,L);
% Co(iter)=corr2(abs(U1),F0); %振幅相关系数
q=angle(U1);
IU1=F0.exp(1iq); %用所要求的振幅取代谱面波函数的振幅
IU2=ifrt(IU1,lambda,d,L);
P=angle(IU2);
xx=(sum(sum((abs(U1)-F0).2)))./(sum(sum(F0.2)));
yy=(sum(sum((abs(IU2)-f0).2)))./(sum(sum(f0.2)));
delta_F=xx;
delta_U=yy;
err(iter+1)=max(abs([delta_F-delta_F1, delta_U-delta_U1]));
delta_F1=delta_F;
delta_U1=delta_U;
iter=iter+1 ;
end
P=mod(P,2pi);
a1=P/max(max§); %归一化
P1=floor(255
a1);
P2=uint8(255a1);
figure(3);imshow(P2’,[]);
save(‘1jie1’,‘P2’)
imwrite(P2’,‘1jie1.bmp’,‘bmp’)
title(‘设计出的相位板’);
E1=f0.exp(1i2
pi*P1/255);
E2=frt(E1,lambda,d,L);
E3=abs(E2);
mesh(E3)
figure(4);imshow(E3,[]);
title(‘理想高斯光下的输出效果’);
figure(5),
B=1:iter;
plot(B,err(B),‘-’,‘LineWidth’,2);
xlabel(‘迭代次数’); ylabel(‘振幅相关系数’);title(‘相关系数’);

⛄四、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]门云阁.MATLAB物理计算与可视化[M].清华大学出版社,2013.
[2]吴海燕.利用GS算法实现图像加密技术[J].玉溪师范学院学报. 2019,35(06)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 20
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个MATLAB环境下编写高斯贝塞尔-轨道角动量的编解码代码的示例: 首先,我们需要定义一些参数。例如,我们可以选择使用高斯-贝塞尔来传输信息。高斯-贝塞尔是一种横向模式具有平面波前的,其电场强度可以用以下公式表示: E(r,theta,z) = sqrt(2/pi)*E0*w0/w(z)*exp(-(r/w(z))^2)*exp(-i*k*z)*exp(i*l*theta)*exp(-i*(2*l+1)*tan^-1(z/zr)) 其中,E0是初始振幅,w0是束腰半径,w(z)是z处横向位置r的束半径,k是波矢,zr是瑞利范围,l是轨道角动量量子数,r是距离,theta是极角,z是纵向位置。 在MATLAB中,我们可以通过定义这些参数为变量来描述高斯-贝塞尔的电场强度。 接下来,我们可以编写编码器函数。编码器函数将要传输的信息编码到高斯-贝塞尔的轨道角动量上。例如,我们可以将信息转换为二进制字符串,并将其转换为轨道角动量的量子数,从而改变束的极角。这里是一个简单的编码器函数示例: function [l_out,theta_out] = encoder(info) % Convert info to binary string info_bin = dec2bin(info); % Convert binary string to quantized orbital angular momentum l_out = bin2dec(info_bin); % Set angle to the quantized orbital angular momentum theta_out = l_out*pi/180; end 在上面的编码器函数中,我们首先将要传输的信息转换为二进制字符串,然后将其转换为轨道角动量的量子数l_out。最后,我们将l_out转换为极角theta_out。 最后,我们可以编写解码器函数。解码器函数将从束中检测到的轨道角动量转换为传输的信息。例如,我们可以通过将轨道角动量的量子数转换为二进制字符串来恢复原始信息。这里是一个简单的解码器函数示例: function info_out = decoder(l_in) % Convert quantized orbital angular momentum to binary string info_bin = dec2bin(l_in); % Convert binary string to info info_out = bin2dec(info_bin); end 在上面的解码器函数中,我们首先将检测到的轨道角动量转换为轨道角动量的量子数l_in,然后将l_in转换为二进制字符串,并最终将其转换为原始信息info_out。 通过这些函数,我们可以将信息编码到高斯-贝塞尔的轨道角动量中,并从

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值