当前位置:首页 >> 信息与通信 >>

基于matlab的smith圆图的设计






Smith 圆图是 P.H.Smith 于 1939 年在贝尔实验室发明的,它主要 用于计算微波网络的阻抗、导纳及网络阻抗匹配设计,还可用于设计 微波元器件。Smith 圆图软件不仅适用于微波工程设计,亦可用于电 磁场、微波技术及天线与电波传播等课程相关内容的教学。 多年来,Smith 圆图作为一个不可缺少的设计工具,在高频和微

波领域发挥了重要作用。掌握了 Smith 圆图的原理和特性,并熟悉其 阻抗匹配技术,将使设计人员的设计能力大为加强。尽管目前微波电 路 CAD 技术已进入了设计领域,人们仍大量使用圆图作为设计工具。 究其原因,一是因为现有的大部分 CAD 软件在设计时要求用户提供 初始电路(包括拓扑和元件值) ,因此仍需借助于 Smith 圆图进行图 解设计;另一方面,对于窄带情形,利用圆图通常可直接完成设计不 必进一步进行优化而且目前不少大型软件价格昂贵, CAD 技术尚未普 及,因而一款 Smith 圆图工具的设计仍然是非常有必要的。 微波网络的正弦稳态分析含有复数计算,运算十分繁琐和耗时。 在计算机运算速度和内存不够发达以前,图解分析法得到长足发展, 其中多年来应用最广的是 Smith 圆图。在计算微波传输线输入阻抗、 导纳及阻抗匹配等问题时,它不仅能避开繁琐的公式及复数运算,使 工程设计中相关计算简单便捷,而且图解过程物理概念清晰,所得结 果直观形象。随着计算机技术的飞速发展,图解法在计算精度上的固 有缺陷日益显现,因为,圆图的计算精度取决于圆图中必须有足够的 圆周数, 而过多的圆周会导致图线过于密集, 不便将阻抗、 反射系数、
1

行波系数及电长度等相关数据从图上直接读出。 通过对圆图构成的基 本原理和应用问题的分析, 利用现代计算机技术可以解决圆图计算精 度等方面存在的问题,为此设计的 Smith 圆图软件既保留圆图计算直 观、便捷的大众性,又满足工程设计中相关参数的计算精度。在计算 机应用日益普及的今天,该软件特别适合电磁场、微波技术与天线等 领域的教学和工程设计相关参数计算使用。

2

目 录



要…………………………………………………………………4

第1章 概述 …………………………………………………………5 第2章 Smith 圆图软件构成的基本原理 …………………………7
2.1 2.3 2.3 阻抗圆图软件构成的基本原理…………………………………7 圆图软件的设计特点 ……………………………………………8 圆图的基本应用…………………………………………………10

第3章 仿真与调试…………………………………………………11
3.1 3.2 3.3 调试………………………………………………………………11 仿真………………………………………………………………12 仿真结果验算……………………………………………………13

第4章 设计小结 ……………………………………………………14 致谢 …………………………………………………………15 参考文献 ……………………………………………………16 附录 源程序代码……………………………………………17

3

基于 MATLAB 语言的 Smith 圆图软件设计

[摘 摘

要]:Smith 圆图是从事微波工程实验和天线设计的重要工具。

应用 MATLAB 作为开发平台研制的 Smith 圆图应用软包,使圆图的应 用和计算变得更加方便、 快捷, 该软件具有用户图形界面, 简单易用, 而且计算精度高。 [关键词]: MATLAB;GUI;Smith 圆图;

4

第1章 章

概述

Smith 圆图的基本在于以下的算式:

式中的Г代表其线路的反射系数,即阻抗匹配时,

[S]矩阵里的 S11,zL 是

归一化负载抗,即 ZL / Z0。其中,ZL 是电路的负载值 Z0 是传输线的特性阻抗 值,通常会使用 50 Ω。图 1-1 中的圆形 线代表电阻抗力的 实数值,即电阻值, 中间的横线与向上 和向下散出的线则 代表电阻抗力的虚 数值,即由电容或 电感在高频下所产 生的阻力,当中向 上的是正数,向下 的是负数。圆图图 最中间的点(1+j0) 代表一个已匹配的
图 1-1 Smith 圆图

