激光原理课程设计平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现.doc_第1页
激光原理课程设计平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现.doc_第2页
激光原理课程设计平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现.doc_第3页
激光原理课程设计平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现.doc_第4页
激光原理课程设计平行平面腔自再现模FoxLi数值迭代解法及MATLAB实现.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华南理工大学广州学院电气工程系生产实习报告 激光原理课程设计题目:方形镜平行平面腔自再现模fox-li 数值迭代解法及matlab实现院 系 理学院 专业班级 0910101 学生姓名 指导教师 提交日期 2012年4 月 15 日 16目 录一、设计目的1二、设计要求和设计指标1三、设计内容13.1 fox-li平行平面腔的迭代解法13.2 matlab实现33.2.1 迭代解法的过程33.2.2 程序实现43.2.3 自再现模形成的判断63.3 gui界面的制作8四、本设计改进建议9五、设计感想9六、主要参考文献9附录激光原理课程设计一、设计目的为了加深对激光原理中fox-li平行平面腔的迭代解法的理解,学习matlab的使用,锻炼运用数值方法解决专业问题的能力。二、设计要求和设计指标在matlab用fox-li平行平面腔的迭代解法求得激光器腔镜面上的光场分布。求出距离镜面中点为x处的光场的振幅a和相位p,并作出二维图像。在得出的一维图像的基础上作出镜面上光强的二维分布。三、设计内容3.1 fox-li平行平面腔的迭代解法谐振腔是激光器必备条件之一,它使激光反复通过增益物质,从而实现光的自激振荡。在激光的发展史上最早提出的是平行平面腔,又称为fp腔,它由两块平行平面反射镜组成,第一台红宝石激光器的谐振腔就是用它来做成的。对于开放式光腔,镜面上稳态场分布的形成可以看成是光在两个界面间往返传播的结果。因此,两个界面上的场必然是互相关联的:一个镜面上的场可以视为由另一个镜面上的场所产生,于是求解镜面上稳态场的分布问题就归结为求解一个积分方程。考虑在开腔中往返传播的一列波。设初始时刻在镜i上有某一个场分布,则当波在腔中经第一次渡越而到达镜ii时,将在镜ii上形成一个新的场分布,场经第二次渡越后又将在镜i上形成一个新的场分布。每次渡越时,波都将因为衍射损失一部分能量,并引起能量分布变化,如此重复下去由于衍射主要是发生在镜的边缘附近,因此在传播过程中,镜边缘附近的场将衰落得更快,经多次衍射后所形成的场分布,其边缘振幅往往都很小(与中心处比较),具有这种特征的场分布受衍射的影响也将比较小。可以预期:在经过足够多次渡越之后,能形成这样一种稳态场:分布不再受衍射的影响,在腔内往返一次后能够“再现”出发时的场分布,即实现了模的“自再现”,具体过程图1所示:图1 开腔中自再现模的形成光学中的惠更斯菲涅尔原理是从理论上分析衍射问题的基础,该原理的严格数学表示是菲涅尔基尔霍夫衍射积分。设已知空间任意曲面s上光波场地振幅和相位分布函数为,由它所要考察的空间任一点p处场分布为,二者之间有以下关系式:式中,为与连线的长度,为s面上点处的法线和上述连线之间的夹角,为s面上的面积元,k为波矢的模。而对于方形镜平行平面镜将按,的幂级数展开,当满足和时从而得到将上式分离变量。令得到方形镜中 。3.2 matlab实现3.2.1 迭代解法的过程本文采用foxli数值迭代法得到了了镜面上自再现模在x方向的分布并推广到整个镜面,最终动态显示每次渡越镜面上光场分布。虽然是复数积分,但其和实数积分实现方法相同,即取一定步长,用矩形面积的和代替函数的定积分。下面是程序框图:3.2.2 程序实现源程序:clear,clcglobal steps l k alamda=input(波长lamda=);l=input(腔长l=);a=input(镜长a=);n=input(渡越次数n=);k=2*pi/lamda; %波失steps=500; %步长x=linspace(-a,a,steps);u_=ones(1,steps);for m=1:n for mm=1:steps u0(mm)=qu(x(mm),u_); end; u_=u0/max(abs(u0);endsubplot(2,1,1)plot(x,abs(u0)/abs(u0(steps/2)xlabel(x);ylabel(相对振幅);angle_u0=angle(u0)/pi*180;angle_u0=angle_u0-angle_u0(steps/2);subplot(2,1,2)plot(x,angle_u0)xlabel(x);ylabel(相对相位);function y=qu(x,u)global steps l k ax_=linspace(-a,a,steps);step_length=2*a/(steps-1);y=sqrt(1i/l*exp(-1i*k*l)*sum(exp(-1i*k/2/l*(-x_+x).2).*u)*step_length;在菲涅耳数为6.25,渡越次数为1的时候做出下图:在菲涅耳数为6.25,渡越次数为1的时候做出下图:3.2.3 自再现模形成的判断画出每次渡越在x=0.5a处的相对振幅(n80),如下图:图中连续的30个点中纵坐标最大值和纵坐标最小值的差可以作为自再现模是否形成的标志,认为x=a/2处振幅大小基本不变了就是自再现了。由此可以写判据判断自再现模在第几次渡越形成,并以此作为循环结束的标志。下面程序中写了的判据:在x=a/2处连续的30次渡越振幅最大值与最小值之差小于eps_u=0.01。用该判据得到渡越188次后可认为是自再现模。实现方法是这样的:设一次积分将计算steps个点,先迭代30次,用个30*steps的矩阵把这30次的结果储存下来,取出该矩阵的第steps/4列(对应x=-a/2处),判断该列最大值与最小值之差是否小于0.01,是则结束判断,第30次就自再现了,否则,计算第31次的振幅,用31次的结果去覆盖矩阵中的第一行数据,再取出该矩阵的第steps/4列,判断该列最大值与最小值之差是否小于0.01,是则结束判断,第31次就自再现了,否则,计算第32次的振幅程序:clear,clcglobal steps l k alamda=input(波长lamda=);l=input(腔长l=);a=input(镜长a=);eps_u=input(精度=);k=2*pi/lamda;steps=500;x=linspace(-a,a,steps);u_=ones(1,steps);for m=1:30 for mm=1:steps u0(mm)=qu(x(mm),u_); end; u_=u0/max(abs(u0); u30(m,:)=u0; endflag=1; %自再现标志位u30_flag=1; %判据矩阵维数标记为n=30;while(flag=1) if max(abs(u30(:,steps/4)-min(abs(u30(:,steps/4)eps_u %steps/4为x=-a/2处,判据为连续30次渡越中最大振幅减去最小振幅小于eps_u flag=0; else n=n+1; for mm=1:steps u0(mm)=qu(x(mm),u_); end; u_=u0/max(abs(u0); if u30_flag=31 u30_flag=1; end u30( u30_flag,:)=u0; u30_flag=u30_flag+1; endendnsubplot(2,1,1)plot(x,abs(u0)/abs(u0(steps/2)xlabel(x);ylabel(相对振幅);angle_u0=angle(u0)/pi*180;angle_u0=angle_u0-angle_u0(steps/2);subplot(2,1,2)plot(x,angle_u0)xlabel(x);ylabel(相对相位);function y=qu(x,u)global steps l k ax_=linspace(-a,a,steps);step_length=2*a/(steps-1);y=sqrt(1i/l*exp(-1i*k*l)*sum(exp(-1i*k/2/l*(-x_+x).2).*u)*step_length;3.3 gui界面的制作由于制作了多种图像显示方式,为了方便使用,设计了如下图的gui界面:在gui中可以动态地显示振幅和相位在x方向以及在镜面上相对分布。程序见附录。四、本设计改进建议由于时间有限,只讨论了方形镜平行平面腔。而且在计算积分的时候运用了循环的嵌套,使得计算效率比较低。相位分布图像由于matlab函数问题有一段会变得很大(略小于360,其实应该为0)。五、设计感想通过这个课程设计收获主要有两点:一是练习了matlab软件的使用,学会了一些用matlab做光学仿真的方法;二是更深入理解了激光谐振腔在激光器中的地位和作用,巩固了课本上的知识。六、主要参考文献1 周炳琨. 激光原理(第六版) m . 北京: 国防工业出版社, 2009.2 a.g fox,tingye li. resonant modes in a maser interferometer. j.bellsystem technology, 1961, 40: 453-488.附录gui程序:function varargout = laser_gui(varargin)% laser_gui m-file for laser_gui.fig% laser_gui, by itself, creates a new laser_gui or raises the existing% singleton*.% h = laser_gui returns the handle to a new laser_gui or the handle to% the existing singleton*.% laser_gui(callback,hobject,eventdata,handles,.) calls the local% function named callback in laser_gui.m with the given input arguments.% laser_gui(property,value,.) creates a new laser_gui or raises the% existing singleton*. starting from the left, property value pairs are% applied to the gui before laser_gui_openingfcn gets called. an% unrecognized property name or invalid value makes property application% stop. all inputs are passed to laser_gui_openingfcn via varargin.% *see gui options on guides tools menu. choose gui allows only one% instance to run (singleton).% see also: guide, guidata, guihandles % edit the above text to modify the response to help laser_gui % last modified by guide v2.5 21-apr-2012 16:07:57 % begin initialization code - do not editgui_singleton = 1;gui_state = struct(gui_name, mfilename, . gui_singleton, gui_singleton, . gui_openingfcn, laser_gui_openingfcn, . gui_outputfcn, laser_gui_outputfcn, . gui_layoutfcn, , . gui_callback, );if nargin & ischar(varargin1) gui_state.gui_callback = str2func(varargin1);end if nargout varargout1:nargout = gui_mainfcn(gui_state, varargin:);else gui_mainfcn(gui_state, varargin:);end% end initialization code - do not edit % - executes just before laser_gui is made visible.function laser_gui_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 laser_gui (see varargin) % choose default command line output for laser_guihandles.output = hobject; % update handles structureguidata(hobject, handles); % uiwait makes laser_gui wait for user response (see uiresume)% uiwait(handles.figure1);axes(handles.axes3)logo=imread(hit.jpg);imshow(logo) % - outputs from this function are returned to the command line.function varargout = laser_gui_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 structurevarargout1 = handles.output; function wavelength_callback(hobject, eventdata, handles)% hobject handle to wavelength (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 wavelength as text% str2double(get(hobject,string) returns contents of wavelength as a double % - executes during object creation, after setting all properties.function wavelength_createfcn(hobject, eventdata, handles)% hobject handle to wavelength (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 & isequal(get(hobject,backgroundcolor), get(0,defaultuicontrolbackgroundcolor) set(hobject,backgroundcolor,white);end function length_callback(hobject, eventdata, handles)% hobject handle to length (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 length as text% str2double(get(hobject,string) returns contents of length as a double % - executes during object creation, after setting all properties.function length_createfcn(hobject, eventdata, handles)% hobject handle to length (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 & isequal(get(hobject,backgroundcolor), get(0,defaultuicontrolbackgroundcolor) set(hobject,backgroundcolor,white);end function area_callback(hobject, eventdata, handles)% hobject handle to area (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 area as text% str2double(get(hobject,string) returns contents of area as a double % - executes during object creation, after setting all properties.function area_createfcn(hobject, eventdata, handles)% hobject handle to area (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 & isequal(get(hobject,backgroundcolor), get(0,defaultuicontrolbackgroundcolor) set(hobject,backgroundcolor,white);end function times_callback(hobject, eventdata, handles)% hobject handle to times (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 times as text% str2double(get(hobject,string) returns contents of times as a double % - executes during object creation, after setting all properties.function times_createfcn(hobject, eventdata, handles)% hobject handle to times (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 & isequal(get(hobject,backgroundcolor), get(0,defaultuicontrolbackgroundcolor) set(hobject,backgroundcolor,white);end % - executes on button press in pushbutton2.function pushbutton2_callback(hobject, eventdata, handles)% hobject handle to pushbutton2 (see gcbo)% eventdata reserved - to be defined in a future version of matlab% handles structure with handles and user data (see guidata) global steps l k alamda=str2num(get(handles.wavelength,string);l=str2num(get(handles.length,string);a=str2num(get(handles.area,string);n=str2num(get(handles.times,string);k=2*pi/lamda;steps=500;x=linspace(-a,a,steps);u_=ones(1,steps);for m=1:n for mm=1:steps u0(mm)=qu(x(mm),u_); end axes(handles.axes1) plot(x,abs(u0)/abs(u0(steps/2) axis(-a a 0 1.3) angle_u0=angle(u0)/pi*180; angle_u0=angle_u0-angle_u0(steps/2); axes(handles.axes2) plot(x,angle_u0) u_=u0/max(abs(u0);end % - executes on button press in pushbutton3.function pushbutton3_callback(hobject, eventdata, handles)% hobject handle to pushbutton3 (see gcbo)% even

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论