matlab绘制双缝、等厚劈尖干涉、牛顿环、迈克尔逊等倾干涉图样

理论知识可以参考这一篇文章:
https://blog.csdn.net/Carifee/article/details/120041079?spm=1001.2014.3001.5501

1.matlab绘制双缝干涉图样

方法1:

clc
close all
clear all
%% %%代码分块运行
lambda = 500e-9;    %%波长500nm
d = 2e-3;   %%双缝间距2mm
D=1;    %%双缝距离观察屏之间的距离1m
ym=5*lambda*D/d;    %%表示最宽的位置为5个亮纹处
xs=ym;
n=101;
ys=linspace(-ym,ym,n);  %%屏面线性间距向量
for i=1:n
    r1=sqrt((ys(i)-d/2).^2+D^2);    %%光程1
    r2=sqrt((ys(i)+d/2).^2+D^2);    %%光程2
    phi=2*pi*(r2-r1)./lambda;   %%相位差
    B(i,:)=4*cos(phi/2).^2;    %%计算光强,假设初始光强为1,不必加sum
end
N=255;
Br=B*55;    %%将光强乘以一个值,以增强图像的区分度,这个值不能太大亦不能太小,可以试一试

subplot(1,2,1);  %%一行两列中的第一幅图
image(xs,ys,Br);    %%从数组显示图像
colormap(gray(N));  %%使图像以灰度图像显示

subplot(1,2,2);  %%一行两列中的第二幅图
plot(B,ys);
title('双缝干涉图样')

结果:
在这里插入图片描述
方法2:
双缝干涉的动态图样:

clear
avi_object = VideoWriter('interference');
avi_object.FrameRate = 20;
open(avi_object);
for t = 0:0.01:1
%生成干涉后的光强分布值Z
x = linspace(-3*pi,5*pi,400);
y = linspace(-4*pi,4*pi,400);
[X,Y] = meshgrid(x,y);
a=1;%波长
Z = zeros(400);
for j = 1:150
    for i = 1:400
        Z(i,j) = cos(-2*pi*t+2*pi*sqrt((X(i,j)+pi)^2+Y(i,j)^2)/a)^2;
    end
end
for j = 151:400
    for i = 1:400
        Z(i,j) = (cos(-2*pi*t+2*pi*sqrt(X(i,j)^2+(Y(i,j)-pi)^2)/a)+cos(-2*pi*t+2*pi*sqrt(X(i,j)^2+(Y(i,j)+pi)^2)/a))^2;
    end
end
pcolor(X,Y,Z);
shading interp;%颜色渐变效果
%colorbar;
colormap(hot);%doc colormap可以改色卡
%画挡板
A = [0 0];
B1 = [0 pi-0.1];
B2 = [pi+0.1 4*pi];
B3 = [0 -pi+0.1];
B4 = [-pi-0.1 -4*pi];
line(A,B1,'Color','k','LineWidth',5);
line(A,B2,'Color','k','LineWidth',5);
line(A,B3,'Color','k','LineWidth',5);
line(A,B4,'Color','k','LineWidth',5);
M = getframe;
%M.cdata = imresize(M.cdata,[1026 1302]);
writeVideo(avi_object,M);
end
close(avi_object);

结果:
在这里插入图片描述

2.matlab绘制等厚劈尖干涉图样

置一楔角θ微小的劈尖水平放置于空气中,令单色光沿垂直方向照射劈尖,形成干涉条纹。光程差δ=2nh+λ/2,n>1为劈尖介质折射率设为常量,劈尖厚度h=xtanθ为一变量,λ为入射光波长,λ/2是因为半波损失——劈尖周围的空气介质折射率小于劈尖。 相位差φ=2π·δ/λ,光强分布I=4cos²(φ/2) 。

clear;
lambda=632.8e-9;     %入射光波长
theta=0.1;       %劈尖楔角
n=1.33;         %介质折射率
N=900;      %N表示均匀取样个数,可以改变
x=linspace(0,600,N);        %x为劈尖长度,单位mm
y=linspace(0,300,N/2);      %y为劈尖宽度,单位mm
h=x*tan(theta);
Phi=2*n*h./lambda;
I=4*cos(Phi/2).^2;
graylevel=255;
Ir=(I/4)*graylevel;
subplot(2,1,1),image(x,y,Ir);
colormap(gray(graylevel)),
xlabel('劈尖长度/mm'),ylabel('劈尖宽度/mm'),title('条纹图')
subplot(2,1,2),plot(x,I),title('劈尖长度方向的光强分布') 

结果:
在这里插入图片描述

3.matlab绘制牛顿环干涉图样

方法1:

clear all
lambda=600e-9;      %入射光波长
R=10;       %牛顿环曲率
rm=1e-2;        %干涉条纹区域
x=0:0.0001:rm;
y=rm:-0.0001:0;
[X,Y]=meshgrid(x,y);
r2=x.^2+Y.^2;
phi=2*pi*(r2/R+lambda/2)/lambda;        %相位差
I=4*cos(phi./2).^2;         %第一象限干涉光强
N=255;          %灰度等级
Ir2=(I/4.0)*N;          %最大光强为最大灰度
Ir1=fliplr(Ir2);        %矩阵对称操作
Ir3=flipud(Ir1);
Ir4=flipud(Ir2);
Ir=[Ir1 Ir2;Ir3 Ir4];       %构造图像矩阵

figure
image(Ir,'Xdata',[-0.02,0.02],'YData',[0.02,-0.02]);        %画干涉条纹
colormap(gray(N));
axis square
title('牛顿环干涉图样')

结果:
如果相位差越大那么干涉条纹越密且中央干涉点越亮。
**结果:**
方法2:

clear,clc,close all;
Lambda = 632.8 * 1e-9;                 %波长单位转为:m
R = 900 * 1e-3;                           %透镜的曲率半径单位转为:m
I0 = 1;                                 %入射光的光强
Screen_length = sqrt(10*R*Lambda);      %定义干涉仿真范围
[Screen_x,Screen_y] = meshgrid(linspace(-Screen_length,Screen_length,800));
Newton_r = abs(Screen_x + 1i*Screen_y);
I_delta = (Newton_r.^2)*pi/R/Lambda;
I = 2*I0*(sin(I_delta)).^2;
I = I./max(max(I));                      %光强分布归一化
I = I*64;                                %光强归一,扩大显示
image(Screen_x(1,:),Screen_y(:,1),I);    %设置x和y的像素,显示数值
colormap hot;                            %妆点色彩
colorbar;
xlabel('x'),ylabel('y');
title('牛顿环');  

结果:
在这里插入图片描述

4.matlab绘制迈克尔逊干涉仪干涉图样

程序:

clear all;
xmax=10;ymax=10;        %设定屏幕范围
lambda=632.8e-6;f=200;      %设定入射光波长
n=1.0;
N=150;
x=linspace(-xmax,xmax,N);
y=linspace(-ymax,ymax,N);

for k=0:15
    d=0.39-0.00005*k;       %M1和M2'空气膜厚度
    for i=1:N
        for j=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)))))/lambda).^2; %干涉条纹
        end
    end
    figure(gcf);
    NClevels=255;       %设定灰度
    Br=2.5*B*NClevels;
    image(x,y,Br);      %画干涉图像
    colormap(gray(NClevels));
    set(gca,'Xtick',[]);
    set(gca,'Ytick',[]);
    drawnow
    pause
end

结果:
在这里插入图片描述