电阻数值(ZL),同时其反射系数的值会是零。图表的边缘代表其反射系数的长度 是 1,即 100%反射。在图边的数字代表反射系数的角度(0-180 度)和波长(由零 至半个波长) 有一些图表是以导纳值来表示, 。 把上述的阻抗值旋转 180 度即可。 自从有了计算机后,此种图表的使用率随之而下,但仍常用来表示特定的 资料。对于就读电磁学及微波电子学的学生来说,在解决课本问题仍然很实用, 因此史密斯图至今仍是重要的教学用具。 本设计是运用 MATLAB 编写 SMITH 圆图仿真程序, 整个圆图软件分为用户图 形界面模块、圆图计算模块、画图演示模块。圆图计算模块分为输入阻抗计算、 5

反射系数计算、行波系数、驻波比计算以及整个 Smith 圆图;画图演示模块分为 等归一化电阻圆、等归一化电抗圆、反射系数圆;确定阻抗值在圆图上的位置、 圆图的基本应用、求输入阻抗及其在圆图上的位置。 具体实现: 1、 本程序能读出圆图上的任意一点对应的各个值,并能够根据输入的 归一化阻抗画出相应的圆图、显示对应的值; 2、 当在 MATLAB 环境下运行程序后,会显示完整的圆图工具界面,在 整个界面的右半部分画出完整的 Smith 圆图; 3、 当在“输入数据”文本框里分别输入负载阻抗的实部及虚部,点击 “确定”按钮,会在绘图区域内画出圆图,并显示相应的阻抗、反 射系数、驻波比、行波系数的值。

6

第2章
2.1

Smith 圆图软件构成的基本原理

阻抗圆图软件构成的基本原理 圆图运算的基础是反射系数 ( Г=U+jV ) 。Smith 圆图由反射系数平面上的

等归一化反射系数圆族、等归一化电阻圆族、等归一化电抗圆族构成。利用已知 的归一化阻抗 zL=R+jX,实现等反射系数圆族程序如下: R=R;X=X;%输入归一化阻抗 U= ( R^2+X^2-1) / ( R^2+23R+1+X^2) ; V= ( 23X) / ( R^2+23R+1+X^2) ; tr=23pi3 ( 00.011) ; Г=sqrt (U^2+V^2) ;%等反射系数圆的半径 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; iftx<pi; plot ( 1-rx3sin ( tx) ,cx-rx3cos ( tx) ,’m’) else

7

上述作图在 U 为横坐标和 V 为纵坐标的复平面中,R=常数的曲线是一系列 的电阻圆,X=常数的曲线为一系列的电抗圆。需要指出,圆图是用极坐标来表示 反射系数的。因为|Г|=常数的等反射系数圆是以原点 ( U=0,V=0) 为圆心,以 |Г|为半径,而相角=常数的曲线则为经过坐标原点的一系列直线。为避免混淆, 一般只画出由已知的归一化阻抗 zL=R+jX 对应的代表Г大小的同心圆和代表相角 的直线,但计算所得的电长度等参数以菜单形式给出。由上述程序,根据需要容 易画出相应圆图。

图 2-1 2.2 圆图软件的设计特点

Smith 圆图软件主界面

圆图软件设计要求计算结果以图形和数据并行输出, 处理包括复数的矩阵运 算。为使程序代码简单,执行运算速度快,计算精度高,选择 MATLAB 软件作为 设计技术平台较为理想。该软件数学表示、函数集丰富且功能强大、良好的用户 界面以及许多函数本身会绘制图形且自动选取坐标刻度等显著优点, 特别适用于 大量计算,因此 Smith 圆图软件选择 MATLAB 语言来编写。 在 MATLAB 中句柄图形有一定的优先级, 我们设计的程序也是按照这样的顺 8

序进行的,如图 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 大模块又进一步分解,其中用户图形界面模块分为: 主页、主菜单;圆图计算模块分为反射系数计算、单支节匹配计算、输入阻抗计 9

算以及整个 Smith 圆图;画图演示模块分为等归一化电阻圆、等归一化电抗圆、 反射系数圆等;确定阻抗值在圆图上的位置、圆图的基本应用、求输入阻抗及其 在圆图上的位置以及单支节匹配等问题。 圆图的基本应用

2.3

圆图是从事天线和微波工程设计的重要计算工具之一。应用圆图软件进行工程 计算,既保留圆图简便直观、物理概念清晰等图解法固有的优点,又能保证设计 计算必要的精确度,主要用于以下几类计算: ① 由归一化阻抗求电压反射系数和电压驻波系数以及相应的电长度等,这类问 题可由反射系数模块解决; ② 单支节匹配等微波网络匹配设计及微波元器件设计计算等由单支节匹配模块 实现; ③ 由负载阻抗根据移动的电长度计算输入阻抗、导纳或逆运算,计算微波传输 线上 Umax 和 Umin 的位置等,这些问题可由输入阻抗计算模块解决。

