目录
1 技术指标1
2 基本原理1
2.1 单层光学薄膜1
2.2 多层光学薄膜及矩阵理论2
3 基于matlab的光学薄膜特性分析4
4 结论9
5 参考文献9
6 附录:基于matlab的光学薄膜特性分析源程序代码10
16
武汉理工大学《能力拓展训练》报告书
基于matlab的光学薄膜特性分析
1 技术指标
对光学薄膜的理论进行分析,从电磁理论出发分析单层膜和多层膜的反射和透射率特性;并分析各参数对其光学性能的影响;运用Matlab对单层介质薄膜和多层介质薄膜的光学特性进行仿真;编写可用于一般多层膜的图形用户界面,并利用该程序对几种典型的薄膜系统进行验证。
2 基本原理
光射到任何一个光学零件的表面上都要发生反射和折射,不同的光学系统对反射率和透射率有不同的要求.对于透射成像的光学系统,反射不仅降低了透过光学系统的能量,而且造成杂散光,降低系统的成像清晰度.而对于一个有多个镜片的光学系统,其反射损失更为可观.为了降低反射损失,需要在镜片上镀光学薄膜,是每个光学面的反射损失都降到约等于百分之一,甚至更小。
薄膜光学发展至今,已经形成一套比较完整的实用理论。本文将利用多光束的干涉理论和矩阵理论,并运用matlab对薄膜光学系统的光学性质做简要分析。
2.1 单层光学薄膜
折射率为的光学基底上镀上一层厚度为,折射率为的透明薄膜,就构成典型的单层光学薄膜结构。薄膜可以看成一块平行薄板,光在这个薄板上下表面发射和透射的光叠加将会发生多光束干涉。利用已有的结果,可得反射光叠加后的合震动的复振幅
(2-1-1)
式中,是薄膜表面上的反射振幅比,是下表面的反射振幅比,是两相邻光束之间的相位差
(2-1-2)
而反射率
(2-1-3)
且透射率和反射率的关系:。
2.2 多层光学薄膜及矩阵理论
图(a) 两个界面的多膜系统
下面根据电磁理论分析:
在界面1
(2-2-1)
由《电磁场与电磁波》H与E的关系得:,
取则
(2-2-2)
在界面2
(2-2-3)
在不考虑薄膜对光能的吸收时,,的关系如下:
(2-2-4)
平面波通过薄膜一次A,B两点的位相变化。
(2-2-5)
(2-2-6)
(2-2-7)
写成矩阵形式:
(2-2-8)
当膜系包含N层膜时,则有
(2-2-9)
整个膜系的特征矩阵。
令M的矩阵元为A,B,C,D即,则
(2-2-10)
膜系反射系数
(2-2-11)
膜系透射系数
(2-2-12)
反射率:,透射率:。
由两种不同介电常数()和厚度()的电磁材料所组成的一维周期性光学薄膜结构。利用传输矩阵计算光在介质薄膜。
图(b)一维周期性光学薄膜结构
本文中所选取的色散材料,如[11,12],LiF(模型中的A层)的折射率在范围内的关系为:
Si(模型中的B层)的折射率在同一波段为:
其中。
在本课程设计中取,则3.4770。
3 基于matlab的光学薄膜特性分析
matlab是一种以矩阵运算为基础的交互式程序语言,广泛应用于自动控制、数学运算、信号分析、航天工业和绘图等各行各业.本文使用Matlab计算膜系特征矩阵,进行数值的运算仿真研究与验证。
仿真模拟的光学特性matlab程序见附录。
图(c) 光学特性分析的GUI交互界面
图(d) 单膜反射率和透射率与入射波长的关系(正入射)
图(e) 单膜反射率和透射率与入射波长的关系(斜入射)
图(f) 多膜反射率和透射率与入射波长的关系(正入射)
图(g) 单膜反射率和透射率与入射波长的关系(斜入射)
图中,纵坐标表示反射率和透射率,其中,红实线表示反射率,蓝虚线表示透射率,二者之和等于1。横坐标则表示入射光的波长(um)。
从图中分别对比分析知,对于一个介质折射率和厚度固定等参数固定的薄膜系统,其反射率或透射率达到最大值的时候所对应的这一固定波长称为中心波长,当入射光偏离中心波长的时候,其反射率必定会相应的下降,因此,每一种具体的膜系,只对一定波长范围的光波才能有反射率。以上各图反射率最大值(接近于1)时所对应的波长范围称为反射带的宽度。
图(h)8层膜(偶数)系反射率和透射率与波长的关系
图(i)9层膜(奇数)系反射率和透射率与波长的关系
从上面两个图对比可知,在同一波长情况下,奇数层膜的反射率要比偶数层
反射率略高。这是因为,膜系第一层的折射率高于第二层折射率,如果膜系为奇数层,那么最后一层的折射率也是高反射率层。层数为时,。
犹豫,故可以获得更高的反射率。反之,膜系为偶数层时,达不到增加反射率的目的。
4 结论
由上述的计算公式可知,光学薄膜的特性计算在引入矩阵理论后成为一个相对简单的问题,只要给定每一层膜系的参数,多层膜就可以利用矩阵的连乘方便地求出在每一特定入射角和波长下的透射率、反射率等参数.许多计算机软件的出现,能方便进行自动数值计算,如matlab软件的应用,不仅能计算并保存数据,而且更好地调用资源,作图、仿真模拟使得研究清晰明了,易于操作理解,为光学薄膜的研究提供了有利的计算工具.因此,计算机软件的应用促进了光学薄膜的发展,它与传统的理论研究相辅相成,是理论应用与实践的有力保障,使光学薄膜的发展迈上了新的台阶.光学薄膜已经在光学技术发展的历史中创造了光辉的成绩,如今广泛地渗透到各个新型的科技领域.各种新型微结构的功能薄膜正在不断开发出来,并造福于人类.
5 参考文献
[1] 廖延彪.光学原理与应用.电子工业出版社.2006.10
[2] 蒙庆华,梁志铭,郑荣江. Matlab环境下多层光学薄膜的数值计算.广西师范学院学报.2010.09;27-03
6 附录:基于matlab的光学薄膜特性分析源程序代码
function varargout = untitled(varargin)
% UNTITLED M-file for untitled.fig
% UNTITLED, by itself, creates a new UNTITLED or raises the existing
% singleton*.
%
% H = UNTITLED returns the handle to a new UNTITLED or the handle to
% the existing singleton*.
%
% UNTITLED(CALLBACK,hObject,eventData,handles,...) calls the local
% function named CALLBACK in UNTITLED.M with the given input arguments.
%
% UNTITLED(Property,Value,...) creates a new UNTITLED or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before untitled_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to untitled_OpeningFcn via varargin.
%
% *See GUI Options on GUIDEs Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help untitled
% Last Modified by GUIDE v2.5 25-Aug-2011 12:50:11
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct(gui_Name, mfilename, ...
gui_Singleton, gui_Singleton, ...
gui_OpeningFcn, @untitled_OpeningFcn, ...
gui_OutputFcn, @untitled_OutputFcn, ...
gui_LayoutFcn, [] , ...
gui_Callback, []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before untitled is made visible.
function untitled_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to untitled (see VARARGIN)
% Choose default command line output for untitled
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes untitled wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = untitled_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,String) returns contents of edit1 as text
% str2double(get(hObject,String)) returns contents of edit1 as a double
input = str2num(get(hObject,String));
if (isempty(input))
set(hObject,String,0)
end
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,BackgroundColor,white);
else
set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor));
end
function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,String) returns contents of edit2 as text
% str2double(get(hObject,String)) returns contents of edit2 as a double
input = str2num(get(hObject,String));
if (isempty(input))
set(hObject,String,0)
end
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,BackgroundColor,white);
else
set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor));
end
function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,String) returns contents of edit3 as text
% str2double(get(hObject,String)) returns contents of edit3 as a double
input = str2num(get(hObject,String));
if (isempty(input))
set(hObject,String,0)
end
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,BackgroundColor,white);
else
set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor));
end
function edit4_Callback(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,String) returns contents of edit4 as text
% str2double(get(hObject,String)) returns contents of edit4 as a double
input = str2num(get(hObject,String));
if (isempty(input))
set(hObject,String,0)
end
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,BackgroundColor,white);
else
set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor));
end
function edit5_Callback(hObject, eventdata, handles)
% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,String) returns contents of edit5 as text
% str2double(get(hObject,String)) returns contents of edit5 as a double
input = str2num(get(hObject,String));
if (isempty(input))
set(hObject,String,0)
end
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function edit5_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit5 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,BackgroundColor,white);
else
set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor));
end
function edit6_Callback(hObject, eventdata, handles)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,String) returns contents of edit6 as text
% str2double(get(hObject,String)) returns contents of edit6 as a double
input = str2num(get(hObject,String));
if (isempty(input))
set(hObject,String,0)
end
guidata(hObject, handles);
% --- Executes during object creation, after setting all properties.
function edit6_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit6 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,BackgroundColor,white);
else
set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor));
end
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
%以下为计算模拟输出的主程序
n0=1;
n1 = get(handles.edit1,String);
n1=str2num(n1);
n2=get(handles.edit2,String);
n2=str2num(n2);
n=get(handles.edit6,String);
n=str2num(n);
theta1=get(handles.edit5,String);
theta1=str2num(theta1);
d1=get(handles.edit4,String);
d1=str2num(d1);
d1=d1*1e-6;
d2=get(handles.edit3,String);
d2=str2num(d2);
d2=d2*1e-6;
for lambda=1250:2350;
theta2=asin(n0*sin(theta1)/n1);
theta3=asin(n0*sin(theta2)/n2);
delta1=2*pi*n1*d1/cos(theta1)/lambda*1e9;
delta2=2*pi*n2*d2/cos(theta2)/lambda*1e9;
m=sqrt(144*pi^2*100);
eta0=n0*cos(theta1)/m;
eta1=n1*cos(theta2)/m;
eta2=n2*cos(theta3)/m;
M11=cos(delta1);
M12=-1i*sin(delta1)/eta1;
M13=-1i*eta1*sin(delta1);
M14=cos(delta1);
M1=[M11,M12;M13,M14];
M21=cos(delta2);
M22=-1i*sin(delta2)/eta2;
M23=-1i*eta2*sin(delta2);
M24=cos(delta2);
M2=[M21,M22;M23,M24];
M=M1*M2;
M=M^n;
A=M(1,1);
B=M(1,2);
C=M(2,1);
D=M(2,2);
r=(A*eta0+B*eta0^2-C-D*eta0)/(A*eta0+B*eta0^2+C+D*eta0);
R=r*r;
t=2*eta0/(A*eta0+B*eta0^2+C+D*eta0);
T=t*t;
s=lambda-1250+1;
k(1,s)=R;
g(1,s)=T;
end
lambda=1250:2350;
axes(handles.axes1);
plot(lambda,k,r,lambda,g,-.b);
guidata(hObject, handles);
% --- Executes on button press in pushbutton3.
function pushbutton3_Callback(hObject, eventdata, handles)
% hObject handle to pushbutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
value1=get(handles.edit1,string);
set(handles.edit1,string,);
value1=get(handles.edit2,string);
set(handles.edit2,string,);
value1=get(handles.edit6,string);
set(handles.edit6,string,);
value1=get(handles.edit3,string);
set(handles.edit3,string,);
value1=get(handles.edit4,string);
set(handles.edit4,string,);
value1=get(handles.edit5,string);
set(handles.edit5,string,);
注:此程序包含GUI的运用框架结构。
展开阅读全文