第一篇:北邮微波仿真实验1
微波仿真实验报告
学 院:电子工程学院 班 级 学 号: 姓 名: 班内序号:
微波仿真课作业1
1.了解ADS Schematic的使用和设置
2.在Schematic里,分别仿真理想电容20pF和理想电感5nH,仿真频率为(1Hz-100GHz),观察仿真结果,并分析原因。20pF理想电容
仿真图
原因分析:史密斯原图下半部分是容性,随频率增加,电容由开路点变到短路点,通高频,阻低频。5nH理想电感
仿真图
原因分析:史密斯原图上半部分是感性,随频率增加,电容由短路点变到开路点,阻高频,通低频。
3. Linecalc的使用
a)计算中心频率1GHz时,FR4基片的50Ω微带线的宽度
宽度为:2.9112mm b)计算中心频率1GHz时,FR4基片的50Ω共面波导(CPW)的横截面尺寸(中心信号线宽度与接地板之间的距离)
横截面尺寸为:W=171.355mm,G=5mm,L=63.5mm
4.基于FR4基板,仿真一段特性阻抗为50Ω四分之一波长开路CPW线的性能参数,中心工作频率为1GHz。仿真频段(500MHz-3GHz),观察Smith圆图变化,分析原因。
仿真图
仿真图分析: 1、1GHz时,为四分之一波长,开路阻抗变换后变为短路,2GHz时为二分之一波长,所以仍为开路;
2、由于损耗,因此反射系数变小,所以等反射系数圆的半径也在变小。
5.基于FR4基板,仿真一段特性阻抗为50Ω四分之一波长短路CPW线的性能参数,中心工作频率为1GHz。仿真频段(500MHz-3GHz),观察Smith圆图变化,分别求出500MHz和2GHz的输入阻抗,分析变化原因。
仿真图
仿真图分析: 1、1GHz时,为四分之一波长,短路阻抗变换后变为开路,2GHz时为二分之一波长,所以仍为短路;
2、由于损耗,因此反射系数变小,所以等反射系数圆的半径也在变小。分别求出500MHz和2GHz的输入阻抗: 500MHz:Z0*(0.003+j0.001)2GHz:Z0*(0.012-j0.005)
6.分别用理想传输线和在FR4基片上的微带传输线,仿真一段特性阻抗为50Ω四分之一波长开路线的性能参数,工作频率为1GHz。仿真频段(500MHz-3GHz),观察Smith圆图变化,分别求出500MHz和2GHz的输入阻抗,分析变化原因。
仿真图
分别求出500MHz和2GHz的输入阻抗: 微带线
500MHz:Z0*(0.003-j0.992)2GHz:Z0*(32.830-j1.603)理想传输线
500MHz:Z0*(1.000E-10-j1.000)2GHz:Z0*(2.000E10-j2.000E5)
分析:因为相对于理想传输线,微带线有损耗产生误差,反射系数一直变小。
扩展仿真频率(500MHz-50GHz),分析曲线变化原因。
分析:对于理想传输线,反射系数不变,而对于微带线,由于存在损耗,反射系数会一直变小,因此其反射系数圆的半径在一直变小。
7.分别用理想传输线和在FR4基片上的微带传输线,仿真一段特性阻抗为50Ω四分之一波长短路线的性能参数,工作频率为1GHz。仿真频段(500MHz-3GHz),观察Smith圆图变化,分别求出500MHz和2GHz的输入阻抗,分析变化原因。
仿真图
分别求出500MHz和2GHz的输入阻抗: 微带线
500MHz:Z0*(0.009+j1.003)2GHz:Z0*(0.031+j0.002)理想传输线
500MHz:Z0*(5.551E-17+j1.000)2GHz:Z0*(8.284E-18-j1.000E-5)
分析:因为相对于理想传输线,微带线有损耗产生误差,反射系数一直变小。
扩展仿真频率(500MHz-50GHz),分析曲线变化原因。
分析:对于理想传输线,反射系数不变,而对于微带线,由于存在损耗,反射系数会一直变小,因此其反射系数圆的半径在一直变小。
8.分别用理想传输线和在FR4基片上的微带传输线,仿真一段特性阻抗为50Ω二分之一波长开路线的性能参数,工作频率为1GHz。仿真频段(500MHz-3GHz),观察Smith圆图变化,分别求出500MHz和2GHz的输入阻抗,分析变化原因。
仿真图
分别求出500MHz和2GHz的输入阻抗: 微带线
500MHz:Z0*(0.016+j0.006)2GHz:Z0*(16.430-j0.798)理想传输线
500MHz:Z0*(5.000E-11-j6.123E-17)2GHz:Z0*(2.000E10-j2.000E5)
分析:因为相对于理想传输线,微带线有损耗产生误差,反射系数一直变小。扩展仿真频率(500MHz-50GHz),分析曲线变化原因。
分析:对于理想传输线,反射系数不变,而对于微带线,由于存在损耗,反射系数会一直变小,因此其反射系数圆的半径在一直变小。
9.分别用理想传输线和在FR4基片上的微带传输线,仿真一段特性阻抗为50Ω二分之一波长短路线的性能参数,工作频率为1GHz。仿真频段(500MHz-3GHz),观察Smith圆图变化,分别求出500MHz和2GHz的输入阻抗,分析变化原因。
仿真图
分别求出500MHz和2GHz的输入阻抗: 微带线
500MHz:Z0*(55.044-j19.301)2GHz:Z0*(0.061+j0.004)理想传输线
500MHz:Z0*(-1.000+j1.633E16)2GHz:Z0*(8.284E-18-j1.000E-5)
分析:因为相对于理想传输线,微带线有损耗产生误差,反射系数一直变小。
扩展仿真频率(500MHz-50GHz),分析曲线变化原因。
分析:对于理想传输线,反射系数不变,而对于微带线,由于存在损耗,反射系数会一直变小,因此其反射系数圆的半径在一直变小。微波测量实验中测得的几个史密斯圆图 四分之一开路微带线
四分之一短路微带线
二分之一开路微带线
二分之一短路微带线
微波仿真课作业2
1. 用一段理想四分之一波长阻抗变换器匹配10欧姆到50欧姆,仿真S参数,给出-20dB带宽特性,工作频率为1GHz。计算得,22.36欧姆
仿真S参数
计算分析:由图计算-20dB带宽为 1071-929=142MHz;且如仿真图所示,在1GHz处回波损耗最低,实现阻抗匹配。2. 用一段FR4基片上四分之一波长阻抗变换器匹配10欧姆到50欧姆,仿真S参数,给出-20dB带宽特性,工作频率为1GHz,比较分析题1和题2的结果。
仿真S参数
由图计算-20dB带宽为1065-921=144MHz。
比较分析题1和题2的结果
分析,微带线与理想传输线之间有一定的误差:
1、如图所示可以看出微带线情况下,回波损耗最低点稍微偏离1GHz;
2、-20dB带宽为144MHz大于理想传输线时的142MHz; 3、1GHz阻抗匹配时,微带线时的回波损耗大于理想传输线。
3. 设计一个3节二项式匹配变换器,用于匹配10欧姆到50欧姆的传输线,中心频率是1GHz,该电路在FR4基片上用微带线实现,设计这个匹配变换器并计算
m0.1的带宽,给出回波损耗和插入损耗与频率的关系曲线,比较分析题2和题3的结果。
根据所学的理论知识,先依题意算出三节匹配微带线的阻抗值,然后通过LineCalc计算出相应微带线的长和宽,修改电路图中MLIN的相关参数。
Z1=40.89Ω W=4.198480mm L=40.404500mm Z2=22.36Ω W=9.620970mm L=38.833700mm Z3=12.23Ω W=19.83080mm L=37.648400mm
插入损耗
m0.1的带宽,即为-20dB带宽,由图计算得1325-680=645MHz;
比较分析题2和题3的结果,3节二项式匹配变换器匹配误差更大:
1、如图所示可以看出3节二项式匹配变换器匹配时回波损耗最低点明显偏离1GHz;
2、-20dB带宽为645MHz大于微带线情况;
3、但1GHz阻抗匹配时,3节二项式匹配变换器时的回波损耗小于微带线情况。
4. 题3中,若用3节切比雪夫匹配变换器实现,比较同样情况下的带宽,回波损耗和插入损耗与频率的关系曲线,比较分析题3和题4结果。
根据所学的知识可以计算出切比雪夫变换器匹配的三个微带线的阻抗,然后通过LineCalc计算出相应微带线的长和宽,修改电路图中MLIN的相关参数。Z1=35.94Ω
W=4.948710mm L=40.0910mm Z2=22.11Ω
W=9.6519mm L=38.8278mm Z3=13.55Ω
W=17.57710mm L=37.8241mm
仿真图
插入损耗
m0.1的带宽,即为-20dB带宽,由图计算得1485-534=951MHz;
比较分析题3和题4的结果,即二项式匹配变换器与切比雪夫匹配变换器:
1、切比雪夫匹配变换器的带宽显著增加;
2、切比雪夫匹配变换器回波损耗具有等波纹特性;
3、两者的插入损耗差别不明显。
5. 对于一个负载阻抗ZL=60-j80欧姆,利用Smith Chart Utility功能,分别设计并联短路单枝节和并联开路单枝节匹配,并将Smith Chart Utility给出的匹配结果在Schematic中仿真,给出1-3GHz的回波损耗与频率的关系曲线,并给出m0.1的带宽。并联短路单枝节
计算并联短路单枝节-20dB带宽:1053-952=101MHz
并联开路单枝节
计算并联开路单枝节-20dB带宽:1023-975=48MHz
6. 并联双枝节匹配电路,并联双枝节为开路,枝节之间相距λ/8,中心工作频率为2GHz,利用理想传输线,给出1-3GHz的回波损耗与频率的关系曲线,并给出m0.1的带宽。并联双枝节, 枝节之间相距λ/8,中心工作频率为2GHz
仿真
如图在2GHz匹配
计算-20dB带宽:2012-1988=24MHz
第二篇:微波天线仿真设计实验
基于HFSS的微带天线仿真设计 1 概述
目前,在许多应用场合(如移动通信手机中)都需要体积小、重量轻的小型接收天线。微带贴片天线代表一系列的小型天线,以其剖面低、重量轻的优点而成为人们的首选。通过采用简单明了的传输线模型,建立微带线嵌入馈电贴片天线的精确模型并对之进行分析已成为可能。另外,通过应用曲线拟合公式,也可以确定50Ohm输入阻抗所需的精确嵌入长度。馈电机制在微带贴片天线设计中扮演了重要角色。微带天线可以由同轴探针或嵌入的微带线来馈电,同轴探针馈电在有源天线应用中具有优势,而微带线馈电则是适合于开发高增益微带阵列天线。
在一个薄的介质基板上,一面覆上金属薄层作为接地板,另一面采用刻蚀地方法做出各种形状的贴片,利用微带或者同轴对贴片进行馈电,这就是最基本的微带贴片天线。它在导体贴片和接地板之间激励起电磁场,并通过贴片与接地板的缝隙向外辐射。
天线分析的基础问题是求解天线周围空间建立的电磁场,进而得出方向图增益和输入阻抗等特性指标。如下图1,图2所示。
图1 矩形微带天线开路段电场结构
图2 场分布侧面图 天线基础
天线的性能直接影响着整个无线通信的性能,一般来说,表征天线性能的主要参数有方向特性、增益、输入阻抗、驻波比、极化特性等。
2.1 天线的极化方式
所谓天线的极化,就是指天线辐射时形成的电场强度方向。根据极化方向可分为垂直极化波和水平极化波。
(1)水平极化波:当电场强度方向平行于地面形成的波。由于电波的特性,决定了水平极化传播的信号在贴近地面时会在大地表面产生极化电流,极化电流因受大地阻抗影响产生热能而使电场信号迅速衰减。
(2)垂直极化波:当电场强度方向垂直于地面形成的波。垂直极化方式则不易产生极化电流,从而避免了能量的大幅衰减,保证了信号的有效传播。
2.2 天线的增益
天线增益是用来衡量天线朝一个特定方向收发信号的能力,它是选择基站天线最重要的参数之一。
一般来说,增益的提高主要依靠减小垂直面向辐射的波瓣宽度,而在水平面上保持全向的辐射性能。表征天线增益的参数有dBd和dBi。DBi是相对于点源天线的增益,在各方向的辐射是均匀的;dBd相对于对称阵子天线的增益dBi=dBd+2.15。相同的条件下,增益越高,电波传播的距离越远。一般地,GSM定向基站的天线增益为18dBi,全向的为11dBi。
2.3 天线的阻抗
天线的输入阻抗是天线馈电端输入电压与输入电流的比值。天线与馈线的连接,最佳情形是天线输入阻抗是纯电阻且等于馈线的特性阻抗,这时馈线终端没有功率反射,馈线上没有驻波,天线的输入阻抗随频率的变化比较平缓。
天线的匹配工作就是消除天线输入阻抗中的电抗分量,使电阻分量尽可能地接近馈线的特性阻抗。匹配的优劣一般用四个参数来衡量即反射系数,行波系数,驻波比和回波损耗。
驻波比:它是行波系数的倒数,其值在1到无穷大之间。驻波比为1,表示完全匹配;驻波比为无穷大表示全反射,完全失配。
回波损耗:它是反射系数绝对值的倒数,以分贝值表示。回波损耗的值在0dB的到无穷大之间,回波损耗越大表示匹配越差,回波损耗越大表示匹配越好。0表示全反射,无穷大表示完全匹配。在移动通信系统中,一般要求回波损耗大于14dB。
2.4 天线的波瓣宽度
波瓣宽度是指天线的辐射图中低于峰值3dB处所成夹角的宽度(天线的辐射图是度量天线各个方向收发信号能力的一个指标,通常以图形方式表示为功率强度与夹角的关系)。
(1)垂直波瓣宽度:一般与该天线所对应方向上的覆盖半径有关。因此,一定范围内通过对天线垂直度(俯仰角)的调节,可以达到改善小区覆盖质 量的目的。
(2)水平波瓣宽度:水平平面的半功率角(H-Plane Half Power beamwidth)45°,60°,90°等)定义了天线水平平面的波束宽度。角度越大,在扇区交界处的覆盖越好,但当提高天线倾角时,也越容易发生波束畸变,形成越区覆盖。角度越小,在扇区交界处覆盖越差。
3矩形贴片的设计
矩形贴片是微带贴片天线最基本的模型,本设计就是基于微带贴片天线基础理论以及熟练掌握HFSS10仿真软件基础上,设计一个矩形贴片,其工作频率在2.45GHz,并分析其远区场辐射特性以及S曲线,3.1 设计目的
(1)学习设计微带天线的设计方法;
(2)掌握矩形贴片的设计方法及其远区辐射场的特性以及S曲线;(3)掌握HFSS10仿真软件的使用。
3.2 矩形微带贴片天线的辐射原理
如图3所示,用传输线模分析法介绍它的辐射原理。
设辐射元的长为L,宽为ω,介质基片的厚度为h。现将辐射元、介质基 片和接地板视为一段长为L的微带传输线,在传输线的两端断开形成开路,根据微带传输线的理论,由于基片厚度h<<λ,场沿h方向均匀分布。在最
简单的情况下,场沿宽度ω方向也没有变化,而仅在长度方向(L≈λ/2)有变化。
在开路两端的电场均可以分解为相对于接地板的垂直分量和水平分量,两垂直分量方向相反,水平分量方向相同,因而在垂直于接地板的方向,两水平分量电场所产生的远区场同向叠加,而两垂直分量所产生的场反相相消。因此,两开路端的水平分量可以等效为无限大平面上同相激励的两个缝隙,缝的电场方向与长边垂直,并沿长边ω均匀分布。缝的宽度△L≈h,长度为ω,两缝间距为L≈λ/2。这就是说,微带天线的辐射可以等效为有两个缝隙所组成的二元阵列。
图3 矩形贴片天线示意图
3.3 矩形贴片天线的仿真设计
1.建立新的工程 2.设置求解类型 3.设置模型单位
4.创建微带天线模型
(1)创建地板GroundPlane。尺寸为90mm*90mm,并设置理想金属边界。
(2)建立介质基片。尺寸为45mm*45mm*5mm。将材料设置为Rogers R04003。(3)建立贴片Patch。尺寸为:32mm*32mm,并设置理想金属边界。
(4)创建切角。首先在坐标原点处创建三角形,然后将其移动到方形贴片的顶点处。输入点的坐标:X:0,Y:0,Z:5;X:5,Y:0,Z:5; X:0,Y:5,Z:5;X:0,Y:0,Z:5。通过旋转180度创建另一个切角。(5)用Patch将切角减去。(6)创建探针Pin。圆柱中心点的坐标:X:0,Y:8,Z:0;输入圆柱半径:dX:0, dY:0.5,dZ:0;输入圆柱的高度: dX:0,dY:0,dZ:5。材料设置为pec。
(7)创建端口面Port。圆心点的坐标:X:0,Y:8,Z:0,半径为:dX:0,dY:1.5,dZ:0。
(8)用GroundPlane 将Port减去。
5.创建辐射边界
创建Air,尺寸为:160mm*160mm*70mm。辐射边界命名为Rad1。
6.设置端口激励
端口命名为p1。在Modes 标签中的Integration line zhong点击None,选择New Line,在坐标栏中输入:X:0,Y:9.5,Z:0;dX:0,dY:-1,dZ:0,按回车键,点击Next按钮直至结束。
7.求解设置
为该问题设置求解频率及扫频范围
(1)设置求解频率。设置窗口:Solution Frequency :2.45GHz;Maximun Number of Passes:15;Maximun Delta S per Pass :0.02。
(2)设置扫频。扫频窗口中做以下设置:Sweep Type:Fast;Frequency Setup Type:Linear Count;Start :2.0GHz;Stop:3.0GHz;Count:400;将Save Field复选框选中。8.设置无限大球面
在菜单栏中点击HFSS>Radiation>Insert Far Field Setup>Infinite Sphere。在Infinite Sphere标签中做以下设置:Phi:Start:0 deg,Stop:180deg,Step:90 deg;Theta:Start:0 deg,Stop:360 deg,Step:10 deg。
9.确认设计 10.保存并求解工程 11 后处理操作
(1)S参数(反射系数)。
绘制该问题的反射系数曲线,该问题为单端口问题,因此反射系数是s11。点击菜单栏HFSS>Result>Create Report。选择:Report Type:Modal S Parameters ;Display Type:Rectangle。Trace窗口:Solution:Setup1:Sweep1; Domain:Sweep 点击Y标签,选择:Category:S parameter;Quantity:S(p1,p1);Function:dB,然后点击Add Trace按钮。点击Done按钮完成 操作,绘制出反射系数曲线。
(2)2D辐射远场方向图。
在菜单栏点击HFSS>Result >Create Report。选择:Report Type:Far Fields;Display Type:Radiation Pattern。Trace 窗口:Solution:Setup1:LastAdptive;Geometry:ff_2d。在Sweep标签中,在Name这一列中点击第一个变量Phi,在下拉菜单中选择The。点击Mag标签,选择:Category :Gain;Quantity:GainTotal;Function:dB,点击Add Trace按钮。最后点击Done,绘制出方向图。结果分析
4.1 对探针位置的探讨
地板长、宽、高分别为: dX:90,dY:90,dZ:0。
介质基片长、宽、高:dX:45,dY:45,dZ:5;材料为Rogers R04003。贴片Patch长、宽、高: dX:32,dY:32,dZ:0。
4.1.1探针在Y轴
探针中心点的坐标:X:0,Y:8,Z:0;半径:dX:0, dY:0.5,dZ:0;高度:dX:0,dY:0,dZ:5;材料设置为pec。模型如图4所示:
图4 矩形贴片天线3D模型(探针在Y轴)
(1)反射系数曲线
在如上所述的求解频率和扫频的条件下,绘制反射系数曲线,如图5所示。
图5 反射系数图(Y轴)
(2)2D辐射远场方向图
在如上所述的求解频率和扫频的条件下,绘制2D辐射远场方向图,如图6所示。
图6 2D辐射远场方向图(Y轴)分析: 当探针在Y轴上时,回波损耗在13.8dB左右,工作频带在2.35GHz-2.47 GHz。
由远场方向图可看出,有一个小的背瓣。频点在2.42 GHz左右,不在2.45 GHz,因此需要进行优化。
4.1.2 探针位置在X轴上
探针中心点的坐标:X:8,Y:0,Z:0;半径:dX:0.5, dY:0,dZ:0;高度:dX:0,dY:0,dZ:5;材料设置为pec。模型如图7所示:
图7 矩形贴片天线3D模型(探针在X轴)
(1)反射系数曲线
在如上所述的求解频率和扫频的条件下,绘制反射系数曲线,如图8所示。
图8 反射系数图(X轴)
(2)2D辐射远场方向图
在如上所述的求解频率和扫频的条件下,绘制2D辐射远场方向图,如图9所示。
图9 2D辐射远场方向图(X轴)
分析:当探针在X轴上时,回波损耗也在13.8dB左右,工作频带在2.37GHz-2.48 GHz。
由远场方向图可看出,有一个小的背瓣。频点在2.43 GHz左右,不在2.45 GHz.说明此位置仍不是最佳位置。
4.1.3 探针在对角线位置上 探针中心点的坐标:X:-4.2,Y:4.2,Z:0;半径:dX:0.5, dY:0,dZ:0;高度:dX:0,dY:0,dZ:5;材料设置为pec。模型如图10所示:
图10 矩形贴片天线3D模型(探针在对角线轴)(1)反射系数曲线
在如上所述的求解频率和扫频的条件下,绘制反射系数曲线,如图11所示。
图11 反射系数图(对角线)
(2)2D辐射远场方向图
在如上所述的求解频率和扫频的条件下,绘制2D辐射远场方向图,如图12所示。
图12 2D辐射远场方向图(对角线上)
分析:当探针在对角线上时,回波损耗为-29dB,频点恰好在2.45GHz,工作频带在2.43GHz-2.47GHz工作特性很好,可知工作频带很窄。由远场图可知,此位置仍有一个小的背瓣。
因此,探针在这个工作特性很好,但工作带宽有点窄。探针中心点的坐标:X:8,Y:8,Z:0;半径:dX:0.5, dY:0,dZ:0; 高度:dX:0,dY:0,dZ:5;材料设置为pec。模型如图13所示:
图13 矩形贴片天线3D模型(探针在对角线轴)
(1)反射系数曲线
在如上所述的求解频率和扫频的条件下,绘制反射系数曲线,如图14所示。
图14 反射系数图(对角线)
(2)2D辐射远场方向图
在如上所述的求解频率和扫频的条件下,绘制2D辐射远场方向图,如图15所示。
图15 2D辐射远场方向图(对角线上)
分析: 当将探针设置在此位置时,回波损耗在-14.3dB左右,频带宽度在2.40 GHz-2.49GHz,频点正好在2.45GHz。
由远场方向图可知,在此位置有一个小的背瓣。
探针在这个位置工作特性很好,工作频带也较宽。此外还可知在对角线上越靠近中心,天线性能越好。
4.2 改变贴片尺寸
地板长、宽、高分别为: dX:90,dY:90,dZ:0。
介质基片长、宽、高:dX:45,dY:45,dZ:5;材料为Rogers R04003。贴片Patch长、宽、高: dX:31.7,dY:31.7,dZ:0。
探针中心点的坐标:X:8,Y:0,Z:0;半径:dX:0.5, dY:0,dZ:0;高度:dX:0,dY:0,dZ:5;材料设置为pec。模型如图16所示。
图16 矩形贴片天线3D模型(贴片尺寸改变)(1)反射系数曲线
仍在上述所设求解频率和扫频的条件下,绘制反射系数曲线,如图17所示。
图17 反射系数曲线(贴片尺寸改变)
(2)2D辐射远场方向图
在如上所述的求解频率和扫频的条件下,绘制2D辐射远场方向图,如图18所示。
图18 2D辐射远场方向图(贴片尺寸改变)
分析: 当其他条件不变,改变贴片尺寸(由32mm*32mm改为31.7mm*31.7mm)时,回波损耗在-12.5dB左右,频带宽度在2.39 GHz-2.50GHz,频点正好在2.45GHz。
由远场方向图可知,在此位置仍有一个小的背瓣。探针在这个位置(X轴)工作特性不错,工作频带也较宽。
4.3 改变探针半径
在4.2的基础上,将探针半径改为0.4mm,其他条件不变,则所形成的反射系数图和2D辐射远场方向图如图19,图20所示。
图 19 反射系数图曲线(探针半径0.4mm)
图20 2D辐射远场方向图(探针半径0.4mm)分析:① 在上一步的基础上,改变探针半径(由0.5mm改为0.4mm)时,回波损耗在-14.1dB左右,频带宽度在2.40 GHz-2.52GHz,频点正好在2.46GHz。
② 由远场方向图可知,在此位置仍有一个小的背瓣。
③ 此时,探针不在工作频点,可知探针半径太小,但由上研究可知,半 径在稍微改大一点应该可以使探针工作在2.45 GHz(这个问题由于时间问题没研究)。
总结:
① 当频率低于工作频点时,优化天线的措施有:改变探针位置、探针半径、贴片尺寸等,均可以使其工作在频点(如2.45GHz)。
② 对于矩形贴片可知:当探针在坐标轴上时,天线性能不是很理想;当在对角线上时,天线的性能较理想,工作频带较在坐标轴的位置要窄,而且探针在对角线上靠近中心的位置上,天线的性能更好。
③ 当改变探针半径时,半径减小,工作频率变大。通过调整可以使贴片工作在频点。设计体会
微波课设在短短的几天时间里完成了。首先非常感谢老师以及各位学长的帮助和指导。
由于老师已经在指导书上列出了很详细的操作步骤,设计思路都体现在里面,因此这次课设上手还是很快的。这使我们能够很快的把握住设计思路,进一步学会如何利用HFSS10这款软件设计微带天,并通过所形成的远区辐射场图和S曲线分析矩形微带天线的特性。学习将基础的理论知识应用到微带天线的实际设计中。做完之后再回头想一下,按照公式计算出来的矩形天线的参数运用到实际时,并不能使天线达到理想的辐射状态。这可能是由于一些共识的近似表示以及实际天线所处环境等因素造成。由此可知,在具体设计微带天线时要根据实际的情况对天线进行优化处理,使其达到理想辐射特点。当然在做实验时并不是特别顺利,所幸的是,在老师和几位学长的帮助指导下解决了,并从中学到很多东西。
此外,在这次课设中同学间的配合也是相当重要的。每个学生对老师课堂所讲的内容的接收程度不同。只有同学间的相互配合,提出问题,然后讨论最后解决,才能使课设结果达到更好的效果。参考文献
《微波天线与技术》 西安电子科技大学出版社 刘学观 郭辉萍 编著。
第三篇:北邮操作系统第二次实验[模版]
北京邮电大学操作系统实验实验报告
班号:2011211314姓名:oneseven学号:
实验日期: 2013.12.16 实验名称: 操作系统实验
一、实验目的
通过模拟实现内存分配的伙伴算法和请求页式存储管理的几种基本页面置换算法,了解存储技术的特点。掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想和实现过程,并比较它们的效率。
二、实验内容
1.实现一个内存管理的伙伴算法,实现内存块申请时的分配和释放后的回收。
实验准备
用随机函数仿真进程进行内存申请,并且以较为随机的次序进行释放。对其碎片进行统计,当申请分配内存失败时区分实际空间不足和由于碎片而不能满足。
2.设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。
1)最佳置换算法(Optimal)
2)先进先出法(Fisrt In First Out)
3)最近最久未使用(Least Recently Used)4)最不经常使用法(Least Frequently Used)
其中,命中率=1-页面失效次数/页地址流长度。试对上述算法的性能加以较各:页面个数和命中率间的关系;同样情况下的命中率比较。
实验准备
本实验中主要的流程:首先用srand()和rand()函数定义和产生指令序列,然后将指令序列变换成相应的页地址流,并针对不同的算法计算出相应的命中率。
实验可先从一个具体的例子出发。
(1)通过随机数产生一个指令序列,共2048条指令。指令的地址按下述原则生成: A:50%的指令是顺序执行的
B:25%的指令是均匀分布在前地址部分 C:25%的指令是均匀分布在后地址部分 具体的实施方法是:
A:在[0,1023]的指令地址之间随机选取一起点m B:顺序执行一条指令,即执行地址为m+1的指令
C:在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’ D:顺序执行一条指令,其地址为m’+1 E:在后地址[m’+2,2047]中随机选取一条指令并执行 F:重复步骤A-E,直到2048次指令(2)将指令序列变换为页地址流 设:页面大小为4K;
用户内存容量4页到32页; 用户虚存容量为32K。
在用户虚存中,按每K存放64条指令排列虚存地址,即2048条指令在虚存中的存放方式为:
第 0 条-第 63 条指令为第0页(对应虚存地址为[0,63])第64条-第127条指令为第1页(对应虚存地址为[64,127])
………………………………
-1- 第1984条-第2047条指令为第31页(对应虚存地址为[1984,2047])按以上方式,用户指令可组成32页。
以此为基础,给出较为一般的情形:仿真内存容量和虚存容量参数变化时的情形。
3.实现内存的slab分配器:
其基本思想是:一次向内核获取整数页,slab根据数据结构的大小进行划分为一个个小的数据结构,当需要时直接从该链表上摘取一个返回应用程序,当应用程序释放时,而非真正释放,只需要该空间放回到链表中,当分散的一页多块又聚集一页时,又会拼成一页,同时判断slab空闲的页数,如果空闲页超过一定的页数,就会向系统释放一定的页数。一个slab分配器只能管理一个指定大小的数据结构分配。
三、项目要求及分析
3.1实现一个内存管理的伙伴算法,实现内存块申请时的分配和释放后的回收。假设系统的可利用内存空间容量为2m个字(地址从0到2m-1),则在开始运行时,整个内存区是一个大小为2m的空闲块,在运行了一段时间之后,被分隔成若干占用块和空闲块。为了在分配时查找方便起见,我们将所有大小相同的空闲块建于一张子表中。每个子表是一个双重链表,这样的链表可能有m+1个,将这m+1个表头指针用向量结构组织成一个表,这就是伙伴系统中的可利用空间表,如图所示:
分配算法:
当用户提出大小为n的内存请求时,首先在可利用表上寻找结点大小与n相匹配的子表,若此子表非空,则将子表中任意一个结点分配之即可;若此子表为空,则需从结点更大的非空子表中去查找,直至找到一个空闲块,则将其中一部分分配给用户,而将剩余部分插入相应的子表中。
若2k-1 < n ≤ 2k-1,又第k+1个子表不空,则只要删除此链表中第一个结点并分配给用户即可;若 2k-2 < n ≤ 2k-1-1,此时由于结点大小为2k-1 的子表为空,则需从结点大小为2k 的子表中取出一块,将其中一半分配给用户,剩余的一半作为一个新结点插入在结点大小为2k-1的子表中,若2k-i-1 < n ≤ 2k-i-1(i为小于是的整数),并且所有结点小于2k的子表均为空,则同样需从结点大小为2k的子表中取出一块,将其中2k-i的一小部分分配给用户,剩余部分分割成若干个结点分别插入在结点大小为2k-1、2k-
2、…、2k-i的子表中。回收算法:
在用户释放不再使用的占用块时,系统需将这新的空闲块插入到可利用空间表中去。这里,同样有一个地址相邻的空闲块归并成大块的问题。但是在伙伴系统中仅考虑互为“伙伴”的两个空闲块的归并。
何谓“伙伴”?如前所述,在分配时经常需要将一个大的空闲块分裂成两个大小相等的存
-2- 储区,这两个由同一大块分裂出来的小块就称之“互为伙伴”。例如:假设p为大小为pow(2,k)的空闲块的初始地址,且p MOD pow(2,k+1)=0,则初始地址为p和p+pow(2,k)的两个空闲块互为伙伴。在伙伴系统中回收空闲块时,只当其伙伴为空闲块时才归并成大块。也就是说,若有两个空闲块,即使大小相同且地址相邻,但不是由同一大块分裂出来的,也不归并在一起。
由此,在回收空闲块时,应首先判别其伙伴是否为空闲块,若否,则只要将释放的空闲块简单插入在相应子表中即可;若是,则需在相应子表中找到其伙伴并删除之,然后再判别合并后的空闲块的伙伴是否是空闲块。依此重复,直到归并所得空闲块的伙伴不是空闲块时,再插入到相应的子表中去。
3.2.设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。
页式虚拟存储器实现的一个难点是设计页面调度(置换)算法,即将新页面调入内存时,如果内存中所有的物理页都已经分配出去,就要按某种策略来废弃某个页面,将其所占据的物理页释放出来,供新页面使用。页面替换算法主要用于如下几个地方:
(1)虚拟存储器中,主存页面(或程序段)的替换。
(2)Cache中的块替换。
(3)虚拟存储器的快慢表中,快表的替换。
(4)虚拟存储器中,用户基地址寄存器的替换。
在虚拟存储器中常用的页面替换算法有如下几种:
(1)最优替换算法,即OPT算法(OPTimal replacement algorithm)。上面介绍的几种页面替换算法主要是以主存储器中页面调度情况的历史信息为依据的,它假设将来主存储器中的页面调度情况与过去一段时间内主存储器中的页面调度情况是相同的。显然,这种假设不总是正确的。最好的算法应该是选择将来最久不被访问的页面作为被替换的页面,这种替换算法的命中率一定是最高的,它就是最优替换算法。
要实现OPT算法,唯一的办法是让程序先执行一遍,记录下实际的页地址流情况。根据这个页地址流才能找出当前要被替换的页面。显然,这样做是不现实的。因此,OPT算法只是一种理想化的算法,然而,它也是一种很有用的算法。实际上,经常把这种算法用来作为评价其它页面替换算法好坏的标准。在其它条件相同的情况下,哪一种页面替换算法的命中率与OPT算法最接近,那么,它就是一种比较好的页面替换算法。(2)先进先出算法,即FIFO算法(First-In First-Out algorithm)。这种算法选择最先调入主存储器的页面作为被替换的页面。它的优点是比较容易实现,能够利用主存储器中页面调度情况的历史信息,但是,没有反映程序的局部性。因为最先调入主存的页面,很可能也是经常要使用的页面。
(3)最久没有使用算法,即LRU算法(Least Recently Used algorithm)。这种算法把近期最久没有被访问过的页面作为被替换的页面。它把LFU算法中要记录数量上的“多”与“少”简化成判断“有”与“无”,因此,实现起来比较容易。
(4)近期最少使用算法,即LFU算法(Least Frequently Used algorithm)。这种算法选择近期最少访问的页面作为被替换的页面。显然,这是一种非常合理的算法,因为到目前为止最少使用的页面,很可能也是将来最少访问的页面。该算法既充分利用了主存中页面调度情况的历史信息,又正确反映了程序的局部性。但是,这种算法实现起来非常困难,它要为每个页面设置一个很长的计数器,并且要选择一个固定的时钟为每个计数器定时计数。在选择被替换页面时,要从所有计数器中找出一个计数值最大的计数器。因此,通常采用如下一种相 -3- 对比较简单的方法。
3.3实现内存的slab分配器
slab描述符和空闲对象管理部分成为 slab的管理部分,也可以称为slab头
slab的头可以放在slab自身,也可以放在 slab 之外。如果slab头放在了slab 之外,那么用户申请obj时,需要首先访问 slab头,slab头提供未使用free obj的指针
然后再访问这个free obj的地址。完成这项工作需要访问2个页块。会带来效率上的损失。slab头始终位于slab 也存在问题,比如一个页面只有4K,objsize = 2K,那么slab 头在slab 上,就意味着,这个4K的页面只能够分配一个obj。造成了内存的浪费。
如果 页数太少,存放的 obj个数少,那么 增加管理开销,同时 内存使用率低,如果页数太多对伙伴内存系统不好,所以需要一定的策略妥协。
这个妥协过程是有calculate_slab_order 这个函数来实现的。从 0阶(即一页)到kmalloc的最高阶 KMALLOC_MAX_ORDER,挨个尝试,由cache_estimate这个函数计算 如果选用order 阶,那么能分配 多少个 obj(num),剩余空间是多少(remainder)。所谓剩余空间,就是除去slab头(如果有的话),除去 obj*num,剩下的边角料空间是多少。需要分成两种情况去计算,分成两种情况的原因,很快就能看到 A)slab头不在slab上,即 flag & CFLGS_OFF_SLAB == 1的时候 这种情况比较简单,由于管理数据完全不在slab 上,size_tslab_size = PAGE_SIZE < 换句话,slab头的大小取决于obj的个数,obj的个数取决于 slab头的大小,四、具体实现 4.1实现一个内存管理的伙伴算法,实现内存块申请时的分配和释放后的回收。 程序: #include #define MIN_MOMORY_SIZE 536870912 //随机产生的最小内存空间 #define WORKTIME 1500 //系统工作时间 #define MAX_REQ_SIZE 268435456 //申请空闲内存分配的最大容量:256M #define MIN_DUE 30 //使用内存块的最短时间 #define MAX_DUE 90 //使用内存块的最长时间 #define OCCUPY_INTERVAL 60 //每次分配的最大间隔 #define USED 1 //内存块被使用 #define UNUSED 0 //内存块未被使用 //内存块链表结点结构 typedefstructbuddy_node { int flag; //标记空间是否被使用 -4- int base; //本块儿内存的基地址 int occupy; //实际使用空间大小 int fragment; //碎片大小 intduetime; //使用时间 structbuddy_node *nextPtr; //指向下一个结点 } Buddy, *BuddyPtr; IndexTable table[INDEX_SIZE];//使用哈希表管理伙伴系统 int ready = 0; //需要分配内存的时刻 intavailSpace; //可分配空间大小 inttotalFragment = 0; //总碎片大小 //函数:添加结点(形参为内存块结点的信息) void insert_node(inti, intinbase, int f, intocc, int frag, int d){ BuddyPtrnewnodePtr = NULL, prePtr = NULL, curPtr = NULL; newnodePtr =(BuddyPtr)malloc(sizeof(Buddy));//分配结点 newnodePtr->base = inbase;newnodePtr->flag = f;newnodePtr->occupy = occ;newnodePtr->fragment = frag;newnodePtr->duetime = d;newnodePtr->nextPtr = NULL; if(table[i].headPtr == NULL) table[i].headPtr = newnodePtr; else { curPtr = table[i].headPtr;prePtr = NULL; //按地址顺序插入内存块 while(curPtr&&curPtr->base } if(prePtr == NULL){ //插在最前 newnodePtr->nextPtr = curPtr; table[i].headPtr = newnodePtr; } else if(curPtr == NULL){ //插在最后 prePtr->nextPtr = newnodePtr; } else { //插在中间 prePtr->nextPtr = newnodePtr;newnodePtr->nextPtr = curPtr; -5- } } } //函数:删除结点 intdelete_node(inti, BuddyPtrdelPtr){ BuddyPtrprePtr = NULL, curPtr = NULL;intbasehold = delPtr->base; curPtr = table[i].headPtr; while(curPtr!= delPtr){ //寻找要删除的结点的位置 prePtr = curPtr;curPtr = curPtr->nextPtr; } if(prePtr == NULL) //要删除的结点在最前 table[i].headPtr = curPtr->nextPtr; else //要删除的结点不在链表的最前 prePtr->nextPtr = curPtr->nextPtr; free(curPtr); //释放结点 return basehold; //返回删除的内存块结点的基地址 } //函数:伙伴系统的分配算法 void buddy_allocate(inttime_slice){ inti, j, size, due;int state = 0; //分配状态:0为未分配,1为已分配 intinbase, basehold;BuddyPtrcurPtr = NULL; if(ready == time_slice){ //到达分配内存的时刻 printf(“Time %d:”, time_slice); size = 1 + rand()% MAX_REQ_SIZE; //申请使用内存的大小 due = MIN_DUE + rand()%(MAX_DUEsize;curPtr->duetime = due + ready; //修改可系统分配空间和碎片大小 availSpace-= table[i].nodesize;totalFragment += curPtr->fragment; state = 1;//标记已分配 break; } //空闲块的大小刚大于申请大小的2倍 else { basehold = delete_node(i, curPtr);//删除较大的空闲块并保留其基地址 inbase = basehold + table[i].nodesize; j = i; //分割空闲块 do { j--;inbase-= table[j].nodesize; //设置要添加内存块结点的基地址 insert_node(j, inbase, UNUSED, 0, 0, 0);//添加较小的空闲块 printf(“A block cut takes placen”); } while(table[j].nodesize / size > 1); //分配 insert_node(j, basehold, USED, size, table[j].nodesizesize; state = 1;//标记已分配 } } //块被占用,查看下一结点 else curPtr = curPtr->nextPtr; } } } printf(“Allocated %d,Fragment %d,Due %dn”, size, totalFragment, ready+due); -7- } else if((availSpace< size)&&((availSpace + totalFragment)>= size))printf(“Allocation failed because of fragment!n”); else printf(“Allocation failed because of no enough unused space!n”); ready +=(1 + rand()% OCCUPY_INTERVAL);//下次需要分配内存的时刻 } } //函数:伙伴系统的回收算法 void buddy_retrieve(inttime_slice){ inti, basehold, dif;int f = 0;intModnext=0;BuddyPtrcurPtr = NULL, todelPtr = NULL; //依次查找,并回收需要回收的块 for(i = 0;i< INDEX_SIZE;i ++){ if(table[i].headPtr){ curPtr = table[i].headPtr; while(curPtr){ if((curPtr->flag == USED)&&(curPtr->duetime == time_slice)){//需要回收 //修改可系统分配空间和碎片大小 availSpace += table[i].nodesize;totalFragment-= curPtr->fragment; //回收为空闲块 curPtr->flag = UNUSED;curPtr->occupy = 0;curPtr->fragment = 0;curPtr->duetime = 0;printf(“Time %d:Retrieve %d,Fragment %dn”, time_slice, table[i].nodesize, totalFragment); } curPtr = curPtr->nextPtr; } } } //合并空闲块 for(i = 0;i< INDEX_SIZE;i ++){ if(table[i].headPtr){ -8- curPtr = table[i].headPtr; while(curPtr&&curPtr->nextPtr){ //将地址连续且都为空闲的块合并后加入下一级的链表中 if(curPtr->flag == UNUSED &&(curPtr->nextPtr)->flag == UNUSED){ dif =(curPtr->nextPtr)->base-curPtr->base; Modnext =((int)(curPtr->nextPtr->base))%(2*table[i].nodesize); if((dif == table[i].nodesize)&&(Modnext==0)){ //删除两个结点 todelPtr = curPtr;curPtr = curPtr->nextPtr;basehold = delete_node(i, todelPtr);todelPtr = curPtr;curPtr = curPtr->nextPtr;delete_node(i, todelPtr);insert_node(i+1, basehold, UNUSED, 0, 0, 0);//添加合并后的结点 printf(“Two blocks mergen”); } else curPtr = curPtr->nextPtr; } else curPtr = curPtr->nextPtr; } } } } //函数:伙伴系统的处理过程 void buddy_system(void){ inttime_slice = 0; //在每个时间片内使用分配算法和回收算法 for(;time_slice< WORKTIME;time_slice ++){ buddy_allocate(time_slice); //分配算法 buddy_retrieve(time_slice); //回收算法 } } int main(intargc, char *argv[]){ intmemory_size; -9- ini_index(); //初始化哈希索引表 srand(time(NULL)); //设置随机数种子 //随机产生需要管理的内存大小:512M ~ 1G memory_size = MIN_MOMORY_SIZE + rand()% MIN_MOMORY_SIZE;printf(“The size of memory is:%dn”, memory_size); int_system(memory_size); //初始化伙伴系统 buddy_system(); //伙伴系统的处理过程 printf(“Time %d:System execution stops and the spaces are all freed.n”, WORKTIME); free_system(); //释放所有结点 system(“pause”); return 0;} 4.2.设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。程序: #include //虚页长 #define clear_period 50 //清零周期 typedefstruct { intpn; //页号 intpfn; // 面号 int counter; // 一个周期内访问该页面的次数 int time; // time为访问时间 }pl_type;pl_typepl[total_vp];//页面结构数组 structpfc_struct{ //页面控制结构 intpn,pfn;structpfc_struct *next;};typedefstructpfc_structpfc_type; -10- pfc_typepfc[total_vp],*freepf_head,*busypf_head,*busypf_tail;intdiseffect,a[total_instruction];int page[total_instruction], offset[total_instruction];/* Name: void Lprintf(void) Achieve: 格式控制 */ void Lprintf(void){ inti,j;printf(“|”); for(i = 1;i<=6;i++) { for(j = 1;j<=9;j++)printf(“-”); if(i!=6)printf(“+”); } printf(“|n”); } /* Name: void initialize(inttotal_pf) Achieve:初始化相关数据结构 */ void initialize(inttotal_pf){ inti;diseffect=0; for(i=0;i { pl[i].pn=i;pl[i].pfn=INVALID; //置页面控制结构中的页号,页面为空 pl[i].counter=0;pl[i].time=-1;//页面控制结构中的访问次数为0,时间为-1 } for(i=1;i { pfc[i-1 ].next=&pfc[i];pfc[i-1].pfn=i-1;//建立pfc[i-1]和pfc[i]之间的连接 } pfc[total_pf-1].next=NUL;pfc[total_pf-1].pfn=total_pf-1; freepf_head=&pfc[0]; //页面队列的头指针为pfc[0] } /* -11- Name:void FIFO(inttotal_pf) Achieve:先进先出法(Fisrt In First Out)*/ void FIFO(inttotal_pf){ inti,j;pfc_type *p;//中间变量 initialize(total_pf);//初始化相关页面控制用数据结构 busypf_head=busypf_tail=NULL;//忙页面队列头,队列尾链接 for(i=0;i if(pl[page[i]].pfn==INVALID) //页面失效 { diseffect+=1;//失效次数 if(freepf_head==NULL)//无空闲页面 { p=busypf_head->next; pl[busypf_head->pn].pfn=INVALID; freepf_head=busypf_head;//释放忙页面队列的第一个页面 freepf_head->next=NULL;//表明还是缺页*/ busypf_head=p; } p=freepf_head->next; freepf_head->pn=page[i]; pl[page[i]].pfn=freepf_head->pfn; freepf_head->next=NULL;//使busy的尾为null if(busypf_tail==NULL) { busypf_tail=busypf_head=freepf_head; } else { busypf_tail->next=freepf_head; busypf_tail=freepf_head; } freepf_head=p; } } printf(“%6.3f”,1-(float)diseffect/320);} /* Name: void LRU(inttotal_pf) Achieve: 最近最久未使用(Least Recently Used)*/ -12- void LRU(inttotal_pf){ intmin,minj,i,j,present_time;//minj为最小值下标 initialize(total_pf);present_time=0;for(i=0;i if(pl[page[i]].pfn==INVALID)//页面失效 { diseffect++; if(freepf_head==NULL)//无空闲页面 { min=32767;//设置最大值 for(j=0;j { if(min>pl[j].time&&pl[j].pfn!=INVALID) { min=pl[j].time; minj=j; } } freepf_head=&pfc[pl[minj].pfn]; //空出一个单元 pl[minj].pfn=INVALID; pl[minj].time=0; freepf_head->next=NULL; } pl[page[i]].pfn=freepf_head->pfn;//有空闲页面,改为有效 pl[page[i]].time=present_time; freepf_head=freepf_head->next;//减少一个free 页面 } else { pl[page[i]].time=present_time;//命中则增加该单元的访问次数 present_time++; } } printf(“%6.3f”,1-(float)diseffect/320);} /* Name:void OPT(inttotal_pf) Achieve:最佳置换算法(Optimal)*/ void OPT(inttotal_pf){ -13- inti,j, max,maxpage,d,dist[total_vp];pfc_type *t;initialize(total_pf);for(i=0;i if(pl[page[i]].pfn==INVALID) /*页面失效*/ { diseffect++; if(freepf_head==NULL) /*无空闲页面*/ { for(j=0;j { if(pl[j].pfn!=INVALID) dist[j]=32767; else dist[j]=0; } for(j=0;j { if((pl[j].pfn!=INVALID)&&(dist[j]==32767)) { dist[j]=j; } } max=0; for(j=0;j if(max { max=dist[j]; maxpage=j; } freepf_head=&pfc[pl[maxpage].pfn]; freepf_head->next=NULL; pl[maxpage].pfn=INVALID; } pl[page[i]].pfn=freepf_head->pfn; freepf_head=freepf_head->next; } } printf(“%6.3f”,1-(float)diseffect/320);} /* Name: vodi LFU(inttotal_pf) Achieve:最不经常使用法(Least Frequently Used) -14- */ void LFU(inttotal_pf) { inti,j,min,minpage;pfc_type *t;initialize(total_pf);for(i=0;i if(pl[page[i]].pfn==INVALID)//页面失效 { diseffect++; if(freepf_head==NULL)//无空闲页面 { min=32767; //获取counter的使用用频率最小的内存 for(j=0;j { if(min>pl[j].counter&&pl[j].pfn!=INVALID) { min=pl[j].counter; minpage=j; } } freepf_head=&pfc[pl[minpage].pfn]; pl[minpage].pfn=INVALID; pl[minpage].counter=0; freepf_head->next=NULL; } pl[page[i]].pfn=freepf_head->pfn;//有空闲页面,改为有效 pl[page[i]].counter++; freepf_head=freepf_head->next;//减少一个free 页面 } else { pl[page[i]].counter; pl[page[i]].counter=pl[page[i]].counter+1; } } printf(“%6.3f”,1-(float)diseffect/320);} int main(int){ intS,i; -15- srand((int)getpid()); for(i=0;i { S=(int)rand()%320; a[i]=S; //任选一指令访问点 a[i+1]=a[i]+1;//顺序执行一条指令 a[i+2]=(int)rand()%a[i+1];//执行前地址指令m' a[i+3]=a[i+2]+1;//顺序执行一条指令 a[i+4]=(int)rand()%(319-a[i+2]-1)+a[i+2]+2;//执行后地址指令 } for(i=0;i { page[i]=a[i]/10; offset[i]=a[i]%10;} printf(“FrametOPTtFIFOtLRUtLFU n”);for(i=4;i<=32;i++)//用户内存工作区从4个页面到32个页面 { printf(“%dt”,i);OPT(i);printf(“t”); FIFO(i);printf(“t”); LRU(i); printf(“t”); LFU(i); printf(“n”);} system(“pause”);return 0;} 4.3 实现内存的slab分配器 程序: #include -17- } 五、调试运行结果 -18- 5.1 实现一个内存管理的伙伴算法 5.2设计一个虚拟存储区和内存工作区,并使用下述算法计算访问命中率。 -19- 5.3 实现内存的slab分配器 六、所遇问题及解决方法 1.在写第一个程序的时候,对树的合并在之前的学习中,有比较多的学习,数据结构中此程序有详细的介绍,因此在编写这个程序的时候,比较顺利的完成了要求。但要求中需要产生一些随机的数据,重新对随机仿真函数进行回顾,最后较为顺利的完成了程序。2.第二个程序,要求随机产生一些数据,对srand()和rand()函数定义和产生指令序列,在进一步的学习中,完成了这些函数,仿真内存容量和虚存容量参数变化时的情形,对此不太熟悉,四个算法对要求较高,在完成算法的学习后,完成了程序。 3.第三个程序因不太理解其要求,上网搜寻了一些代码,但对其最后的结果依然没有得出,为此询问了同学,但不知是否正确。 -20- 实验七 微带缝隙天线仿真设计 姓名:李杰 学号:11081536 上课时间:周二下午 一.实验目的 1、了解微带缝隙天线的概念。 2、掌握MWO EM structure仿真方法。 3、掌握天线基本参数及优化设计方法。 二.实验要求 1.熟悉利用MWO软件进行EM仿真。2.熟悉微带天线基本特性。 3.了解WMO原理图引入 EM 结构方法。 4.利用MWO分析天线工作特性(反射,方向图等)。 三.实验原理 1、微带缝隙天线 这种天线由三层组成:上层为金属层(构成槽线、微带线的地),中间为介质基板,下层为金属层来构成微带导带。 微带天线的概念早在1953年就G.A.DeSchampS提出,在20世纪50年代和60年代只有一些零星的研究。直到20世纪70年代初期,当微带传输线的理论模型及对敷铜的介质基片的光刻技术发展之后,第一批具有许多设计结构的实用的微带天线才被制造出来。缝隙天线最早是在1946年H.G.Booker提出的,同微带天线一样最初没有引起太多的注意。缝隙天线可以借助同轴电缆很方便地馈送能量,也可用波导馈电来实现朝向大平片单侧的辐射,还可以在波导壁上切割出缝隙的阵列。缝隙开在导电平片上,称为平板缝隙天线;开在圆柱面上,称为开缝圆柱天线。开缝圆柱导体面是开缝导体片至开缝圆柱导体面的进化。波导缝隙阵天线由于其低损耗、高辐射效率和性能等一系列突出优点而得到广泛应用:而平板缝隙天线却因为损耗较大,功率容量低,效率不高,导致发展较为缓慢。到1972年,Y.Yoshimura明确提出微带馈电缝隙天线的概念。微带天线特点 具有以下优点:馈电网络和辐射单元相对分离,从而把馈线对天线辐射方向图的影 响降到最小,对制造公差要求比贴片天线低,可用标准的光刻技术在敷铜电路板上进行生产,在组阵时其单元间隔离可比贴片天线更大。特别是对于运动物体所用天线,微带缝隙天线可以说是理想的选择,因为它可以与物体的表面做得平齐,没有凸起部分,用于快速飞行器表面时不会带来附加的空气阻力,既隐蔽又不影响物体的运动。 四.实验内容及结果 用MWO创建一个电磁结构(EM structure)并仿真。它包含以下几个步骤: 1.创建 EM structure 2.建立 an enclosure 3.创建层 4.定义端口配置计算网格 5.观察电流密度和电场强度 6.观察smith圆图和方向图 7.执行频率扫描(AFS)8.将EM structure添加到原理图并仿真 Step1: 创建 EM structure Step2: 设定 Enclosure Step3: 创建层并定义端口配置计算网格 Step4:经过一系列设置,进行仿真得 1)天线方向图(fixed theta 选择0~90若干取值,这里为0,10,30,45,70,90) 2)反射系数 3)3D试图观察微带缝隙天线基本结构 Step5: 修改enclosure option设置 Step6: 新建回波损耗特性图,运行仿真,得到输出回波损耗特性图 Step7: 新建匹配电路 Step8: 运行仿真,得到 1)反射系数图 2)输出回波损耗特性图 Step9: 观察该微带缝隙天线的电流和电场 电流: 电场: 四.心得体会 通过本次实验,我了解了微带缝隙天线的概念,掌握了MWO EM structure仿真方法和天线基本参数及优化设计方法,受益匪浅。 实验 二、16QAM调制 一、实验目的 1、学会使用SystemView观察信号的星座图与眼图,分析性能 2、学习正交幅度调制解调的基本原理。 二、实验原理 1、正交幅度调制 QAM是由两个正交载波的多电平振幅键控信号叠加而成的,因此正交幅度调制是一种频谱利用率很高的调制方式。同时利用已调信号在同一带宽内频谱正交的性质来实现两路并行的数字信息在一个信道中传输。 2、调制原理 3、解调原理 4、眼图 眼图的“眼睛”的大小代表码间串扰的情况。“眼睛”张开的越大,表示码间串扰越小;反之表示码间串扰越大。 5、星座图 我们通常把信号矢量端点的分布图称为星座图。它对于调制方式的误码率有很直观的判断。 三、实验内容 1、在system view软件中做出仿真连线图。 2、设置参数,观察调制信号波形 3、眼图设置:在SystemView中,在分析窗口单击图标,选择style,单击slice,并且设置合适的起点和终点的时间切片,然后选择信号后,得到眼图。 4、星座图设置:在SystemView中,在分析窗口中单击图标,选择style,单击scatter plot,在右侧的窗口中选择所需要观察的信号波形,确定,得到星座图。 5、设置无噪声和有噪声情况参数,对眼图和星座图进行对比分析。 四、实验结果 1、无噪声情况下,即序列均值为0,方差为0。原基带信号: 调制信号(同向) (正交) 无噪眼图: 无噪星座图: 2、有噪声:均值为0,方差为1 眼图(有噪): 星座图(有噪): 五、结果分析 从上述实验结果图中可以看出: 1、原基带信号经过调制后,同向正交都满足。 2、在无噪情况下,眼图较清晰,眼睛睁开较大,表明码间干扰较小; 星座图能量较规整,误码率相对较低。 3、在有噪情况下,眼图较,眼睛睁开较小,表明码间干扰较大; 星座图能量杂乱,误码率较高。 4、可见,噪声对系统性能有一定影响。 六、心得体会 通过这次实验,我在通原理论的基础上又比较系统地了解了16QAM的调制与解调,在做实验仿真时总会遇到各种问题,在这种情况下就会努力找到最饥饿路径解决问题,无形间提高了我们的动手和动脑能力,并且同学之间还能相互探讨,相互促进吧。 通过实验我也知道了平时所学如果不加以实践的话等于纸上谈兵。在实验中我们对16QAM的调制解调在噪声存在与否、滤波带宽、阶数等参数进行不同设置,特别好地从不同方面、深入地理解通信的知识。第四篇:微波实验七
第五篇:北邮通信原理通原实验16QAM