10

第3章
3.1 调试

仿真与调试

(1) 运行 MATLAB 软件,在该环境下新建编辑器文件,输入要调试的 Smith 圆 图工具实现的程序; (2) 保存好该文件之后,点击“DEBUG”菜单中的“RUN”命令对程序进行调 试,如果提示有错误提示,改正之后重复调试,直至没有错误为止; (3) 改正所有的错误之后,运行,得到预期设计的 Smith 圆图软件界面,如图 3-1 所示:

图 3-1

调试结果

11

3.2

仿真

(1)在用户界面的“输入数据”栏里分别输入负载阻抗的实部与虚部(仿真时 输入实部为 50,虚部为 0),如图 3-2 所示:

图 3-2

输入负载阻抗

(2)点击“确定按钮”,界面上显示输出数据:负载导纳、驻波比、反射系数 和行波系数的数值,同时在绘图区域画出其归一化阻抗圆图。分别如图 3-3 及图 3-4 所示:

图 3-3

输出数据

12

图 3-4

圆图

3.3

仿真结果验算

负载导纳 Y:

Y=1/R =1/(50+j*0)=0.02
驻波比η:

η=Z0*Z0/Zl =50*50/50=50
反射系数Г:

(Zl=R=50)

Г=(η-1)/(η+1) =49/50=0.960784
行波系数 K:

K=1/η =1/50=0.02
由上述分析可知,仿真结果符合定义,结果正确!

13

第4章

设计小结

由于我们微波技术的课程只有短短 8 周的学习时间,因而所学到的知识也 是较为肤浅的,因此,这门课程设计对我而言既是深入了解微波技术专业知识的 机遇,同时也是一个挑战。 通过本次课程设计,在编程过程中对 Smith 圆图的有关知识进行了很好的 复习和掌握。由初步的只能画出简单的圆图,得到对应的电抗、导纳的值到可以 通过电抗、导纳的值画出相应的 Smith 圆图。而且在程序的编写及调试过程中, 对 MATLAB 的知识也进行了很好的运用与学习。 开始时我觉得对 Smith 圆图知识的掌握还可以,由于没有专门地去学,因而 在 MATLAB 软件的应用上有所困难。 最后我是在相关专业同学的指点及自己的摸 索下才比较完整的完成该软件的设计。 该软件能实现 Smith 圆图软件的基本功能,不足之处也存在着,比如要在分 析传输线理论时会有所欠缺;另外界面不够美观、较为单一,放大镜功能也没有 能够加进。 我觉得以后可以多进行类似的课程设计,给我们以足够的实践空间,从而借 以加深我们对所学知识的理解和掌握。

14

致谢

经过近一个星期的忙忙碌碌,这次的微波技术课程设计已经快 要接近尾声了。在这次的课程设计过程中,无论是在理论学习阶段, 还是在设计的选题、资料查询和撰写的每一个环节,我都得到到了许 多人的悉心的指导和帮助。首先,借此机会我向我们的微波技术授课 教师及课程设计指导老师余诺老师表示衷心的感谢, 余老师的悉心指 导和帮助,是我顺利完成本次课程设计的基础和前提。同时,我要感 谢授课的各位老师,正是由于他们的传道、授业、解惑,让我学到了 专业知识, 并从他们身上学到了如何求知治学、 如何为人处事。 另外, 感谢各位同学的帮助和勉励。同窗之谊和手足之情,我将终生难忘! 我愿在未来的学习和研究过程中,以更加丰厚的成果来答谢曾经关 心、帮助和支持过我的所有老师、同学和朋友。

15

参考文献

[1]

刘志学. 导抗圆图计算和广播电视网络传输匹配设计[J].中国有

线电视 [2] 刘学观,郭辉萍. 微波技术与天线(第二版)[M]. 西安:西安电 子科技大学出版社. 2006 [3] 乔晓华. 基于 MATLAB 语言的 Smith 圆图软件设计. 中国有线电 视. 2003 ( 19/20) [4] 车晴. 电子系统仿真与 MATLAB[M]. 北京:北京广播学院出版

社.2000

16

附录 部分源程序代码:
function 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 GUIDE's 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 EDIT gui_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(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 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 Gr constant = linspace(0,10,5); phaseAngle = linspace(0,2*pi,50); unitGamma = exp(j*phaseAngle); %plot the unit circle in the complex plane hold on; plot(real(unitGamma),imag(unitGamma),'r'); %set(gcf,'Position',[0 0 1280 990]); axis square zoom on axis([-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;

17
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 axis plot(Gr, zeros(1,length(Gr)),'r'); %equations were derived using the symbolic toolbox as follows %solve('R=(1-Gr^2-Gi^2)/((1-Gr)^2+Gi^2)','Gi') %bound was derived as follows %solve('1/(R+1)*(-(R+1)*(R-2*R*Gr+R.*Gr^2-1+ Gr^2))^(1/2)=0','Gr') for R = interval2, min_bound1 = (R-1)/(R+1); if(R<.2) if(mod(R,.1)==0) max_bound = (-1+2^2+R^2)/(2^2+R^2+2*R+1); elseif(mod(R,.02)==0) max_bound = (-1+.5^2+R^2)/(.5^2+R^2+2*R+1); else max_bound = (-1+.2^2+R^2)/(.2^2+R^2+2*R+1); if(R==.05 | (R<.151 & R>.149)) min_bound2 = (-1+.5^2+R^2)/(.5^2+R^2+2*R+1); max_bound2 = (-1+1^2+R^2)/(1^2+R^2+2*R+1); end end elseif(R<1) if(mod(R,.2)==0) max_bound = (-1+5^2+R^2)/(5^2+R^2+2*R+1); elseif(mod(R,.1)==0) max_bound = (-1+2^2+R^2)/(2^2+R^2+2*R+1); elseif(R==.25 | R==.35 | R==.45) temp = (-1+.5^2+R^2)/(.5^2+R^2+2*R+1); min_bound2 = max(min_bound1, temp); max_bound = (-1+1^2+R^2)/(1^2+R^2+2*R+1); elseif(R<.5) max_bound = (-1+.5^2+R^2)/(.5^2+R^2+2*R+1); else max_bound = (-1+1^2+R^2)/(1^2+R^2+2*R+1); end elseif(R<5)

if(mod(R,2)==0) max_bound (-1+20^2+R^2)/(20^2+R^2+2*R+1); elseif(mod(R,1)==0) max_bound (-1+10^2+R^2)/(10^2+R^2+2*R+1); elseif(R>2) max_bound (-1+5^2+R^2)/(5^2+R^2+2*R+1); else if(mod(R,.2)==0) max_bound (-1+5^2+R^2)/(5^2+R^2+2*R+1); else max_bound (-1+2^2+R^2)/(2^2+R^2+2*R+1); end end elseif(R<10) if(mod(R,2)==0) max_bound (-1+20^2+R^2)/(20^2+R^2+2*R+1); else max_bound (-1+10^2+R^2)/(10^2+R^2+2*R+1); end else if(R==10|R==20) max_bound (-1+50^2+R^2)/(50^2+R^2+2*R+1); elseif(R==50) max_bound = 1; elseif(R<20) max_bound (-1+20^2+R^2)/(20^2+R^2+2*R+1); else max_bound (-1+50^2+R^2)/(50^2+R^2+2*R+1); end end

=

=

=

=

=

=

=

=

=

=

index = ceil((min_bound1+1)*(MAX-1)/2+1); actual_value = Gr(index); if(actual_value<min_bound1) index = index + 1; end MIN=index; index = ceil((max_bound+1)*(MAX-1)/2+1); actual_value = Gr(index); if(actual_value>max_bound) index = index - 1; end MIN2 = ceil((min_bound2+1)*(MAX-1)/2+1); actual_value = Gr(MIN2);

18

if(actual_value<min_bound2 MIN2 = MIN2 + 1; end

)

end if(mod(R,.1)==0) = set(text(Gr(MIN),0,word),'Rotation',90,'Hor izontalAlignment','left','VerticalAlignment','bott om'); 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,'Hor izontalAlignment','left','VerticalAlignment','bott om'); end elseif(R<=5) if(mod(R,1)==0) set(text(Gr(MIN),0,[num2str(R) '.0']),'Rotation',90,'HorizontalAlignment','left','V erticalAlignment','bottom'); end else if(mod(R,10)==0) set(text(Gr(MIN),0,num2str(R)),'Rotation',9 0,'HorizontalAlignment','left','VerticalAlignment' ,'bottom'); end end elseif(R==.25 | R==.35 | R==.45) plot(Gr(MIN2:index),r_L_a3,'b'); plot(Gr(MIN2:index),r_L_b3,'b'); end if(R==.05 | (R>.149 & R<.151))

MAX2 ceil((max_bound2+1)*(MAX-1)/2+1); actual_value = Gr(MAX2); if(actual_value<max_bound2 ) MAX2 = MAX2 + 1; end

