上期文章 用Python实现喇叭天线设计小工具(一) 摘要:本文主要介绍软件安装、参考论文,以及第一个模块——参数计算模块。 准备工作 在开始之前,请确保装了以下软件或资源(括号中是我个人推荐版本或配置,若安装有困难,请自行搜索相关教程):
Home - Anaconda www.anaconda.com
Electromagnetic Simulation Products | ANSYS www.ansys.com
https://www.jetbrains.com/pycharm/ www.jetbrains.com
理论部分
本文理论部分比较简单直观,只需要简单提一下。首先,参考论文链接如下:
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,并在中间调用时使用math.xxx 格式,需要说明的是,如果将开头一句改为:from math import *,则可不必使用math.xxx 而直接输入运算符xxx,但编程教科书说最好别这样 。
用round(A,2)输出小数点后两位格式。
代码最后的if __name__ == '__main__': 部分比较有Python特色,其作用可简单理解为供测试使用。因本部分代码是为了被其他模块调用,这句话的意思就是说被调用时不执行后面内容,因此冒号后面可以方便、随意地写调试代码,而不用担心影响调用它的程序;
与Matlab相比不便的地方是,Python并不会保存并显示中间变量,调试起来诸多不便,办法一是用print语句将变量“打印”出来;方法二是在IDE中设置断点,如下图所示(以pycharm举例):
小结 到此为止,核心功能其实已经完成,但为了把工作做得更漂亮,还需要做很多工作。本篇介绍即到此结束,下一部分将会讲到波导查值模块和主调用模块,谢谢各位观看(*^_^*)!
转载自:知乎@况泽灵,发布于 2018-11-20
上期文章: 用Python实现喇叭天线设计小工具(一)
最新研讨会
原创文章:
模拟和矢量信号源进阶使用技巧 IQ正交调制器基础知识和测试详解 学个Antenna:Wi-Fi双频金属中框天线 学个Antenna:手机天线之宽带匹配原理 学个Antenna:手机天线入门
学个Antenna:HFSS脚本建模入门
Wi-Fi 6射频技术全面解析及Wi-Fi 7热点技术介绍
无线技术专栏:无线通信信号传输模型
使用矢网测量PA S11、S21和饱和功率的方法
学个Antenna:Matlab天线工具箱知多少(一)
原创干货:使用矢网测量PA S12 S22和功率的方法
ETC 天线技术概览(工作方式、极化方式、实现方式、技术革新点)
附加相位噪声测试方法
4G和5G基站天线工程知识和应用场景
噪声的意义及测量方法
非50欧系统阻抗的S参数测试
交调失真的意义及矢网实例测量方法
增益压缩的意义及矢网实操测量方法
S参数的意义及矢网实例测量方法
学个Antenna:偶极子天线馈电及倒V天线
从电磁波产生到对称阵子天线
张跃平教授:无线电科学与技术中的因子4