clc;
clear all;
close all;
warning off all;
%% 设置参数
D = 0.4; % length of one side of square phase screen [m] 窗口宽度 相位屏尺寸
N = 256; % number of grid points per side 网格数量
L0 =1; % 外尺度 [m]
l0= 0.01; % 内尺度 [m]
r0=0.02; %一般在几cm至几十之间[m]
lamda =1.55e-6; % 光波长 [m] e-6表示对应乘以10的-6次方
w0 = 20e-3; % 高斯光束 腰斑半径
k = 2*pi / lamda; % 光波数 [rad/m]
L =1; % 传播距离 [m]
derta_z=0.5; %相位屏间距[m]--在传播路径上间隔排列
screen_num=L/derta_z; %相位屏个数
%% 观察面坐标生成 形成初始场
dx = D/N; %窗口宽度/网格数量=一个网格的宽度(网格间距)
m2=(-N/2:N/2-1); %采样点范围
[X,Y]=meshgrid(m2*dx); %meshgrid(x,y)绘制3-D网格数据--返回的两个矩阵行数x、列数y相等-- 坐标轴网格位置
[r,theta]=meshgrid(linspace(0,D,N),linspace(0,2*pi,N)); %linspace(x1,x2,N)在x1-x2之间产生N个点
[x,y]=pol2cart(theta,r); %绘图输入变量--pol2cart将 极坐标 转换为 直角坐标
%% 空间频率域
df=1/D; %空间分辨率
[fx,fy]=meshgrid(m2*df); %生成空间网格
fr=sqrt(fx.^2+fy.^2); %fr空间频率
kr=2*pi*fr; %kr空间波数
%% (1)高斯光束相关
f=pi*w0^2/lamda; %f为高斯光束的 共焦参数
wz=w0*sqrt(1+(L/f)^2); %L处光斑半径-----------(即Z轴方向)
Rz=L+f^2/L; %高斯光束等相位面的 曲率半径
u0=(w0./wz).*exp(-r.^2./wz.^2-1i.*k.*r.^2./(2*Rz)); %考虑曲率半径的 高斯光束场表达式--用r进行绘图
u0=griddata(x,y,u0,X,Y); %将衍射场的坐标转换到X、Y平面(规则/均匀的格点)上
%% dm到CCD
phase1=0; %为什么为0?
u0=fft2(exp(1i*phase1).*u0 ); %li=i指虚数符号?为什么这样还要进行fft变换
I0=abs(u0);
I0=fftshift(I0);
I0=I0./max(I0(:)); %I0?
[cenx0, ceny0]=zhixin(I0) %求重心
%% 画图--不加相位屏
% % 绘制传播L距离后的高斯光束(理想情况)
figure(1)
mesh(X,Y,I0);
xlabel('x/m')
ylabel('y/m')
zlabel('初始光强')
title('不加相位屏-传播L距离后高斯光束');
figure(2)
x0=linspace(-0.2,0.2,N);
y0=linspace(-0.2,0.2,N);
imagesc(I0);colormap('jet');colorbar;
hold on;
plot(cenx0,ceny0,'k*');
hold off;
%% (2)Gauss光束经过相位屏
%计算传输第一个derta_z时光场
w_derta_z=w0*sqrt(1+(derta_z/f)^2);
R_derta_z=derta_z+f^2/derta_z;
u_derta_z=(w0./w_derta_z).*exp(-r.^2./w_derta_z.^2-1i.*k.*r.^2./(2*R_derta_z));
u1=u_derta_z;
u1=griddata(x,y,u1,X,Y);
%% 利用功率谱
for j=1:screen_num
[phase_high] = High_phase_screen( r0, N, D, L0, l0 );
[phase_low] = low_phase_screen( r0, N, D, L0, l0 );
phase = phase_high + phase_low;
figure(3)
mesh(X,Y,phase);%绘制相位屏
% figure(3)
gca=pcolor(phase);
set(gca, 'LineStyle','none');%去掉网格线
u1 = fft2(exp(1i*phase).*u1.*exp(-1i*k*derta_z)); %?1.先对u进行FFT变换,转换到空间频率域上,
u1 = fftshift(u1); %fftshift将零频点移动到频谱中间
u1 = ifft2(ifftshift(exp(-1i.*derta_z.*kr.^2./(2.*k)).*u1)); %2.并在空间频率域上乘上 变换算子,3.再逆变换回时域
end
% I1=u1.*conj(u1);%???干什么呀
%% dm到CCD
phase1=0;
u2=fft2(exp(1i*phase1).*u1);
I1=abs(u2);
I1=fftshift(I1);
I1=I1./max(I1(:));
[cenx1, ceny1]=zhixin(I1)
detal_cenx=cenx1-cenx0
detal_cenx=ceny1-ceny0%偏移量
%% 画图--接收
figure(4)
set(gcf,'color','w');
mesh(X,Y,I1);colorbar;
xlabel('接收面x轴/m')
ylabel('接收面y轴/m')
zlabel('光强')
title('加相位屏-传播L距离后高斯光束');
figure(5)
x1=linspace(-0.2,0.2,N);
y1=linspace(-0.2,0.2,N);
imagesc(I1);colorbar;
hold on;
plot(cenx1,ceny1,'k*');
hold off;
没有合适的资源?快使用搜索试试~ 我知道了~
【物理应用】基于Matlab模拟相位屏 上传.zip
共10个文件
png:5个
m:5个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 125 浏览量
2023-04-15
08:52:01
上传
评论 1
收藏 61KB ZIP 举报
温馨提示
1.版本:matlab2014/2019a,内含运行结果,不会运行可私信 2.领域:智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,更多内容可点击博主头像 3.内容:标题所示,对于介绍可点击主页搜索博客 4.适合人群:本科,硕士等教研学习使用 5.博客介绍:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可si信
资源推荐
资源详情
资源评论
收起资源包目录
【物理应用】基于Matlab模拟相位屏 上传.zip (10个子文件)
Gauss_pro.m 4KB
zhixin.m 1KB
3.png 23KB
1.png 11KB
ift2.m 175B
low_phase_screen.m 2KB
5.png 6KB
4.png 13KB
High_phase_screen.m 848B
2.png 4KB
共 10 条
- 1
资源评论
天天Matlab科研工作室
- 粉丝: 2w+
- 资源: 7257
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功