卫卫 发表于 2012-6-7 00:53:31

求用MATLAB仿真F-P滤光片的程序

RT,感觉自己编程思路应该没错,但仿真出来的透射率结果完全不对。按照传输矩阵法来设计的。

tfc 发表于 2012-6-7 07:55:08

一个是用的公式对不对,一个是你矩阵编程对不对,人家软件已经很成熟了,你干嘛还重复做别人已经做过的呢?
你编程语言是什么?

卫卫 发表于 2012-6-7 10:33:37

tfc 发表于 2012-6-7 07:55 static/image/common/back.gif
一个是用的公式对不对,一个是你矩阵编程对不对,人家软件已经很成熟了,你干嘛还重复做别人已经做过的呢? ...

是做的毕业设计呀,弄了几天波形图还是不对,我用的代码如下
clear all;
n0=1;na=1.45;nb=2.05;ns=1.52%折射率
V=;%基板折射率矩阵
n=input('输入1光学薄膜的周期数:');
m=input('输入2光学薄膜的周期数:');
theta1=input('输入入射角:');
da=(390/1.45)*1e-9;
db=(390/3.16)*1e-9;
daa=(2*390/1.45)*1e-9
for lambda=1480:1600;
theta2=asin(n0*sin(theta1)/na);%介质A中的折射角
theta3=asin(n0*sin(theta1)/nb);%介质B中的折射角
deltaa=2*pi*na*da*cos(theta2)/lambda*1e9;
deltab=2*pi*nb*db*cos(theta3)/lambda*1e9;%由于波长取值不是SI单位制,此处化为SI单位制
deltaa2=2*pi*na*daa*cos(theta2)/lambda*1e9;
eta0=n0*cos(theta1);
etaa=na*cos(theta2);
etab=nb*cos(theta3);
%传输矩阵特征参数
MA1=cos(deltaa);
MA2=i*sin(deltaa)/etaa;
MA3=i*etaa*sin(deltaa);
MA4=cos(deltaa);
MA=;%介质A中传输矩阵
MAA1=cos(deltaa2);
MAA2=i*sin(deltaa2)/etaa;
MAA3=i*etaa*sin(deltaa2);
MAA4=cos(deltaa2);
MAA=;%2L层
MB1=cos(deltab);
MB2=i*sin(deltab)/etab;
MB3=i*etab*sin(deltab);
MB4=cos(deltab);
MB=;%介质B中传输矩阵
O=MA*MB;%介质A和介质B等效层的传输矩阵LH
P=MB*MA;%HL
Q=P^n*MB*MAA*MB*O^n;
U=P^m*MB*MAA*MB*O^m;
M=(Q*MA*U*MA*U*MA*Q)*V;% n层光学薄膜总的传输矩阵
B=M(1,1);
C=M(2,1);
r=(n0*B-C)/(n0*B+C);
R=r*r';
T=(4*n0*ns)/((n0*B+C)*((n0*B+C)'));
s=lambda-1480+1;%对选取的数据点进行编号,以方便下一步存储
k(1,s)=T;%建立存储数据的向量,以方便下一步作图
end
lambda=1480:1600;
plot(lambda,k);
xlabel('\lambda/nm');
ylabel('T');
感觉矩阵设定,公式也没什么错啊,自己看不出来,我先考虑垂直入射的所以有关折射角那块的cos值都是1

卫卫 发表于 2012-6-7 10:58:53

tfc 发表于 2012-6-7 07:55 static/image/common/back.gif
一个是用的公式对不对,一个是你矩阵编程对不对,人家软件已经很成熟了,你干嘛还重复做别人已经做过的呢? ...

麻烦给我看下 万分感谢

legendlyy 发表于 2012-6-7 11:03:04

i=sqrt(-1);

卫卫 发表于 2012-6-7 11:27:59

出来的结果就是个1560NM左右范围的三角波,= =

卫卫 发表于 2012-6-7 17:58:11

求帮助 求帮助

tfc 发表于 2012-6-8 10:24:59

我还是没法帮到你,改程序一定要会这种编程语言,一步步调试才行,我投降,也许你把光学原来的公式,和你要怎么做都详细描述清楚,再加你的程序,拿到MATLAB编程论坛,或者C语言论坛,估计他们有办法,因为他们对算法相当精通。如果你想自己再调试,建议你调试时的光学厚度大于1600nm的6个光学厚度以上,并且列出每nm的T%表,便与你追踪,容易看出变化。

otxtc 发表于 2012-6-8 15:48:35

把你的思路用伪代码写一遍,这样大家就都能看懂了。
1. 先简化一下, 没有膜层, 或膜层厚度为0,看结果对不对。
不用画图,看数据就知道了。
2. 加单层膜,折射率 取1.0, 再算。
3.再改折射率、加层、加角度、加输出图形。再添加你想要的花样。
//话说回来,必要真不大,不过练手熟悉一下光学薄膜计算过程倒也好玩。

卫卫 发表于 2012-6-12 19:58:01

谢谢各位了,基本找到问题所在了,是步长相对带宽取的太大了,我取的默认数值1了= =

huangjingyi 发表于 2013-6-22 17:45:01

好难啊。。。。
页: [1]
查看完整版本: 求用MATLAB仿真F-P滤光片的程序