<think>好的,我现在需要处理用户关于白光干涉Matlab仿真方法和代码的请求。首先,我得确认用户的需求具体是什么。用户提到了白光干涉,并希望得到相关的仿真示例代码或实现方法。根据提供的引用资料,特别是引用[2]、[3]、[4],这些内容涉及白光干涉的基本原理和Matlab仿真的应用,因此需要结合这些信息来构建回答。 首先,我应该回顾白光干涉的基本原理,确保自己理解正确。根据引用[2],白光干涉使用宽光谱光源,相干长度短,因此只有在零光程差附近才能观察到明显的干涉条纹。这一点需要在仿真中体现出来,比如模拟不同波长的叠加效果。 接下来,引用[4]提到七色光的波长不同,仿真时需要考虑各色光非相干叠加的结果。这意味着在代码中需要生成多个波长,分别计算它们的干涉强度,然后进行叠加。这可能涉及到循处理不同波长的光,并累加其强度。 然后,引用[3]提到使用迈克尔逊干涉仪结构,仿真样本的高度差异会影响干涉结果。因此,在仿真中可能需要模拟不同光程差下的干涉情况,比如通过移动反射镜来改变光程差,从而生成干涉信号。 现在,我需要将这些理论转化为Matlab代码的步骤。首先,确定仿真的参数,如波长范围、光程差扫描范围、高斯包络参数等。然后,生成不同波长的光,计算每个波长的干涉强度,叠加后乘以高斯包络,模拟白光干涉的包络特性。 可能的挑战是如何高效地处理多个波长的叠加。考虑到计算量,可能需要向量化操作而不是循,但为了代码的清晰,可以先用循实现,再考虑优化。此外,正确模拟高斯包络和正弦调制是关键,需要确保数学公式正确。 还需要验证仿真结果是否符合预期,比如干涉信号在零光程差处有最大峰值,随着光程差增大信号减弱。可能需要绘制光强分布图,并检查包络是否符合高斯分布。 最后,根据用户的问题,可能需要生成相关问题,例如优化方法、参数影响等,这需要根据已有的知识来设计相关问题,确保问题相关且有价值。 现在,将这些思路整理成结构清晰的步骤,并确保代码正确,注释详细,便于用户理解和调整参数。同时,引用相关的文献资料,如引用[2]中的原理和引用[3]中的仿真结构,来支持回答的可靠性。</think>以下为基于白光干涉原理的Matlab仿真实现方法及示例代码,结合了迈克尔逊干涉仪结构特点和白光干涉信号特性[^2][^3]: ### 一、白光干涉仿真原理 1. 白光光源由多波长组成,波长范围通常取$400-700$nm可见光波段[^4] 2. 干涉强度是各波长干涉信号的非相干叠加 3. 包络函数采用高斯分布模拟白光干涉特性 ### 二、Matlab仿真代码实现 ```matlab %% 参数设置 lambda = linspace(400e-9, 700e-9, 100); % 波长范围400-700nm(100个采样点) z = linspace(-5e-6, 5e-6, 1000); % 光程差扫描范围±5μm I0 = 1; % 初始光强 sigma = 2e-6; % 高斯包络标准差 %% 白光干涉计算 I_total = zeros(size(z)); for k = 1:length(lambda) % 单色光干涉公式 I_single = I0*(1 + cos(2*pi*z/lambda(k))); % 高斯包络调制 gauss_env = exp(-(z).^2/(2*sigma^2)); % 非相干叠加 I_total = I_total + I_single .* gauss_env; end %% 结果可视化 figure; plot(z*1e6, I_total/max(I_total), 'b-', 'LineWidth',1.5); xlabel('光程差 (μm)'); ylabel('归一化光强'); title('白光干涉信号仿真'); grid on; ``` ### 三、关键参数说明 1. `lambda`:白光光谱范围,可修改为$500-600$nm等特定波段 2. `z`:光程差扫描范围,需满足$\Delta z <$相干长度 3. `sigma`:控制包络宽度,值越小相干峰越锐 ### 四、仿真结果特征 1. 零光程差处出现明显相干峰 2. 信号包络呈高斯分布 3. 相位快速振荡特性(由多波长叠加引起) ### 五、扩展应用方法 针对三维表面形貌测量,可结合垂直扫描技术: ```matlab % 添加表面高度模拟 height_map = [0 100e-9 200e-9]; % 三个高度层 for h = height_map z_shift = z + 2*h; % 光程差与高度关系 % 重复干涉计算过程... end ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Carifee.

您的鼓励是我创作最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值