python2.4无线模块_用Python实现喇叭天线设计小工具(二)

本文通过Python实现了一个基于参数计算的喇叭天线设计工具,详细介绍了所需软件环境、理论依据及代码实现,包括输入输出参数和核心计算函数。
摘要由CSDN通过智能技术生成

摘要:本文主要介绍软件安装、参考论文,以及第一个模块——参数计算模块。

准备工作

在开始之前,请确保装了以下软件或资源(括号中是我个人推荐版本或配置,若安装有困难,请自行搜索相关教程):

Python3.x,必装(推荐直接安装Anaconda,融合了常用Python模块的开源软件,可免去自行下载各种包的麻烦)Home - Anaconda​www.anaconda.come071e7511003aa6317bdd81e3fc6efd7.png

HFSS,必装(我使用的是ANSYS Electronics Desktop19.0,如果使用其他版本的话,代码可能会有出入,但问题不大,稍作修改即可)Electromagnetic Simulation Products | ANSYS​www.ansys.com3993d4963b9926c1c8ec97ee2e69e9a9.png

IDE,可选(IDE即编程环境,我用的是Pycharm,个人比较喜欢,免费社区版即可)https://www.jetbrains.com/pycharm/​www.jetbrains.com

Python包,必装(除了打包用的cx-Freeze,没什么特殊的包,基本都是Python自带,如果后续运行报错提示缺xxx module的话,在windows命令行中输入pip install xxx,xxx为缺的包,即可)

理论部分

本文理论部分比较简单直观,只需要简单提一下。首先,参考论文链接如下:https://pan.baidu.com/s/1iggiF1ijjnuG3pBdDFrp8Q​pan.baidu.com

文章发表于2002年IEEE Antenna's and Propagation Magazine,收录于Antenna Designer's Notebooks栏目(顺便提一句,该栏目我一直很喜欢,经常介绍一些偏实际工程使用的文章,内容也很靠谱)。文章主要介绍了给定E面和H面的波束宽度,如何设计角锥喇叭,使得在满足该波束宽度要求的前提下,最大化天线的方向性系数(或增益)。

文中并没有罗列大量理论公式,因为这部分早已研究透彻,而是选用了一种为广大工程师喜闻乐见的方法:参数拟合,并给出了详尽的参数列表,从而得到了快速、方便的查表式设计公式,并给出了一些实际算例来证明理论的可靠性。

理论部分大体就是这样,当然,有兴趣的同志可以认真看一下论文和参考文献,大部分理论公式均可于Balanis那本“天线圣经”中找到更为详细的推导(参见原书第13.2章节),此处不再赘述。

编写参数计算模块

从最简单的模块入手,首先编写参数计算模块,该模块要实现参考文献的内容,即给出设计参数,返回喇叭天线的尺寸,从程序角度来看,其输入和输出如下:

输入:设计频点f0,E面波束宽度HPE,H面波束宽度HPE,波导宽边a,波导窄边b。

输出:喇叭宽边A,喇叭窄边B,喇叭长L。

显然,对于这种输入输出很单一的功能,写一个函数来实现是最为合适的,也方便后续为其他模块所调用。

代码如下:

import math

#constant

t0, s0, a0, a1, a2 = 0.375, 0.25, 0.2974, 7.0401, -37.5383

c00,c01,c10, c11, c12, c13, c14, c15 = 44.8365, 4.3374, -8.1501, -2.9183, 8.4217, -13.2623, 10.6702, -3.4713

ah, bh, ch, dh, eh, fh, gh, hh, ih = 0.3534, -5.9711, -1.5379, 13.4735, 2.4359, -13.3102, -1.6386, 4.7981, 0.6333

ae, be, ce, de, ee, fe, ge, he = 0.1962, -11.3448, -1.9135, 4.78, 5.7284, -47.9711, -4.8935, -6.4175

d0, d1, d2, d3, d4, d5, d6, d7, d8 = \

0.1020, 2.9658e-2, -2.4894e-3, -2.0962e-2, 6.3028e-4, -5.9327e-6, -0.6802, -4.4039e-2, 1.0213e-3

f00, f01, f10, f11, f12, f13, f14, f15 = 44.3672, -4.098, -8.0775, -4.2683, 14.5647, -26.1244, 23.9791, -8.7301

def calc(freq, HPE, HPH, a, b):

lam = 300 / freq

k = HPH / HPE

if k < 1:

t = t0

c0 = c00 + c01*math.log(k)

c1 = c10 + c11*k + c12*k**2 + c13*k**3 + c14*k**4 + c15*k**5

D = c0 + c1 * math.log(HPH)

s = (a0 + a1 / k**2 + a2 / D) ** (-1)

A = 0.5 * math.sqrt(

(ah + ch*t**2 + eh*t**4 + gh*t**6 + ih*t**8) / (1 + bh*t**2 + dh*t**4 + fh*t**6 + hh*t**8)) * \

lam * math.cos(HPH*math.pi/720) / math.tan(HPH*math.pi/720)

B = 0.5 * math.sqrt(

(ae + ce*s**2 + ee*s**4 + ge*s**6) / (1 + be*s**2 + de*s**4 + fe*s**6 + he*s**8)) * \

lam * math.cos(HPE*math.pi/720) / math.tan(HPE*math.pi/720)

R = A * (A - a) / (8 * lam * t)

else:

s = s0

f0 = f00 + f01 * math.log(k)

f1 = f10 + f11 / k + f12 / k**2 + f13 / k**3 + f14 / k**4 + f15 / k**5

D = f0 + f1 * math.log(HPE)

t = (d0 + d1*k + d2*k**2 + d3*D + d4*D**2 + d5*D**3) / (1 + d6*k + d7*D + d8*D**2)

A = 0.5 * math.sqrt(

(ah + ch * t ** 2 + eh * t ** 4 + gh * t ** 6 + ih * t ** 8) / (

1 + bh * t ** 2 + dh * t ** 4 + fh * t ** 6 + hh * t ** 8)) * \

lam * math.cos(HPH * math.pi / 360) / math.tan(HPH * math.pi / 720)

B = 0.5 * math.sqrt(

(ae + ce * s ** 2 + ee * s ** 4 + ge * s ** 6) / (

1 + be * s ** 2 + de * s ** 4 + fe * s ** 6 + he * s ** 8)) * \

lam * math.cos(HPE * math.pi / 360) / math.tan(HPE * math.pi / 720)

R = A * (B - b) / (8 * lam * s)

return round(A, 2), round(B, 2), round(R, 2)

if __name__ == '__main__':

_A, _B, _R = calc(freq=10, HPE=30, HPH=20, a=47.55, b=22.15)

print(_A, _B, _R)

结尾部分做简单的测试,并和论文中的算例结果比较(Table7.a),以证明代码无误。

这个过程几乎是将论文的参数和公式直接“翻译”到程序里,没有太多可讲的,但针对对于Python语法不太熟悉的读者,我提炼出了以下几点帮助理解:

Python对每一行前面的空格有严格要求,不可为了好看随意增减,否则出错;

和Matlab一样,Python对于变量无需先定义再使用,如先int a、float b等,而是直接使用即可,因而代码会比大部分语言更“自然”一些;

与Matlab不同的是,Python并非专门针对科学计算和工程计算而设计,故基本运算只有四则(+-\)、平方(*)等,复杂点的数学符号,如log、sin、cos等,则依赖于其他包(module),故而在代码开头要写一句import math,并在中间调用时使用http://math.xxx格式,需要说明的是,如果将开头一句改为:from math import *,则可不必使用http://math.xxx而直接输入运算符xxx,但编程教科书说最好别这样。

用round(A,2)输出小数点后两位格式。

代码最后的if __name__ == '__main__': 部分比较有Python特色,其作用可简单理解为供测试使用。因本部分代码是为了被其他模块调用,这句话的意思就是说被调用时不执行后面内容,因此冒号后面可以方便、随意地写调试代码,而不用担心影响调用它的程序;

与Matlab相比不便的地方是,Python并不会保存并显示中间变量,调试起来诸多不便,办法一是用print语句将变量“打印”出来;方法二是在IDE中设置断点,如下图所示(以pycharm举例):

小结

到此为止,核心功能其实已经完成,但为了把工作做得更漂亮,还需要做很多工作。本篇介绍即到此结束,下一部分将会讲到波导查值模块和主调用模块,谢谢各位观看(*^_^*)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值