| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1358 人关注过本帖
标题:[求助]用metlab画光学图,强人进
取消只看楼主 加入收藏
摩天居士
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-7-3
收藏
 问题点数:0 回复次数:2 
[求助]用metlab画光学图,强人进

用傅立叶方法实现衍射花样
例如:方孔衍射,每个方孔几何尺寸相同
可以看出,基本衍射图样还是
方孔衍射但是在任意两个方
孔连线的中垂线方向会出现
等间距暗纹,三角形摆放则会
出现类似蜂巢的结构
那位大哥大姐能帮忙遍一下,根据下面程序编

(一)衍射积分方法:
该方法首先是由衍射积分算出接收屏上的光强分布,然后根据该分布调制色彩作图,从而得到衍射图案。
1. 单缝衍射。
把单缝看作是np个分立的相干光源,屏幕上任意一点复振幅为np个光源照射结果的合成,对每个光源,光程差Δ=ypsinΦ,sinΦ=ys/D,光强I=I0(Σcosα)2+(Σsinα)2,其中α=2Δ/λ=πypys/λD
编写程序如下,得到图1
clear
lam=500e-9;
a=1e-3;D=1;
ym=3*lam*D/a;
ny=51;
ys=linspace(-ym,ym,ny);
np=51;
yp=linspace(0,a,np);
for i=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;
end
N=255;
Br=(B/max(B))*N;
subplot(1,2,1)
image(ym,ys,Br);
colormap(gray(N));
subplot(1,2,2)
plot(B,ys);
2. 杨氏双缝干涉
两相干光源到接收屏上P点距离r1=(D2+(y-a/2)2)1/2, r2=(D2+(y+a/2)2)1/2,相位差
Φ=2π(r2-r1)/λ,光强I=4I0cos2(Φ/2)
编写程序如下,得到图2
clear
lam=500e-9
a=2e-3;D=1;
ym=5*lam*D/a;xs=ym;
n=101;ys=linspace(-ym,ym,n);
for i=1:n
r1=sqrt((ys(i)-a/2).^2+D^2);
r2=sqrt((ys(i)+a/2).^2+D^2);
phi=2*pi*(r2-r1)./lam;
B(i,:)=sum(4*cos(phi/2).^2);
end
N=255;
Br=(B/4.0)*N
subplot(1,2,1)
image(xs,ys,Br);
colormap(gray(N));
subplot(1,2,2)
plot(B,ys)
3. 光栅衍射
公式:I=I0(sinα/α)2(sin(λβ)/sinβ)2
α=(πa/λ)sinΦ
β=(πd/λ)sinΦ
编写程序如下:得到图3
clear
lam=500e-9;N=2;
a=2e-4;D=5;d=5*a;
ym=2*lam*D/a;xs=ym;
n=1001;
ys=linspace(-ym,ym,n);
for i=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;
B1=B/max(B);
end
NC=255;
Br=(B/max(B))*NC;
subplot(1,2,1)
image(xs,ys,Br);
colormap(gray(NC));
subplot(1,2,2)
plot(B1,ys);
(二)傅立叶变换方法:
在傅立叶变换光学中我们知道夫琅和费衍射场的强度分布就等于屏函数的功率谱。因此我们可以直接将光屏进行傅立叶变换,再处理得到衍射图样。
物体图像的生成可以直接由矩阵运算生成,也可利用Windows下的画图工具,生成一幅黑白图像,并调用命令函数imread()输入图像,输入的图像是一个巨大的二维矩阵,利用MATLAB函数库中的fft2()命令对该矩阵进行二位离散傅立叶变换,得到图像的频谱,该频谱是一个复数矩阵,然后用取模函数abs()对该复数矩阵取模,得到振幅谱矩阵,利用函数fftshift()对取模后的矩阵进行频谱位移,这是因为变换后的二维矩阵的直流分量位于图像的周边角,该函数交换矩阵的1、3象限和2、4象限,使直流分量移到频谱中心,从而使FFT频谱可视效果与实际图像相吻合。最后利用imshow()函数将图像显示出来。
编写程序如下:

clear
a=imread('E:\1.bmp');
grid on
figure(1)
imshow(a,[])
afft=fft2(a);
aabs=abs(afft);
aabss=fftshift(aabs);
figure(2)
imshow(aabss,[])
colormap(gray);
colorbar
figure(3)
plot(aabss)
colormap(gray);
figure(4)
meshc(aabss)
maxx1=max(max(aabss));

输入黑白或灰度的衍射屏图像,得到输出的衍射图样和光强分布。

[此贴子已经被作者于2007-7-4 17:52:13编辑过]

搜索更多相关主题的帖子: 光学 metlab 强人 
2007-07-04 17:11
摩天居士
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-7-3
收藏
得分:0 
回复:(menglu)好像见过这几个程序的过几天看看我电...

好的,不胜感激

2007-07-05 18:43
摩天居士
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-7-3
收藏
得分:0 

一定有偿
要什么都做到

2007-07-07 19:03
快速回复:[求助]用metlab画光学图,强人进
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033506 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved