社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

零基础入门智能射频——Python与HFSS联合仿真之Bilog对数周期天线设计(二)

微波射频网 • 3 年前 • 246 次点击  

《零基础入门智能射频》专栏#使用Python+射频搭建一个射频开发架构,将不同的软件连接起来提供一站式服务,提供接口让设计师更专注于业务开发,不再疲惫于学习软件使用操作,让人工智能与射频来一次邂逅,将碰撞出怎样的火花呢,拭目以待吧。

现货供应|200多款射频转接器 穿墙/法兰/精密型/经济型等各种型号 无起订量要求 当天发货
1  前言
上节我们学习了基本的LPDA天线的设计原理,并实现了Python与HFSS联合仿真,完成了LPDA的建模、参数设置至仿真运行(基于Python的PCB对数周期天线设计(一) |零基础入门智能射频)。下面继续先学习一种新型的LPDA天线获得更宽的带宽与良好的驻波比。
2  Bilog对数周期偶极子天线理论
2.1  BOWTIE天线
蝴蝶结天线可通过简单的加载设计轻松实现工作频段内的阻抗匹配,如图1(a)所示。图中的尾部为这里提到的蝴蝶结天线,它是一种平面天线,其辐射方向为振子平面的法线方向,因此十分合适作为LPDA天线中的加载部分。
蝴蝶结天线最初是由双锥天线演化而言,传统的双锥天线如图1(b)所示,调整夹角可优化电抗部分。
     
(a)                                         (b)
图1 BOW TIE天线
有限双锥天线的输入阻抗由锥角决定,见下式。
Zin=Zc=120lnctg(θ/2)
锥体长度并没有最佳的计算公式,目前可由HFSS辅助设计。
2.2  对数周期偶极子天线设计
从上节可知,目前比较实用的LPDA设计法是由卡雷尔提出的。如图2所示,Ln表示每个偶极子天线的长度,每个天线振子的末端用一条线连接,其延长线相较于一点,其被称为虚拟顶点,夹角为α。从虚拟顶点对每个天线单元的垂直距离由Rn表示,各偶极子间距为Sn,每个振子的直径为dn。
a) 天线结构
b) 增益和τ、σ的关系
图 2 LPDA结构与参数
上图(b)给出了LPDA中增益和τ、σ的关系曲线,可知,调整缩放因子可设置天线的增益,同时高增益必然需要较长的天线。
LPDA各参数如下:
顶角α
式中,τ是比例因子,σ是间隔因子。τ、σ的关系
下式中的频率fn+1与fn是相邻的两个周期, LPDA天线以常数的对数为周期,表明fn+1与fn处天线有相同的性能。
3  Bilog对数周期偶极子天线联合仿真设计
3.1  项目实例
图7所示,在HFSS建立一个300MHz~1000MHz的BilogLPDA。
a)参数计算
按照2.4节的计算公式,首先确定比例因子τ和间隔因子σ,这两个参数同时决定了设计的PCB LPDA天线的尺寸。
步骤如下:
1) τ=0.822、σ=0.149;
2) 计算顶角α;
3) 确定300MHz的波长和1000MHz的波长;
4) 依据上节公式依次计算出各个振子的长度。
将LPDA和双锥天线组合得到最终的天线结构,如图3所示。
图 3 LPDA 天线
b)python建模脚本语言
由计算公式编程python代码,实现复杂的建模过程自动化。本系列将推出视频教程,并结合视频教程提供对应的API接口,供大家学习调用。
部分示例代码如下:
oDesktop = oAnsoftApp.GetAppDesktop()
oProject.InsertDesign("HFSS", "HFSSDesign1", "DrivenModal", "")
oDesign = oProject.SetActiveDesign("HFSSDesign1")
oEditor = oDesign.SetActiveEditor("3D Modeler")
oModule = oDesign.GetModule("BoundarySetup")
oModule = oDesign.GetModule("AnalysisSetup")
oModule.InsertSetup("HfssDriven",
         [
                 "NAME:Setup1",
                 "AdaptMultipleFreqs:="     , False,
                 "Frequency:="              , "500MHz",
                 "MaxDeltaS:="              , 0.02,
                 "PortsOnly:="              , False,
                 "UseMatrixConv:=" , False,
                 "MaximumPasses:=" , 6,
                 "MinimumPasses:=" , 1,
                 "MinimumConvergedPasses:=", 1,
                 "PercentRefinement:="      , 30,
                 "IsEnabled:="              , True,
                 "BasisOrder:="             , 1,
                 "DoLambdaRefine:=" , True,
                 "DoMaterialLambda:="       , True,
                 "SetLambdaTarget:="        , False,
                 "Target:="                 , 0.3333,
                 "UseMaxTetIncrease:="      , False,
                 "PortAccuracy:="  , 2,
                 "UseABCOnPort:="  , False,
                 "SetPortMinMaxTri:="       , False,
                 "UseDomains:="             , False,
                 "UseIterativeSolver:="     , False,
                 "SaveRadFieldsOnly:="      , False,
                 "SaveAnyFields:=" , True,
                 "IESolverType:="  , "Auto",
                 "LambdaTargetForIESolver:=", 0.15,
                 "UseDefaultLambdaTgtForIESolver:=", True,
                 "RayDensityPerWavelength:=", 4,
                 "MaxNumberOfBounces:="     , 5,
                 "InfiniteSphereSetup:="    , -1,
                 "SkipSBRSolveDuringAdaptivePasses:=", True
         ])
