python2.4无线模块_用Python实现喇叭天线设计小工具(二)
摘要:本文主要介绍软件安装、参考论文,以及第一个模块——参数计算模块。
准备工作
在开始之前,请确保装了以下软件或资源(括号中是我个人推荐版本或配置,若安装有困难,请自行搜索相关教程):
Python3.x,必装(推荐直接安装Anaconda,融合了常用Python模块的开源软件,可免去自行下载各种包的麻烦)Home - Anacondawww.anaconda.com
HFSS,必装(我使用的是ANSYS Electronics Desktop19.0,如果使用其他版本的话,代码可能会有出入,但问题不大,稍作修改即可)Electromagnetic Simulation Products | ANSYSwww.ansys.com
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/1iggiF1ijjnuG3pBdDFrp8Qpan.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举例):
小结
到此为止,核心功能其实已经完成,但为了把工作做得更漂亮,还需要做很多工作。本篇介绍即到此结束,下一部分将会讲到波导查值模块和主调用模块,谢谢各位观看(*^_^*)!
python2.4无线模块_用Python实现喇叭天线设计小工具(二)相关推荐
- 用python语言实现喇叭发声原理_用Python实现喇叭天线设计小工具(三)
摘要:本节主要介绍波导查值模块,以及HFSS调用模块的编写. 波导查值模块 该部分要实现的功能主要是根据输入的工作频率,自动选择合适的标准波导尺寸,免去翻资料的麻烦,实现起来逻辑很简单,也就是单纯地根 ...
- 用python语言实现喇叭发声原理_用Python实现喇叭天线设计小工具(一)
前言 作为系列文章的第一篇,本文主要介绍采用Python编写一个图形化界面的小程序,方便快速根据波束宽度设计出最优化喇叭天线,一键调用HFSS进行仿真,并可打包为exe文件方便其他人使用,其效果如下: ...
- 如何用python写小工具_用python写一个录音小工具
Python的paramiko,wxPython库的应用 Sound eXchange 命令行 需求 最近在给一个做语音识别的项目做QA工作.众所周知,此类人工智能方面的项目都需要一些数据收集的工作. ...
- python小工具开发_使用Python制作一个桌面小工具
今天,我们制作一个有意思的小工具,利用Python获取历史上的今天发生的事情. [分析] 个人总结了一下,"历史上的今天"有很多调用接口.有很多调用接口都是收费的或者就是免费但限制 ...
- python英语翻译-python制作英语翻译小工具代码实例
这篇文章主要介绍了python制作英语翻译小工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用python爬虫可以制作英语翻译小工具.来 ...
- python制作一个桌面小工具
python实现一个桌面小工具,制作一个桌面的便签提醒工具 参考代码:https://github.com/cosven/memo 参考链接:https://www.jb51.net/article/ ...
- 【kimol君的无聊小发明】—用python写截屏小工具
[kimol君的无聊小发明]-用python写截屏小工具 前言 一.技术实现 1. 相关库 2. 定义窗口 3. 绘制工具条 4. 定义事件函数 二.后续改进 写在最后 前言 今天我看了一下自己的文件 ...
- Python——【自制搜索小工具】
哈喽,大家好丫,你们的小郭子又来啦 ~ 当自己电脑文件很多还有点乱,用电脑自带的搜索文件,效率有点低,憋担心,我们用Python自制一个搜索小工具就行了,嘻嘻嘻嘻 环境准备 解释器: Python 3 ...
- python链接hbase模块_利用python访问Hbase(Thrift模块安装与测试)
转:http://shineforever.blog.51cto.com/1429204/1567640/ hadoop环境介绍: master服务:node1 slave服务器:node2,node ...
最新文章
- 《OpenMP编译原理及实现技术》摘录
- MySQL中改变相邻学生座位_力扣——换座位(数据库的题
- lnmp shell安装脚本
- 不同频率数据的处理方法V2
- element ui封装 tree下拉框
- Polly-故障处理和弹性应对很有一手
- Html input 标签
- android工控软件,基于Android的工业控制监控软件的设计和开发
- 系统学习NLP(四)--数据平滑
- 前端基础知识复习之html
- 如何让jpa 持久化时不校验指定字段
- android加载海康威视(萤石sdk)摄像头
- 下洗风场分析与喷雾模拟
- 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解
- ppt如何替换其他mo ban_吴军老师《P荆斩棘, P沙捡金,T纲挈领 :职场PPT制作与呈现技巧》课程大纲...
- 探索 Zynq MPSoC:配套 PYNQ 和机器学习应用一起使用 - 序言鸣谢目录20211231
- oracle数据库在mybatis中的数值类型(NUMBER型)
- 什么是两化融合贯标?对企业有什么好处?
- VB动态加载纯DLL资源
- Go语言结构体指针为nil时的小坑