MATLAB光学模拟仿真实训报告模板.docx
- 文档编号:25979614
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:30
- 大小:909.97KB
MATLAB光学模拟仿真实训报告模板.docx
《MATLAB光学模拟仿真实训报告模板.docx》由会员分享,可在线阅读,更多相关《MATLAB光学模拟仿真实训报告模板.docx(30页珍藏版)》请在冰豆网上搜索。
MATLAB光学模拟仿真实训报告模板
MATLAB光学模拟仿真实训报告模板
(1)
(1)(总24页)
MATLAB光学模拟仿真
一、实训目的
1、熟悉matlab绘图和仿真功能
2、复习物理光学等相关知识
3、掌握运用matlab软件的仿真等功能与专业知识相结合
二、实训内容
(一)MATLAB基础训练及光波在介质分界面的反射和折射
1、相关原理
当一个单色平面波射到两种不同介质的分界面时,将分为两个波,一个折射波一个反射波。
从电磁场的边值关系可以求出它们的传播方向和入射波的振幅关系相位关系。
2、实训任务
已知界面两侧的折射率n2、n1和入射角,绘出在n1
程序如下:
clear;%清空
disp('请输入介质折射率n1和n2');%在显示括号内语句
n1=input('n1=');%接受键盘任意输入合适的折射率n1
n2=input('n2=');%接受键盘任意输入合适的折射率n2
theta=0:
:
90;%入射角范围范围0~90,步距
a=theta*pi/180;%角度化为弧度
rp=(n2*cos(a)-n1*sqrt(1-(n1/n2*sin(a)).^2))./(n2*cos(a)+n1*sqrt(1-(n1/n2*sin(a)).^2));%p分量振幅反射率
rs=(n1*cos(a)-n2*sqrt(1-(n1/n2*sin(a)).^2))./(n1*cos(a)+n2*sqrt(1-(n1/n2*sin(a)).^2));%s分量振幅反射率
tp=2*n1*cos(a)./(n2*cos(a)+n1*sqrt(1-(n1/n2*sin(a)).^2));%p分量振幅透射率
ts=2*n1*cos(a)./(n1*cos(a)+n2*sqrt(1-(n1/n2*sin(a)).^2));%s分量振幅透射率
figure
(1);%创建一个窗口
subplot(1,2,1);%作图rp,rs,|rp|,|rs|随入射角的变化曲线
plot(theta,rp,'-',theta,rs,'--',theta,abs(rp),':
',theta,abs(rs),'-.','LineWidth',2);%用‘-’、‘--’,‘:
’、‘-.’符号标注对应曲线
legend('rp','rs','|rp|','|rs|');%标注曲线图例
xlabel('入射角/theta_i');%命名x轴
ylabel('振幅');%命名y轴
title(['n_1=',num2str(n1),',n2=',num2str(n2),'时反射系数随入射角的变化曲线']);%命名图像
axis([090-11]);%设定作图区间
gridon;%添加网格
subplot(1,2,2);%tp,ts,|tp|,|ts|随入射角的变化曲线
plot(theta,tp,'-',theta,ts,'--',theta,abs(tp),':
',theta,abs(ts),'-','LineWidth',2);%用‘-’、‘--’,‘:
’、‘-.’符号标注对应曲线
legend('tp','ts','|tp|','|ts|');%标注曲线图例
xlabel('入射角/theta_i');%命名x轴
ylabel('振幅');%命名y轴
title(['n_1=',num2str(n1),',n2=',num2str(n2),'时透射系数随入射角的变化曲线']);%命名图像
ifn1 axis([09001]);%设定作图区间 else%否则 axis([0900]);%设定作图区间 end%结束 gridon;%添加网格 (二)光波的叠加 1、相关原理 光波在空间某一区域相遇时,发生光波叠加现象。 波的叠加服从叠加原理,波在相遇点产生的合振动是各个波单独产生的振动的矢量和。 2、实训任务 1 两列单色平面波的模拟。 程序如下: w1=50;%波1频率 w2=60;%波2频率 k1=5;%波1波数 k2=4;%波2波数 t=: : ;%对时间进行等间隔取点 a=1;%波动振幅 x=0: : 5;%对传播方向x轴进行等间隔取点 A2=a*cos(k2*x-w2*t(end));%A2波动函数 A1=a*cos(k1*x-w1*t(end));%A1波动函数 plot(x,A1,'-',x,A2,': ')%绘制两个波形图 set(gcf,'color',[111]);%添加颜色对比度 set(gca,'YTick',[-1: : 1]);%标记Y轴坐标刻度 set(gca,'XTicK',[0: 1: 5]);%标记X轴坐标刻度 xlabel('变量X')%添加x轴说明 ylabel('振幅')%添加y轴说明 title('两列单色平面波的模拟')%添加标题 legend('光波1','光波2')%添加图例光波1和光波2 2 绘制合成波光强曲线。 程序如下: w1=50,w2=60,k=0,k1=5,k2=4,a=1;%两列波的参数 x=0: : 30;%传播方向X轴进行等间隔取点 t=: : %对时间进行等间隔取点 k=k+1;%累加 A=2*a*cos((k1-k2)/2*x-(w1-w2)/2*t(end));%波动函数 I=A.*A;%合成光强 plot(x,I);%绘制图形 set(gca,'YTick',[0: 1: 4])%添加Y轴坐标刻度 set(gca,'XTick',[0: 5: 30])%添加X轴做坐标刻度 xlabel('变量X')%添加X轴说明 ylabel('振幅变化')%添加Y轴说明 title('合成波光强曲线')%添加标题 3 两列单色平面波合成的动态仿真。 程序如下: w1=50,w2=60,k1=5,k2=4,a=1;%两列波的参数 x=0: : 30;%传播方向X轴进行等间隔取点 k=0;%赋初值 m2=moviein(length: : );%形成动态函数 fort=: : %对时间进行等间隔取点 k=k+1;%累加 A=2*a*cos((k1-k2)/2*x-(w1-w2)/2*t);%波动函数 v=a*cos(k1*x-w1*t)+a*cos(k2*x-w2*t);%波动函数 plot(x,v,'k-',x,A,'g: ',x,-A,'b-.');%绘制图形 axis([030-22]);%设置坐标轴 set(gcf,'color',[111])%设置颜色对比度 set(gca,'YTick',[-2: 1: 2])%添加Y轴坐标刻度 set(gca,'XTick',[0: 5: 30])%添加X轴做坐标刻度 xlabel('变量X')%添加X轴说明 ylabel('振幅变化')%添加Y轴说明 title('光学拍')%添加标题 legend('合成波振幅','包络线1','包络线2')%添加图例 m2(: k)=getframe;%获取坐标为界的图像 end%循环结束 movie(m2,3)%绘制动态函数 (三)光波的干涉 1、相关原理 满足一定条件的两列相干波相遇叠加,在叠加区域某些点的振动始终加强,某些点的振动始终减弱,即在干涉区域内振动强度有稳定的空间分布。 2、实训任务 1 杨氏双缝干涉的模拟。 程序如下: clearall lam=500e-9;%设置输入波长 a=2e-3;%设置屏幕到双缝平面距离 D=1;%设置双缝距离 ym=5*lam*D/a;%设定光屏范围 xs=ym;%赋值 n=101;ys=linspace(-ym,ym,n);%把光屏Y方向分成101点 fori=1: n%开始循环 r1=sqrt((ys(i)-a/2).^2+D^2);%两个相干光源到到屏幕上任意点P的距离 r2=sqrt((ys(i)+a/2)^2+D^2);%两个相干光源到到屏幕上任意点P的距离 phi=2*pi*(r2-r1)/lam;%相位差 B(i,: )=4*cos(phi/2).^2;%p点的光强 end%循环结束 N=255%确定灰度级为255级 Br=(B/*N;%最大光强对应的灰度级 subplot(1,2,1);%将一行二列的图从左到右从上到下的第一个位置 image(xs,ys,Br);%画干涉条纹 colormap(gray(N));%输出一个灰色的曲线图 subplot(1,2,2);%将一行二列的图从左到右从上到下的第二个位置 plot(B,ys);%画光强变化曲线 2 模拟非定域干涉下点光源的干涉条纹。 程序如下: xmax=40;ymax=40;%干涉条纹范围设定 Lambad=;%光波长的选择,此处用氦氖激光器 f=190;%扩束镜的焦距 n=%介质折射率,空气为1 N=800;%精度或分辨率,决定x,y的数据量 x=linspace(-xmax,xmax,N);%产生-xmax,xmax之间的N点行线性的矢量 y=linspace(-ymax,ymax,N);%产生-xmax,xmax之间的N点行线性的矢量 fork=0: 15%模拟增加光程差次数 d=模拟增加光程差 fori=1: N%循环体 forj=1: N%循环体 r(i,j)=sqrt(x(i)*x(i)+y(j)*y(j)); B(i,j)=cos(pi*(2*n*d*cos(asin(n*sin(atan(r(i,j)/f)))))/Lambad).^2; end%计算不同光程差条件下的条纹位置 end figure(gcf);%建立 N1=255;%设置分辨率或精度 Br=*B*N1;%调整最终的条纹位置 image(x,y,Br);%显示仿真结果 colormap(gray(N1));%灰度图显示 set(gca,'XTick',[]);%设置x坐标 set(gca,'YTick',[]);%设置y坐标 axisequal%坐标轴设置 drawnow%立即绘图 pause%保留图像 end 3 模拟定域干涉下的等倾干涉条纹。 程序如下: d=2;%设置透镜厚度 Lambad=;%光波长的选择,此处用氦氖激光器 theta=;%设置初始的入射倾角 rmax=d*tan(theta/2)%设置标度 N=800;%精度或分辨率,决定x,y的数据量 x=linspace(-rmax,rmax,N);%设置x轴范围和标度 y=linspace(-rmax,rmax,N);%设置y轴范围和标度 fork=0: 15%模拟增加倾角次数 theta=*k%倾角减小 rmax=d*tan(theta/2)%每条等倾条纹的新标度 fori=1: N%循环体 forj=1: N%循环体 x(i)=(i-2)*2*rmax/(N-1)-rmax;%等倾条纹的x坐标 y(j)=(j-2)*2*rmax/(N-1)-rmax;%等倾条纹的y坐标 r(i,j)=sqrt(x(i)^2+y(j)^2);%等倾条纹的半径 delta(i,j)=2*d/sqrt(1+r(i,j)^2/d^2);%中间参量角计算 Phi(i,j)=2*pi*delta(i,j)/Lambad;%计算参量Phi B(i,j)=4*cos(Phi(i,j)/2)^2;%计算不同倾角条件下的条纹位置 end end figure(gcf);%创建图像显示窗口 N1=255;%设置分辨率或精度 Br=*B*N1;%调整最终的条纹位置 image(x,y,Br);%显示仿真结果 colormap(gray(N1));%灰度图显示 set(gca,'XTick',[]);%设置x坐标 set(gca,'YTick',[]);%设置y坐标 axisequal%坐标轴设置 drawnow%立即绘图 pause%保留图像 end (四)光的衍射 1、相关原理 光在传播路径中,遇到不透明或透明的障碍物或者小孔(窄缝),绕过障碍物,产生偏离直线传播的现象称为光的衍射。 衍射时产生的明暗条纹或光环,叫衍射图样 2、实训任务 1 绘出单色光的衍射光强曲线。 程序如下: clear; Lambda=input('输入光的波长(单位为nm): (取500)');%输入光波长 Lambda=Lambda*(1e-9);%输入米*10^-9 aWidth=input('输入缝宽(单位为mm): (取');%输入缝宽 aWidth=aWidth*;%输入米* Z=input('输入缝到屏的距离(单位为): (取1)');%输入缝到屏的距离 ymax=3*Lambda*Z/aWidth;%屏幕范围沿沿y轴 Ny=51;%屏幕上的点数 ys=linspace(-ymax,ymax,Ny);%将屏幕分成Ny个点 NPoints=51;%单缝的点数 yPoint=linspace(-aWidth/2,aWidth/2,NPoints);%把单缝分成NP个光源 forj=1: Ny%对屏幕上y方向各点作循环 L=sqrt((ys(j)-yPoint).^2+Z^2);%光源到接收屏的距离 Phi=2*pi.*(L-Z)./Lambda;%从距离差计算各波长的相位差 SumCos=sum(cos(Phi));%余弦叠加 SumSin=sum(sin(Phi));%正弦叠加 B(j)=(SumCos^2+SumSin^2)/NPoints^2'%叠加各波长并影响计算光强 end%循环结束 plot(ys,B,'*',ys,B);grid;%画光强曲线 axis([-ymax,ymax,,]);%y轴的区间控制在1内 set(gcf,'color,','w');%将背景设置为白色并计算光强 2 模拟单狭缝的衍射图样和光强分布曲线。 程序如下: clear lam=500e-9;%设置输入波长 a=1e-3;%设置屏幕到双缝平面距离 D=1;%设置双缝距离 ym=3*lam*D/a;%屏幕范围沿沿y轴 ny=51;%屏幕上的点数 ys=linspace(-ym,ym,ny);%将屏幕分成ny个点 np=51;%单缝的点数 yp=linspace(0,a,np);%把单缝分成NP个光源 fori=1: ny%循环开始 sinphi=ys(i)/D;%计算余弦值 alpha=2*pi*yp*sinphi/lam;%计算角度值 sumcos=sum(cos(alpha));%余弦叠加 sumsin=sum(sin(alpha));%正弦叠加 B(i,: )=(sumcos^2+sumsin^2)/np^2;%将光强赋值给B矩阵 end%循环结束 N=255;%确定灰度级为255级 Br=(B/max(B))*N;%最大光强对应的灰度级 subplot(1,2,1)%将一行二列的图从左到右从上到下的第一个位置 image(ym,ys,Br);%画干涉条纹 colormap(gray(N));%输出一个灰色的曲线图 subplot(1,2,2)%将一行二列的图从左到右从上到下的第二个位置 plot(B,ys);%画光强变化曲线 3 模拟圆孔的夫琅禾费衍射。 程序如下: clear; lam=;%波长 R=5e-4;%孔径大小 f=1;%透镜焦距 ym=;%y轴的范围 m=1000;%画的点数 y=linspace(-ym,ym,m);%取值范围从-ym到ym,取值数量为m x=y%赋值 fori=1: m%开始循环 r=x(i).^2+y.^2;%圆孔半径 s=sqrt(r./(r+f^2));%光源到接收屏距离 x1=2*pi*R*s./lam;%计算参数x1 I(: i)=((2*besselj(1,x1)).^2./x1.^2).*5000;%将光强赋值给I矩阵 end%循环结束 image(x,y,I);%绘制图形 title('圆孔夫琅禾费衍射分布');%添加标题 n=100;%设置灰度级 colormap(gray(n));%设置图像为灰色 colorbar;%添加色标 4 模拟光栅衍射图样。 程序如下: clear; lam=500e-9;%波长 N=2;%设置灰度级 a=2e-4,D=5,d=5*a;%设置参数 ym=2*lam*D/a;xs=ym;%Y轴的范围 n=1001;%赋值 ys=linspace(-ym,ym,n);%把光屏的y向分成1001个点 fori=1: n%开始循环 sinphi=ys(i)/D;%余弦值 alpha=pi*a*sinphi/lam;%计算角度值 beta=pi*d*sinphi/lam;%计算角度值 B(i,: )=(sin(alpha)./alpha).^2.*(sin(N*beta)./sin(beta)).^2;%将光强赋值给B矩阵 B1=B/max(B);%将最大光强设为1 end%结束循环 NC=255;%确定灰度级 Br=(B/max(B))*NC;%最大光强对应的灰度级 subplot(1,2,1)%选中1*2区中的1号区 image(xs,ys,Br);%画出干涉条纹 colormap(gray(NC));%设置图像为灰色 subplot(1,2,2)%选中1*2区中的2号区 plot(B1,ys);%画出沿y向的相对光强变化曲线 (五)光的偏振 1、相关原理 两个光源发出的单色光波频率相同,振动方向互相垂直,一个平行于x轴,一个平行于y轴,考察它们在z轴方向上的叠加。 由于两叠加光波的角频率,很容易看出合矢量沿椭圆旋转的角频率不变。 我们把光矢量周期性旋转,其末端的运动轨迹为一个椭圆的成为椭圆偏振光。 2、实训任务 1 绘制偏振光波轨迹的二维图形。 程序如下: clearall: %复位 c=3e+8;%设置光速 lamd=5e-7;%波长 T=lamd/c; t=linspace(0,T,1000);%设置t取值范围从0到1000,取值数量为T个 z=linspace(0,5,1000);%设置z取值范围从0到1000,取值数量为5个 w=2*pi/T%角频率 k=2*pi/lamd;%波数 Eox=10;Eoy=5;%两波的单位矢量 Fx=0;%设置平行于X轴光波的位相 i=1;%设置i参数 forFy=0: pi/4: 7*pi/4%进行for循环,设置平行于Y轴光波的位相 Ex=Eox*cos(w*t+k*z);%平行于X轴的波的光振动表达式 Ey=Eoy*cos(w*t+k*z+Fy);%平行于Y轴的波的光振动表达式 subplot(2,4,i);%将2行4列的图绘制到一个图里 i=i+1;%i在for循环中的叠加 plot(Ex,Ey);%以Ex为横坐标,Ey为纵坐标绘制图像 n=i-2%n=i-2 xlabel('x');%命名横坐标名称 ylabel('y');%命名纵坐标名称 title(['Fy-Fx=',num2str(n),'*pi/4']);%命名图像名称 gridon%显示网格 end 2 绘制偏振光波轨迹的三维图形。 程序如下: c=3e+8,lamd=5e-7,T=lamd/c;%设置光波参数 t=linspace(0,T,1000);%设置t取值范围从0到1000,取值数量为T个 z=linspace(0,5,1000);%设置z取值范围从0到1000,取值数量为5个 q=linspace(0,5,1000)%设置q取值范围从0到1000,取值数量为5个 w=2*pi/T%角频率 k=2*pi/lamd;%波数 Eox=10;Eoy=5;%两波的单位矢量 Fx=0;%设置平行于X轴光波的位相 i=1;%设置i参数 forFy=0: pi/4: 7*pi/4%进行for循环,设置平行于Y轴光波的位相 Ex=Eox*cos(w*t+k*z);%平行于X轴的波的光振动表达式 Ey=Eoy*cos(w*t+k*z+Fy);%平行于Y轴的波的光振动表达式 subplot(2,4,i);%将2行4列的图绘制到一个图里 i=i+1;%i在for循环中的叠加 plot3(Ex,Ey,q);%以Ex为x坐标,Ey为y坐标,Ez为坐标绘制图像 n=i-2;%设置参数n xlabel('x');%命名x坐标名称 ylabel('y');%命名y坐标名称 zlabel('z');%命名z坐标名称 title(['Fy-Fx=',num2str(n),'*pi/4']);%命名图像名称 gridon%显示网格 end (六)傅里叶变换 1、相关原理 将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合可分析信号的成分,也可用这些成分合成信号。 许多波形可作为信号的成分,比如正弦波、方波、锯齿波等,傅立叶变换用正弦波作为信号的成分。 2、实训任务 1 绘制圆孔输入物。 程序如下: clear;%清除变量 N=1024;%定义N I64=zeros(N,N);%预定义平面I64的灰度值为0 [m,n]=meshgrid(linspace(-N/2,N/2-1,N));%确定坐标系及坐标原点的位置 r=input('请输入圆的半径r=');%输入圆的半径大小控制变量r a=input('请输入圆心位置的控制变量a=');%输入圆心位置控制变量a b=input('请输入远新位置的控制变量b=');%输入圆心位置控制变量b D=((m+a).^2+(n+b).^2).^(1/2);%圆函数关系式 i=find(D<=r);%f返回满足条件D<=r的像素点的单下标值 I64(i)=1;%像素点赋值 imshow(I64);%显示图像 2 三角孔和矩形孔的傅里叶频谱观察。 程序如下: clear imga=imread('');%读取图片 gridon figure (1);%建立第一幅图 imshow(imga,[]);%将范围的灰度值变换到0-255区间显示 imgray0=rgb2gray(imga);%将图像转换为灰度图 imgray1=double(imgray0);%提高图像的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 光学 模拟 真实 报告 模板