oEditor.Delete(
[
                 "NAME:Selections",
                 "Selections:="             , "spacing"
         ])
oModule = oDesign.GetModule("BoundarySetup")
oModule.AssignPerfectE(
         [
                 "NAME:PerfE1",
                 "Objects:="                , ["element1"],
                 "InfGroundPlane:=" , False
         ])
oDesign.SetDesignSettings(
         [
                 "NAME:Design Settings Data",
                 "Use Advanced DC Extrapolation:=", False,
                 "Use Power S:="            , False,
                 "Export After Simulation:=", False,
                 "Allow Material Override:=", True,
                 "Calculate Lossy Dielectrics:=", False,
                 "Perform Minimal validation:=", False,
                 "EnabledObjects:=" , [],
                 "Port Validation Settings:=", "Standard"
         ],
         [
                 "NAME:Model Validation Settings",
                 "EntityCheckLevel:="       , "Strict",
                 "IgnoreUnclassifiedObjects:=", False,
                 "SkipIntersectionChecks:=", False
         ])
oModule = oDesign.GetModule("RadField")
oModule.InsertFarFieldSphereSetup(
         [
                 "NAME:Infinite Sphere1",
                 "UseCustomRadiationSurface:=", False,
                 "ThetaStart:="             , "0deg",
                 "ThetaStop:="              , "180deg",
                 "ThetaStep:="              , "2deg",
                 "PhiStart:="               , "-180deg",
                 "PhiStop:="                , "180deg",
                 "PhiStep:="                , "2deg",
                 "UseLocalCS:="             , False
         ])
oModule = oDesign.GetModule("ReportSetup")
oModule.CreateReport("S Parameter Plot 1", "Modal Solution Data", "Rectangular Plot", "Setup1 : Sweep",
         [
                 "Domain:="                 , "Sweep"
         ],
         [
                 "Freq:="          , ["All"],
                 "hh:="                    , ["Nominal"]
         ],
         [
                 "X Component:="            , "Freq",
                 "Y Component:="            , ["dB(S(1,1))"]
         ], [])
oModule.CreateReport("Gain Plot 1", "Far Fields", "3D Polar Plot", "Setup1 : LastAdaptive",
         [
                 "Context:="                , "Infinite Sphere1"
         ],
         [
                 "Phi:="                    , ["All"],
                 "Theta:="         , ["All"],
                 "Freq:="          , ["0.5GHz"],
                 "hh:="                    , ["Nominal"]
         ],
         [
                 "Phi Component:=" , "Phi",
                  "Theta Component:="        , "Theta",
                 "Mag Component:=" , ["dB(GainTotal)"]
         ], [])
Save()
AnalyzeAll()
c)  仿真结果
下图为集合线表面电流方向,两者呈现相向流动,也就是我们熟知的传输线模式,如图4所示。
图 4 集合线的电流流向
由下式计算出该传输线的阻抗。
式中,D为两者间距,d为集合线的口径。
图5-图8为LPDA的电场分布情况,可看出不同的频率下,相应频率的振子参与谐振。
图 5 0.3GHz 电场分布
图 6 500MHz在电场分布
图7和图8动态的展现了在低端和高端频率下,电场的分布情况,从中可以直观看出低频段主要是较长振子,在高频段则集中于短振子。
图 7 300MHz电场分布
图 8  1GHz在电场分布图
3.2  小结
对数周期天线加载蝴蝶结天线有效扩展天线的工作频段,并将天线尺寸控制在一定的可接受范围内,该型天线的知识点总结如下:
1) 借助合适的附加天线组合,扩展天线工作频段
2) 调整缩放因子可设置天线的增益
3) 调整集合线间距改变天线的阻抗特性
本节仅给出了示例代码,后续将推出PYTHON与HFSS联合仿真的教学视频,并提供相关调用HFSS的Python接口,供大家学习与讨论。 
上期文章:基于Python的PCB对数周期天线设计(一) |零基础入门智能射频
作者:江右射频
欢迎添加小编微信为好友

每天分享干货资料和最新活动

点击名片关注我们-学习更多干货知识

最新会议:

应对新一代无线通信技术的测试挑战(4月29日)
最新自动驾驶C-V2X HIL测试方案全讲解(4月27日)
5G端到端技术:终端、基站、网络(5月12日)
射频前端模组电磁仿真及基板PDK方案介绍(5月17日)

最新原创:

基于Python的PCB对数周期天线设计(一) |零基础入门智能射频
现货供应|200多款射频转接器 穿墙/法兰/精密型/经济型等各种型号 无起订量要求 当天发货
天线设计该如何入门
射频微波芯片设计4:耦合器芯片

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/132932
 
246 次点击