r_L_a=1/(R+1)*(-(R+1)*(R-2*R.*Gr(MIN:index)+ R.*Gr(MIN:index).^2-1+Gr(MIN:index).^2)).^(1/2 ); r_L_b=-1/(R+1)*(-(R+1)*(R-2*R.*Gr(MIN:index)+ R.*Gr(MIN:index).^2-1+Gr(MIN:index).^2)).^(1/2 ); r_L_b(1)=0; r_L_a(1)=0;

r_L_a2=1/(R+1)*(-(R+1)*(R-2*R.*Gr(MIN2:MAX2 )+R.*Gr(MIN2:MAX2).^2-1+Gr(MIN2:MAX2).^2)) .^(1/2); r_L_b2=-1/(R+1)*(-(R+1)*(R-2*R.*Gr(MIN2:MAX 2)+R.*Gr(MIN2:MAX2).^2-1+Gr(MIN2:MAX2).^2 )).^(1/2);

r_L_a3=1/(R+1)*(-(R+1)*(R-2*R.*Gr(MIN2:index) +R.*Gr(MIN2:index).^2-1+Gr(MIN2:index).^2)).^ (1/2); r_L_b3=-1/(R+1)*(-(R+1)*(R-2*R.*Gr(MIN2:inde x)+R.*Gr(MIN2:index).^2-1+Gr(MIN2:index).^2)) .^(1/2); %fix resolution issues in .2-.5 range if(~(R>.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);

plot(Gr(MIN2:MAX2),r_L_a2(length(Gr(MIN2:M AX2))-length(r_L_a2)+1:length(r_L_a2)),'b'); plot(Gr(MIN2:MAX2),r_L_b2(length(Gr(MIN2:M AX2))-length(r_L_b2)+1:length(r_L_b2)),'b'); end end

19
%equations were derived using the symbolic toolbox as follows %solve('2*Gi/((1-Gr)^2+Gi^2)=x','Gi') %bound was derived as follows %solve('1-X^2+2*X^2*Gr-X^2*Gr^2=0','Gr')

%solve('1/2/X*(2+2*(1-X^2+2*X^2*Gr-X^2*Gr^2 )^(1/2))=(1-Gr^2)^(1/2)','Gr') for X = interval, inter_bound = (-1+X^2)/(X^2+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_bound^2)/inter_bound; end imag_bound_y = 1/2/X*(-2+2*(1-X^2+2*X^2.*inter_bound-X^2.*i nter_bound.^2).^(1/2)); imag_rad = (imag_bound^2 imag_bound_y^2)^(1/2); condition = imag_rad < 1; if(inter_bound > 1) inter_bound = 1; elseif(inter_bound < -1) imag_bound=-1; end if(imag_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*Gr^2 -1+Gr^2))^(1/2)=1/2/X*(-2+2*(1-X^2+2*X^2*Gr-X ^2*Gr^2)^(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+X^2+2^2)/(X^2+2^2+2*2+1); elseif(mod(X,.02)==0) max_bound = (-1+X^2+.5^2)/(X^2+.5^2+2*.5+1); else max_bound = (-1+X^2+.2^2)/(X^2+.2^2+2*.2+1); end elseif(X<1) if(mod(X,.2)==0) max_bound = +

(-1+X^2+5^2)/(X^2+5^2+2*5+1); elseif(mod(X,.1)==0) max_bound (-1+X^2+2^2)/(X^2+2^2+2*2+1); elseif(X<.5) max_bound (-1+X^2+.5^2)/(X^2+.5^2+2*.5+1); else max_bound (-1+X^2+1^2)/(X^2+1^2+2*1+1); end elseif(X<5) if(mod(X,2)==0) max_bound (-1+X^2+20^2)/(X^2+20^2+2*20+1); elseif(mod(X,1)==0) max_bound (-1+X^2+10^2)/(X^2+10^2+2*10+1); elseif(X>2) max_bound (-1+X^2+5^2)/(X^2+5^2+2*5+1); else if(mod(X,.2)==0) max_bound (-1+X^2+5^2)/(X^2+5^2+2*5+1); else max_bound (-1+X^2+2^2)/(X^2+2^2+2*2+1); end end elseif(X<10) if(mod(X,2)==0) max_bound (-1+X^2+20^2)/(X^2+20^2+2*20+1); else max_bound (-1+X^2+10^2)/(X^2+10^2+2*10+1); end else if(X==10|X==20) max_bound (-1+X^2+50^2)/(X^2+50^2+2*50+1); elseif(X==50) max_bound = 1; elseif(X<20) max_bound (-1+X^2+20^2)/(X^2+20^2+2*20+1); else max_bound (-1+X^2+50^2)/(X^2+50^2+2*50+1); end end inter_index ceil((inter_bound+1)*(MAX-1)/2+1); imag_index

=

=

=

=

=

=

=

=

=

=

=

=

=

20
= =

ceil((imag_bound+1)*(MAX-1)/2+1); index4 = ceil((max_bound+1)*(MAX-1)/2+1); index1 = max(inter_index,imag_index); %maximum index for c,d index2 = min(imag_index,inter_index); %minimum index for c,d if(condition) index3=imag_index; else index3=inter_index; end actual_value1 = Gr(index1); actual_value2 = Gr(index2); actual_value3 = Gr(index3); actual_value4 = Gr(index4); if((actual_value1 > 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 < imag_bound index3 == imag_index)) index3 = index3 + 1; end if(actual_value4 > 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^2.*Gr(MIN2:MAX3).^2).^(1/2))); x_L_c= real(1/2/X*(2+2*(1-X^2+2*X^2.*Gr(MIN:MAX2)X^2.*Gr(MIN:MAX2).^2).^(1/2))); x_L_d= real(1/2/X*(-2-2*(1-X^2+2*X^2.*Gr(MIN:MAX2)X^2.*Gr(MIN:MAX2).^2).^(1/2))); if(MIN2<MAX3) x_L_c(1)=x_L_b(1); x_L_d(1)=x_L_a(1); end check1 = abs(round(10000*1/2/X*(-2-2*(1-X^2+2*X^2*int er_bound-X^2*inter_bound^2)^(1/2)))); check2 = abs(round(10000*(1-inter_bound^2)^(1/2))); if(imag_bound > -1 & check1 == check2) plot(Gr(MIN:MAX2),x_L_c,'g') plot(Gr(MIN:MAX2),x_L_d,'g') end plot(Gr(MIN2:MAX3),x_L_a,'g') plot(Gr(MIN2:MAX3),x_L_b,'g')

