毕业设计论文_基于MATLAB的SMITH圆图的设计.doc_第1页
毕业设计论文_基于MATLAB的SMITH圆图的设计.doc_第2页
毕业设计论文_基于MATLAB的SMITH圆图的设计.doc_第3页
毕业设计论文_基于MATLAB的SMITH圆图的设计.doc_第4页
毕业设计论文_基于MATLAB的SMITH圆图的设计.doc_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

前 言smith圆图是p.h.smith于1939年在贝尔实验室发明的,它主要用于计算微波网络的阻抗、导纳及网络阻抗匹配设计,还可用于设计微波元器件。smith圆图软件不仅适用于微波工程设计,亦可用于电磁场、微波技术及天线与电波传播等课程相关内容的教学。 多年来,smith圆图作为一个不可缺少的设计工具,在高频和微波领域发挥了重要作用。掌握了smith圆图的原理和特性,并熟悉其阻抗匹配技术,将使设计人员的设计能力大为加强。尽管目前微波电路cad技术已进入了设计领域,人们仍大量使用圆图作为设计工具。究其原因,一是因为现有的大部分cad软件在设计时要求用户提供初始电路(包括拓扑和元件值),因此仍需借助于smith圆图进行图解设计;另一方面,对于窄带情形,利用圆图通常可直接完成设计不 必进一步进行优化而且目前不少大型软件价格昂贵,cad技术尚未普及,因而一款smith圆图工具的设计仍然是非常有必要的。微波网络的正弦稳态分析含有复数计算,运算十分繁琐和耗时。在计算机运算速度和内存不够发达以前,图解分析法得到长足发展,其中多年来应用最广的是smith圆图。在计算微波传输线输入阻抗、导纳及阻抗匹配等问题时,它不仅能避开繁琐的公式及复数运算,使工程设计中相关计算简单便捷,而且图解过程物理概念清晰,所得结果直观形象。随着计算机技术的飞速发展,图解法在计算精度上的固有缺陷日益显现,因为,圆图的计算精度取决于圆图中必须有足够的圆周数,而过多的圆周会导致图线过于密集,不便将阻抗、反射系数、行波系数及电长度等相关数据从图上直接读出。通过对圆图构成的基本原理和应用问题的分析,利用现代计算机技术可以解决圆图计算精度等方面存在的问题,为此设计的smith圆图软件既保留圆图计算直观、便捷的大众性,又满足工程设计中相关参数的计算精度。在计算机应用日益普及的今天,该软件特别适合电磁场、微波技术与天线等领域的教学和工程设计相关参数计算使用。 目 录摘 要4第章 概述 5第章 smith圆图软件构成的基本原理 72.1 阻抗圆图软件构成的基本原理72.3 圆图软件的设计特点 82.3 圆图的基本应用10第章 仿真与调试113.1 调试113.2 仿真123.3 仿真结果验算13第章 设计小结 14参考文献 15附录 源程序代码17基于matlab语言的smith圆图软件设计摘要:smith圆图是从事微波工程实验和天线设计的重要工具。应用matlab作为开发平台研制的smith圆图应用软包,使圆图的应用和计算变得更加方便、快捷,该软件具有用户图形界面,简单易用,而且计算精度高。关键词: matlab;gui;smith圆图; 第1章 概述smith圆图的基本在于以下的算式: 式中的代表其线路的反射系数,即阻抗匹配时, s矩阵里的s11,zl是归一化负载抗,即zl / z0。其中,zl是电路的负载值z0是传输线的特性阻抗值,通常会使用50。图1-1中的圆形线代表电阻抗力的实数值,即电阻值,中间的横线与向上和向下散出的线则代表电阻抗力的虚数值,即由电容或电感在高频下所产生的阻力,当中向上的是正数,向下的是负数。圆图图最中间的点(1+j0)代表一个已匹配的电阻数值(zl),同时其反射系数的值会是零。图表的边缘代表其反射系数的长度是1,即100%反射。在图边的数字代表反射系数的角度(0-180度)和波长(由零至半个波长)。有一些图表是以导纳值来表示,把上述的阻抗值旋转180度即可。自从有了计算机后,此种图表的使用率随之而下,但仍常用来表示特定的资料。对于就读电磁学及微波电子学的学生来说,在解决课本问题仍然很实用,因此史密斯图至今仍是重要的教学用具。 本设计是运用matlab编写smith圆图仿真程序,整个圆图软件分为用户图形界面模块、圆图计算模块、画图演示模块。圆图计算模块分为输入阻抗计算、反射系数计算、行波系数、驻波比计算以及整个smith圆图;画图演示模块分为等归一化电阻圆、等归一化电抗圆、反射系数圆;确定阻抗值在圆图上的位置、圆图的基本应用、求输入阻抗及其在圆图上的位置。具体实现:1、 本程序能读出圆图上的任意一点对应的各个值,并能够根据输入的归一化阻抗画出相应的圆图、显示对应的值;2、 当在matlab环境下运行程序后,会显示完整的圆图工具界面,在整个界面的右半部分画出完整的smith圆图;3、 当在“输入数据”文本框里分别输入负载阻抗的实部及虚部,点击“确定”按钮,会在绘图区域内画出圆图,并显示相应的阻抗、反射系数、驻波比、行波系数的值。第2章 smith圆图软件构成的基本原理2.1 阻抗圆图软件构成的基本原理 圆图运算的基础是反射系数 ( =u+jv ) 。smith圆图由反射系数平面上的等归一化反射系数圆族、等归一化电阻圆族、等归一化电抗圆族构成。利用已知的归一化阻抗zl=r+jx,实现等反射系数圆族程序如下: r=r;x=x;%输入归一化阻抗 u= ( r2+x2-1) / ( r2+23r+1+x2) ; v= ( 23x) / ( r2+23r+1+x2) ; tr=23pi3 ( 00.011) ; =sqrt (u2+v2) ;%等反射系数圆的半径plot ( r3cos ( tr) ,r3sin ( tr) ,y ) %画等反射系数圆实现等归一化电阻圆族程序如下:for rr=1/ ( 1+r) ;cr=1-rr;%画电阻圆 plot ( cr+rr3cos ( tr) ,rr3sin ( tr) ,m )实现等归一化电抗圆族程序如下:forx=x;%画电抗圆 rx=1/x;cx=rx; iftxpi; plot ( 1-rx3sin ( tx) ,cx-rx3cos ( tx) ,m)else上述作图在u为横坐标和v为纵坐标的复平面中,r=常数的曲线是一系列的电阻圆,x=常数的曲线为一系列的电抗圆。需要指出,圆图是用极坐标来表示反射系数的。因为|=常数的等反射系数圆是以原点 ( u=0,v=0) 为圆心,以 |为半径,而相角=常数的曲线则为经过坐标原点的一系列直线。为避免混淆,一般只画出由已知的归一化阻抗zl=r+jx对应的代表大小的同心圆和代表相角的直线,但计算所得的电长度等参数以菜单形式给出。由上述程序,根据需要容易画出相应圆图。 图2-1 smith圆图软件主界面2.2 圆图软件的设计特点 圆图软件设计要求计算结果以图形和数据并行输出,处理包括复数的矩阵运算。为使程序代码简单,执行运算速度快,计算精度高,选择matlab软件作为设计技术平台较为理想。该软件数学表示、函数集丰富且功能强大、良好的用户界面以及许多函数本身会绘制图形且自动选取坐标刻度等显著优点,特别适用于大量计算,因此smith圆图软件选择matlab语言来编写。在matlab中句柄图形有一定的优先级,我们设计的程序也是按照这样的顺序进行的,如图2-2所示。在这个框架中,最高级的是主界面,它是下面所有界面句柄的父。然后,从主界面上连接到下一层界面中,上一级为下一级的父,每级间通过回调来实现连接和数据传递。图2-2圆图软件程序结构框图 matalab将图形窗口 ( figure ) 、标题 ( title ) 、文本( text ) 、坐标轴 ( axes) 、菜单 ( menu) 、控制框 ( uicontrol )等均作为对象处理,并且有丰富的对象属性,只要利用get,set,reset,delet,gco,findobj等函数即可方便地操作这些图形对象。软件主页图形界面由圆图和主菜单按钮组成。界面比较简洁,窗口中仅有固定的图形和菜单,按任意菜单键即可进入相关计算。菜单的设计很简单,只要利用figure,title和text,设置相应的属性即可。为便于使用,主菜单均使用按钮,按下按钮即弹出相应的输入框,主要用到控制框对象中的按钮类型。输入框格式与一般windows中的输入框格式基本相同,上面为各输入文本编辑条,下边有“确定”按钮,只是按钮相联系的功能函数不同,输入内容也不同。整个输入框是一个特殊的图形窗口,其中输入编辑条由unicontrol对象中的可编辑文本框 ( edit ) 类型实现。另外,这里的“确认”按钮,由于回调函数需要获得输入文本的内容,实现比较复杂, 要利用执行字符串命令 ( eval ) 或执行字符串函数 ( feval )。 基于上述设计目标,利用matlab强大的作图功能容易画出完整的smith圆图。整个圆图软件分为用户图形界面模块、圆图计算模块、画图演示模块。上述3大模块又进一步分解,其中用户图形界面模块分为:主页、主菜单;圆图计算模块分为反射系数计算、单支节匹配计算、输入阻抗计算以及整个smith圆图;画图演示模块分为等归一化电阻圆、等归一化电抗圆、反射系数圆等;确定阻抗值在圆图上的位置、圆图的基本应用、求输入阻抗及其在圆图上的位置以及单支节匹配等问题。2.3 圆图的基本应用 圆图是从事天线和微波工程设计的重要计算工具之一。应用圆图软件进行工程计算,既保留圆图简便直观、物理概念清晰等图解法固有的优点,又能保证设计计算必要的精确度,主要用于以下几类计算: 由归一化阻抗求电压反射系数和电压驻波系数以及相应的电长度等,这类问题可由反射系数模块解决; 单支节匹配等微波网络匹配设计及微波元器件设计计算等由单支节匹配模块实现; 由负载阻抗根据移动的电长度计算输入阻抗、导纳或逆运算,计算微波传输线上umax 和umin 的位置等,这些问题可由输入阻抗计算模块解决。第3章 仿真与调试3.1 调试(1) 运行matlab软件,在该环境下新建编辑器文件,输入要调试的smith圆图工具实现的程序;(2) 保存好该文件之后,点击“debug”菜单中的“run”命令对程序进行调试,如果提示有错误提示,改正之后重复调试,直至没有错误为止;(3) 改正所有的错误之后,运行,得到预期设计的smith圆图软件界面,如图3-1所示:图3-1 调试结果3.2 仿真(1)在用户界面的“输入数据”栏里分别输入负载阻抗的实部与虚部(仿真时输入实部为50,虚部为0),如图3-2所示:图3-2 输入负载阻抗(2)点击“确定按钮”,界面上显示输出数据:负载导纳、驻波比、反射系数和行波系数的数值,同时在绘图区域画出其归一化阻抗圆图。分别如图3-3及图3-4所示:图3-3 输出数据 图3-4 圆图3.3 仿真结果验算 负载导纳y:y=1/r=1/(50+j*0)=0.02 驻波比:=z0*z0/zl (zl=r=50)=50*50/50=50 反射系数:=(-1)/(+1) =49/50=0.960784 行波系数k: k=1/=1/50=0.02由上述分析可知,仿真结果符合定义,结果正确!第4章 设计小结由于我们微波技术的课程只有短短9周的学习时间,因而所学到的知识也是较为肤浅的,因此,这门课程设计对我而言既是深入了解微波技术专业知识的机遇,同时也是一个挑战。通过本次课程设计,在编程过程中对smith圆图的有关知识进行了很好的复习和掌握。由初步的只能画出简单的圆图,得到对应的电抗、导纳的值到可以通过电抗、导纳的值画出相应的smith 圆图。而且在程序的编写及调试过程中,对matlab的知识也进行了很好的运用与学习。开始时我觉得对smith圆图知识的掌握还可以,由于没有专门地去学,因而在matlab软件的应用上有所困难。最后我是在相关专业同学的指点及自己的摸索下才比较完整的完成该软件的设计。该软件能实现smith圆图软件的基本功能,不足之处也存在着,比如要在分析传输线理论时会有所欠缺;另外界面不够美观、较为单一,放大镜功能也没有能够加进。我觉得以后可以多进行类似的课程设计,给我们以足够的实践空间,从而借以加深我们对所学知识的理解和掌握。参考文献1刘志学. 导抗圆图计算和广播电视网络传输匹配设计 中国有线电视。20042 刘学观,郭辉萍. 微波技术与天线(第二版) 西安:西安电子科技大学出版社. 20063 乔晓华. 基于matlab语言的smith圆图软件设计. 中国有线电视. 20034 车晴. 电子系统仿真与matlab 北京:北京广播学院出版社.2000附录部分源程序代码:23function varargout = smith(varargin)%smith m-file for smith.fig% smith, by itself, creates a new smith or raises the existing% singleton*.% h = smith returns the handle to a new smith or the handle to% the existing singleton*.% smith(property,value,.) creates a new smith using the% given property value pairs. unrecognized properties are passed via% varargin to smith_openingfcn. this calling syntax produces a% warning when there is an existing singleton*.% smith(callback) and smith(callback,hobject,.) call the% local function named callback in smith.m with the given input% arguments.% *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 smith% last modified by guide v2.5 12-jun-2009 14:40:47% begin initialization code - do not editgui_singleton = 1;gui_state = struct(gui_name, mfilename, . gui_singleton, gui_singleton, . gui_openingfcn, smith_openingfcn, . gui_outputfcn, smith_outputfcn, . gui_layoutfcn, , . gui_callback, );if nargin & ischar(varargin1) gui_state.gui_callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_state, varargin:);else gui_mainfcn(gui_state, varargin:);end% end initialization code - do not edit% - executes just before smith is made visible.function smith_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 unrecognized propertyname/propertyvalue pairs from the% command line (see varargin)global phaseangle max grconstant = linspace(0,10,5);phaseangle = linspace(0,2*pi,50);unitgamma = exp(j*phaseangle);%plot the unit circle in the complex planehold on;plot(real(unitgamma),imag(unitgamma),r);%set(gcf,position,0 0 1280 990);axis squarezoom onaxis(-1.1 1.1 -1.1 1.1);max=2001;bound2=0;bound3=0;min_bound1=0;min_bound2=0;max_bound2=0;h=0;word=0;gr = linspace(-1,1,max);hold on;interval = .01:.01:.2,.22:.02:.5,.55:.05:1,1.1:.1:2,2.2:.2:5,6:10,12:2:20,30:10:50;interval2= .01:.01:.5,.55:.05:1,1.1:.1:2,2.2:.2:5,6:10,12:2:20,30:10:50;%plot real axisplot(gr, zeros(1,length(gr),r);%equations were derived using the symbolic toolbox as follows%solve(r=(1-gr2-gi2)/(1-gr)2+gi2),gi)%bound was derived as follows%solve(1/(r+1)*(-(r+1)*(r-2*r*gr+r.*gr2-1+gr2)(1/2)=0,gr)for r = interval2, min_bound1 = (r-1)/(r+1); if(r.2) if(mod(r,.1)=0) max_bound = (-1+22+r2)/(22+r2+2*r+1); elseif(mod(r,.02)=0) max_bound = (-1+.52+r2)/(.52+r2+2*r+1); else max_bound = (-1+.22+r2)/(.22+r2+2*r+1); if(r=.05 | (r.149) min_bound2 = (-1+.52+r2)/(.52+r2+2*r+1); max_bound2 = (-1+12+r2)/(12+r2+2*r+1); end end elseif(r1) if(mod(r,.2)=0) max_bound = (-1+52+r2)/(52+r2+2*r+1); elseif(mod(r,.1)=0) max_bound = (-1+22+r2)/(22+r2+2*r+1); elseif(r=.25 | r=.35 | r=.45) temp = (-1+.52+r2)/(.52+r2+2*r+1); min_bound2 = max(min_bound1, temp); max_bound = (-1+12+r2)/(12+r2+2*r+1); elseif(r.5) max_bound = (-1+.52+r2)/(.52+r2+2*r+1); else max_bound = (-1+12+r2)/(12+r2+2*r+1); end elseif(r2) max_bound = (-1+52+r2)/(52+r2+2*r+1); else if(mod(r,.2)=0) max_bound = (-1+52+r2)/(52+r2+2*r+1); else max_bound = (-1+22+r2)/(22+r2+2*r+1); end end elseif(r10) if(mod(r,2)=0) max_bound = (-1+202+r2)/(202+r2+2*r+1); else max_bound = (-1+102+r2)/(102+r2+2*r+1); end else if(r=10|r=20) max_bound = (-1+502+r2)/(502+r2+2*r+1); elseif(r=50) max_bound = 1; elseif(r20) max_bound = (-1+202+r2)/(202+r2+2*r+1); else max_bound = (-1+502+r2)/(502+r2+2*r+1); end end index = ceil(min_bound1+1)*(max-1)/2+1); actual_value = gr(index); if(actual_valuemax_bound) index = index - 1; end min2 = ceil(min_bound2+1)*(max-1)/2+1); actual_value = gr(min2); if(actual_valuemin_bound2) min2 = min2 + 1; end max2 = ceil(max_bound2+1)*(max-1)/2+1); actual_value = gr(max2); if(actual_value.2 & r.5 & (mod(r,.02)=0)if(r=1) color = r; else color =b; end plot(gr(min:index),r_l_a(1:index-min+1),color,gr(min:index), r_l_b(1:index-min+1),color); if(r=1) if(mod(r,1)=0) word = num2str(r) .0; else word = num2str(r); end if(mod(r,.1)=0) set(text(gr(min),0,word),rotation,90,horizontalalignment,left,verticalalignment,bottom); end elseif(r=2) if(mod(r,.2)=0) if(mod(r,1)=0) word = num2str(r) .0; else word = num2str(r); end set(text(gr(min),0,word),rotation,90,horizontalalignment,left,verticalalignment,bottom); end elseif(r.149 & r.151) plot(gr(min2:max2),r_l_a2(length(gr(min2:max2)-length(r_l_a2)+1:length(r_l_a2),b); plot(gr(min2:max2),r_l_b2(length(gr(min2:max2)-length(r_l_b2)+1:length(r_l_b2),b); end end%equations were derived using the symbolic toolbox as follows%solve(2*gi/(1-gr)2+gi2)=x,gi)%bound was derived as follows%solve(1-x2+2*x2*gr-x2*gr2=0,gr)%solve(1/2/x*(2+2*(1-x2+2*x2*gr-x2*gr2)(1/2)=(1-gr2)(1/2),gr)for x = interval, inter_bound = (-1+x2)/(x2+1); %intersection with unit circle: all values must be less than this imag_bound = (-1+x)/x; %boundary of imagination: all values must be greater than this angle_point = 0; if(inter_bound = 0) angle_point = sqrt(1-inter_bound2)/inter_bound; end imag_bound_y = 1/2/x*(-2+2*(1-x2+2*x2.*inter_bound-x2.*inter_bound.2).(1/2); imag_rad = (imag_bound2 + imag_bound_y2)(1/2); condition = imag_rad 1) inter_bound = 1; elseif(inter_bound 1) imag_bound = 1; elseif(imag_bound -1) imag_bound=-1; end %used solve function to find intersection of appropriate circle with corresponding hyperbolics %solve(-1/(r+1)*(-(r+1)*(r-2*r*gr+r*gr2-1+gr2)(1/2)=1/2/x*(-2+2*(1-x2+2*x2*gr-x2*gr2)(1/2),gr) %the following conditional tree creates the internal bounding between the two types of curves for variable resolution if(x.2) if(mod(x,.1)=0) max_bound = (-1+x2+22)/(x2+22+2*2+1); elseif(mod(x,.02)=0) max_bound = (-1+x2+.52)/(x2+.52+2*.5+1); else max_bound = (-1+x2+.22)/(x2+.22+2*.2+1); end elseif(x1) if(mod(x,.2)=0) max_bound = (-1+x2+52)/(x2+52+2*5+1); elseif(mod(x,.1)=0) max_bound = (-1+x2+22)/(x2+22+2*2+1); elseif(x.5) max_bound = (-1+x2+.52)/(x2+.52+2*.5+1); else max_bound = (-1+x2+12)/(x2+12+2*1+1); end elseif(x2) max_bound = (-1+x2+52)/(x2+52+2*5+1); else if(mod(x,.2)=0) max_bound = (-1+x2+52)/(x2+52+2*5+1); else max_bound = (-1+x2+22)/(x2+22+2*2+1); end end elseif(x10) if(mod(x,2)=0) max_bound = (-1+x2+202)/(x2+202+2*20+1); else max_bound = (-1+x2+102)/(x2+102+2*10+1); end else if(x=10|x=20) max_bound = (-1+x2+502)/(x2+502+2*50+1); elseif(x=50) max_bound = 1; elseif(x inter_bound & index1 = inter_index)|(actual_value1 imag_bound & index1 = imag_index) index1 = index1 - 1; end if(actual_value2 inter_bound & index2 = inter_index)|(actual_value2 imag_bound & index2 = imag_index) index2 = index2 + 1; end if(actual_value3 inter_bound & index3 = inter_index)|(actual_value3 max_bound) index4 = index4 - 1; end min=index2; max2=index1; max3=index4; min2 = index3; % actual_value1 = gr(min); % actual_value2 = gr(max2); % min=1; % max2=max; % min2=1; x_l_a = real(1/2/x*(-2+2*(1-x2+2*x2.*gr(min2:max3)-x2.*gr(min2:max3).2).(1/2); x_l_b = real(1/2/x*(2-2*(1-x2+2*x2.*gr(min2:max3)-x2.*gr(min2:max3).2).(1/2); x_l_c= r

温馨提示

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

最新文档

评论

0/150

提交评论