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

准备工作

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

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

HFSS,必装(我使用的是ANSYS Electronics Desktop19.0,如果使用其他版本的话,代码可能会有出入,但问题不大,稍作修改即可)Electromagnetic Simulation Products | ANSYS​www.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/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举例):

小结

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

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

  1. 用python语言实现喇叭发声原理_用Python实现喇叭天线设计小工具(三)

    摘要:本节主要介绍波导查值模块,以及HFSS调用模块的编写. 波导查值模块 该部分要实现的功能主要是根据输入的工作频率,自动选择合适的标准波导尺寸,免去翻资料的麻烦,实现起来逻辑很简单,也就是单纯地根 ...

  2. 用python语言实现喇叭发声原理_用Python实现喇叭天线设计小工具(一)

    前言 作为系列文章的第一篇,本文主要介绍采用Python编写一个图形化界面的小程序,方便快速根据波束宽度设计出最优化喇叭天线,一键调用HFSS进行仿真,并可打包为exe文件方便其他人使用,其效果如下: ...

  3. 如何用python写小工具_用python写一个录音小工具

    Python的paramiko,wxPython库的应用 Sound eXchange 命令行 需求 最近在给一个做语音识别的项目做QA工作.众所周知,此类人工智能方面的项目都需要一些数据收集的工作. ...

  4. python小工具开发_使用Python制作一个桌面小工具

    今天,我们制作一个有意思的小工具,利用Python获取历史上的今天发生的事情. [分析] 个人总结了一下,"历史上的今天"有很多调用接口.有很多调用接口都是收费的或者就是免费但限制 ...

  5. python英语翻译-python制作英语翻译小工具代码实例

    这篇文章主要介绍了python制作英语翻译小工具代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 用python爬虫可以制作英语翻译小工具.来 ...

  6. python制作一个桌面小工具

    python实现一个桌面小工具,制作一个桌面的便签提醒工具 参考代码:https://github.com/cosven/memo 参考链接:https://www.jb51.net/article/ ...

  7. 【kimol君的无聊小发明】—用python写截屏小工具

    [kimol君的无聊小发明]-用python写截屏小工具 前言 一.技术实现 1. 相关库 2. 定义窗口 3. 绘制工具条 4. 定义事件函数 二.后续改进 写在最后 前言 今天我看了一下自己的文件 ...

  8. Python——【自制搜索小工具】

    哈喽,大家好丫,你们的小郭子又来啦 ~ 当自己电脑文件很多还有点乱,用电脑自带的搜索文件,效率有点低,憋担心,我们用Python自制一个搜索小工具就行了,嘻嘻嘻嘻 环境准备 解释器: Python 3 ...

  9. python链接hbase模块_利用python访问Hbase(Thrift模块安装与测试)

    转:http://shineforever.blog.51cto.com/1429204/1567640/ hadoop环境介绍: master服务:node1 slave服务器:node2,node ...

最新文章

  1. 《OpenMP编译原理及实现技术》摘录
  2. MySQL中改变相邻学生座位_力扣——换座位(数据库的题
  3. lnmp shell安装脚本
  4. 不同频率数据的处理方法V2
  5. element ui封装 tree下拉框
  6. Polly-故障处理和弹性应对很有一手
  7. Html input 标签
  8. android工控软件,基于Android的工业控制监控软件的设计和开发
  9. 系统学习NLP(四)--数据平滑
  10. 前端基础知识复习之html
  11. 如何让jpa 持久化时不校验指定字段
  12. android加载海康威视(萤石sdk)摄像头
  13. 下洗风场分析与喷雾模拟
  14. 第十一章 文件操作_C语言fopen函数的用法,C语言打开文件详解
  15. ppt如何替换其他mo ban_吴军老师《P荆斩棘, P沙捡金,T纲挈领 :职场PPT制作与呈现技巧》课程大纲...
  16. 探索 Zynq MPSoC:配套 PYNQ 和机器学习应用一起使用 - 序言鸣谢目录20211231
  17. oracle数据库在mybatis中的数值类型(NUMBER型)
  18. 什么是两化融合贯标?对企业有什么好处?
  19. VB动态加载纯DLL资源
  20. Go语言结构体指针为nil时的小坑

热门文章

  1. 骁龙 820A 汽车系统级芯片的优越性
  2. 【数组(Array)】
  3. AndroidVideoCache源码赏析
  4. 卡西欧5800计算机隧道程序,卡西欧5800隧道放样程序
  5. java多功能计算器编程,java 编程 计算器 本人菜菜!!!
  6. 云计算供应商的分类及代表厂商
  7. Python Access学习(一)
  8. 制作可以随身携带的系统盘
  9. 【facenet】快速复现 实现 facenet-pytorch 人脸识别 windows上 使用cpu实现 人脸对比
  10. 【数值分析--有限差分法】