== &

== &

condition = Gr(MIN2)^2 + x_L_d(1)^2 > .985; if(X<=1) if(mod(X,.1)==0) if(mod(X,1)==0) word = [num2str(X) '.0']; else word = num2str(X); end if(X==1) angle = 90; else angle = -atan(angle_point)*180/pi; end set(text(Gr(MIN2),x_L_d(1),word),'Rotation',ang le,'VerticalAlignment','bottom','HorizontalAlign ment','left'); set(text(Gr(MIN2),-x_L_d(1),word),'Rotation',-an gle+180,'HorizontalAlignment','right','VerticalAli gnment','bottom'); if(mod(X,.2)==0) xval=X^2/(X^2+4); yval = 1/2/X*(-2+2*(1-X^2+2*X^2*xval-X^2*xval^2)^(1/ 2)); angle = -atan(yval/(.5-xval))*180/pi;

21

x_L_a = real(1/2/X*(-2+2*(1-X^2+2*X^2.*Gr(MIN2:MAX3 )-X^2.*Gr(MIN2:MAX3).^2).^(1/2))); x_L_b = real(1/2/X*(2-2*(1-X^2+2*X^2.*Gr(MIN2:MAX3)-

-atan(angle_point)*180/pi+180; set(text(xval,yval,word),'Rotation',angle,'H orizontalAlignment','left','VerticalAlignment','bo ttom'); set(text(xval,-yval,word),'Rotation',-angle+180,' HorizontalAlignment','right','VerticalAlignment',' bottom') end end elseif(X<=2) if(mod(X,.2)==0) if(mod(X,1)==0) word = [num2str(X) '.0']; else word = num2str(X); end if(condition) angle = -atan(angle_point)*180/pi+180; set(text(Gr(MIN2),x_L_a(1),word),'Rotation',angl e,'VerticalAlignment','bottom','HorizontalAlignm ent','left'); set(text(Gr(MIN2),-x_L_a(1),word),'Rotation',-an gle+180,'HorizontalAlignment','right','VerticalAli gnment','bottom'); else angle = -atan(angle_point)*180/pi+180; set(text(Gr(MAX2),x_L_d(length(x_L_d)),w ord),'Rotation',angle,'VerticalAlignment','botto m','HorizontalAlignment','left'); set(text(Gr(MAX2),-x_L_d(length(x_L_d)),w ord),'Rotation',-angle+180,'HorizontalAlignment' ,'right','VerticalAlignment','bottom'); end end elseif(X<=5) if(mod(X,1)==0) if(condition) angle = -atan(angle_point)*180/pi+180; set(text(Gr(MIN2),x_L_a(1),[num2str(X) '.0']),'Rotation',angle,'VerticalAlignment','botto m','HorizontalAlignment','left'); set(text(Gr(MIN2),-x_L_a(1),[num2str(X) '.0']),'Rotation',-angle+180,'HorizontalAlignment ','right','VerticalAlignment','bottom'); else angle = set(text(Gr(MAX2),x_L_d(length(x_L_d)),[n um2str(X) '.0']),'Rotation',angle,'VerticalAlignment','botto m','HorizontalAlignment','left'); set(text(Gr(MAX2),-x_L_d(length(x_L_d)),[n um2str(X) '.0']),'Rotation',-angle+180,'HorizontalAlignment ','right','VerticalAlignment','bottom'); end end else if(mod(X,10)==0) if(condition) angle = -atan(angle_point)*180/pi+180; set(text(Gr(MIN2),x_L_a(1),num2str(X)),'Ro tation',angle,'VerticalAlignment','bottom','Horiz ontalAlignment','left'); set(text(Gr(MIN2),-x_L_a(1),num2str(X)),'R otation',-angle+180,'HorizontalAlignment','right' ,'VerticalAlignment','bottom'); else angle = -atan(angle_point)*180/pi+180; set(text(Gr(MAX2),x_L_d(length(x_L_d)),num2st r(X)),'Rotation',angle,'VerticalAlignment','botto m','HorizontalAlignment','left'); set(text(Gr(MAX2),-x_L_d(length(x_L_d)),n um2str(X)),'Rotation',-angle+180,'HorizontalAlig nment','right','VerticalAlignment','bottom'); end end end end %plot imaginary axis plot(zeros(1,length(Gr)),Gr,'r');

wavelengths = 0:.01:.5; angle = linspace(pi,-pi,length(wavelengths)); wave_circle = 1.05*exp(j*phaseAngle); plot(real(wave_circle),imag(wave_circle),'r'); for i=1:length(wavelengths)-1, x=real(1.025*exp(j*angle(i))); y=imag(1.025*exp(j*angle(i))); if(x>0) rot_angle=atan(y/x)*180/pi-90; else

22

rot_angle=atan(y/x)*180/pi+90; end if(wavelengths(i)==0) word = '0.00'; elseif(mod(wavelengths(i),.1)==0) word = [num2str(wavelengths(i)) '0']; else word = num2str(wavelengths(i)); end set(text(x,y,word),'Rotation',rot_angle,'VerticalA lignment','middle','HorizontalAlignment','center' end %plot reflection coefficient and line intersection only if arguments are present of

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 guidata(hObject, handles);

% Choose default command line output for smith handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes smith wait for user response (see UIRESUME) % uiwait(handles.figure1); % --- Outputs from this function are returned to the command line. function varargout = smith_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 guidata(hObject, handles);

% --- Executes on button press in pushbutton1. function pushbutton1_Callback(hObject, eventdata, handles) % --- Executes on button press in radiobutton5. % 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) %%%%%%%%%%%%%%%%%%%%%%%%%%% r=str2num(get(handles.edit1,'String')); x=str2num(get(handles.edit2,'String')); Tx=(r^2+x^2-1)/((r+1)^2+x^2); Ty=(2*x)/((r+1)^2+x^2); Tr=(Tx^2+Ty^2)^(0.5); PP=(1+Tr)/(1-Tr); K=1/PP; Yr=(1-Tx^2-Ty^2)/((1+Tx)^2+Ty^2); Yi=(-2*Ty)/((1+Tx)^2+Ty^2); set(handles.text1,'String',Yr); set(handles.text2,'String',Yi); set(handles.text3,'String',PP); set(handles.text4,'String',Tr); set(handles.text5,'String',K); %%%%%%%%%%%%%%%%%%%%%%%%%%% global fig1 fig2 fig3 fig4 fig5 fig6 fig7 fig8 fig9 fig10 fig11 fig12 if fig1~=0 delete(fig1); end if fig2~=0 delete(fig2); end if fig3~=0 delete(fig3); end if fig4~=0

23

delete(fig4); end if fig5~=0 delete(fig5); end if fig6~=0 delete(fig6); end if fig7~=0 delete(fig7); end if fig8~=0 delete(fig8); end if fig9~=0 delete(fig9); end if fig10~=0 delete(fig10); end if fig11~=0 delete(fig11); end if fig2~=0 delete(fig2); end if fig12~=0 delete(fig12); end if Tx==0; if Ty>0 Angle=0.5*pi; XX=Tr*exp(j*Angle); fig1=plot(XX,'ro'); wavelengths = 0:.01:.5; Angle = linspace(-0.5*pi,0.5*pi,length(wavelengths)); XX=Tr*exp(j*Angle); fig2=plot(real(XX),imag(XX),'k'); Angle=-pi;

XX=Tr*exp(j*Angle); fig3=plot(XX,'ko'); else Angle=0.5*pi; XX=Tr*exp(j*Angle); fig4=plot(XX,'ko'); wavelengths = 0:.01:.5; Angle = linspace(0.5*pi,1.5*pi,length(wavelengths)); XX=Tr*exp(j*Angle); fig5=plot(real(XX),imag(XX),'k'); Angle=-pi; XX=Tr*exp(j*Angle); fig6=plot(XX,'ro'); end else Angle=atan(Ty/Tx); if Ty>0 XX=Tr*exp(j*Angle); fig7=plot(XX,'ro'); wavelengths = 0:.01:.5; NAngle = linspace(Angle-pi,Angle,length(wavelengths)); XX=Tr*exp(j*NAngle); fig8=plot(real(XX),imag(XX),'k'); Angle=Angle-pi; XX=Tr*exp(j*Angle); fig9=plot(XX,'ko'); else XX=Tr*exp(j*Angle); fig10=plot(XX,'ko'); wavelengths = 0:.01:.5; NAngle = linspace(Angle,Angle+pi,length(wavelengths)); XX=Tr*exp(j*NAngle); fig11=plot(real(XX),imag(XX),'k'); Angle=Angle+pi; XX=Tr*exp(j*Angle); fig12=plot(XX,'ro'); end end

24


相关文章:
Smith圆图的仿真
史密斯圆图上的点 二、Smith 圆图的 MATLAB 仿真 7 源码来自电子工业出版社的《射频电路设计—理论与运用》 ,我在大二时候买的 一本书。 在一个文件夹下拷贝...
微波期中matlab仿真smith圆图
微波期中matlab仿真smith圆图_电子/电路_工程科技_专业资料。微波期中设计微波...基于matlab的smith圆图的... 24页 5下载券 微波课设报告 smith圆图... 24...
微波课设报告 smith圆图
9 第 4 章 SMITH 圆图 Matlab 的实现 4.1 圆图的绘制 Smith圆图设计要求...基于 Matlab 的 RF 系统阻抗匹配设计.微计算机信息 (嵌入 式与 SOC)2006 年...
微波实验报告 smith原图 matlab
微波课设 matlab smith原图 北京信息科技大学 gui微波课设 matlab smith原图 北京信息科技大学 gui隐藏>> 微波通信技术课程设计报告 Smith 圆图软件 一:Smith 圆图...
北邮smith圆图实验报告
13 1 1. 作业内容 (1) 通过软件编程,实时显示史密斯圆图及归一化阻抗值(...3. 程序架构作业程序基于 MatlabR2010b 的 GUI 编写而成, 共有 12 个 xxx...
基于matlab的图像形状分类器设计
基于matlab的图像形状分类器设计_信息与通信_工程科技...(3)边界查索, 通常用于探测图性的线型等局部结构,...在 QBIC 系统,是利 用圆度、偏心率、主轴方向和...
用matlab实现圆形检测结果图
2.对版面进行设计,生成.fig 文件。 3 用matlab 实现圆形检测,用 GUI 实现 1...基于matlab的smith圆图的... 24页 5下载券 阵列天线方向图的MATLAB... 5...
优秀毕业设计(论文) 姚菲菲-基于MATLAB的RF电路设计与...
(RF)电路设计中史密斯圆图的 发展机器重要作用,接着介绍了史密斯圆图的基本构成...基于 Matlab 的 RF 电路设计与仿真一、 主要研究内容: 毕业设计主要是完成基于...
基于matlab的图像形状与分类_毕业设计
论文主要论述了利用 MATLAB 实现对图像中的三角形,正方 形,圆,椭圆,菱形的边缘...颜色 5 江西理工大学应用科学学院 2014 届本科生毕业设计(论文) 图为 m*3 ...
基于matlab的图像形状与分类毕业设计(含源文件)
基于matlab的图像形状与分类毕业设计(含源文件)_理学...A c? (3-2) 正方形的圆形度为? 其中: P ...3.6.2 图像形状识别结果 图 3-3 原始图像的边缘...
更多相关标签: