- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
MATLAB-CST联合仿真之一:入门
MATLAB—CST联合仿真由 国防科大 刘燚原创,共5小节。
作者简介:刘燚,
国防科技大学电子科学学院电子科学系电磁调控技术教研室讲师,主要从事微波毫米波技术、天线理论与设计等方向的教学和科研。
邮箱:yi_liu@nudt.edu.cn
适用人群:想节约时间做点更有意义事情的天线设计人员软件操作:能读懂MATLAB代码,在CST中独立仿真过微波器件
专业基础:电磁波与天线,阵列天线理论
软件版本:CST 2018,MATLAB2016b
内容安排:
第一节:MATLAB—CST联合仿真之入门
第二节:MATLAB—CST联合仿真之建模
第三节:MATLAB—CST联合仿真之结构参数优化
第四节:MATLAB—CST联合仿真之方向图分析与综合
第五节:MATLAB—CST联合仿真之共形天线建模与端口设置
学习方法:最好边运行代码边看文字
正文第一节
CST进阶之路:第一节
MATLAB—CST联合仿真之入门
1. 前言
近几年,经常查阅文献的科研人员会发现,我国学者发表在天线与电波传播领域的高水平期刊论文越来越多,从文献的内容也可以看出天线设计与电波传播的分析水平也越来越高,不过很大一部分都借助了全波仿真软件工具来验证设计方法和结果,通常我们采用的主流仿真软件基本都是国外的,如图1所示,其中HFSS已被Ansys收购,CST已被达索收购。
1 国外主流的电磁仿真软件
全波仿真工作需要一定的专业知识和良好的精力和体力储备,从我们的科研力量组织构成来看,一般干底层仿真活的主力基本都是硕士和博士。由于社会生产力迅猛发展导致专业人才缺口大,目前的现状是研究生的培养规模大、时间短、任务重,尤其是物质保障与社会经济的发展有点脱节,导致大多数研究生为了生计而不得不出卖劳动力,因此他们没有太多精力投入到各种仿真软件的摸索和学习中,从而浪费了大量的时间在笨拙的建模方式和结果处理上。所以,对于一线的天线研究人员来说,专心用好一款仿真软件,减少在软件上的摸索时间,提高设计效率,为其他创造性的科研活动腾出时间就显得尤为重要了。鉴于此,我决定将一些能提高天线设计效率的软件操作方法分享出来,因为我在科研中用到的一些方法和技巧帮我节约了大量时间,
以至于能把更多精力放在别的更加有用的地方,比如写了这篇教程。
事实上,据我了解,国内很多厉害的重点实验室在MATLAB与CST联合仿真方面上已经有了大量积累,但是网上却很难见到相关内容的分享。这两年来关于MATLAB控制CST的操作我也时不时摸索一下,其实还有很多问题没有解决好。但是我深知任何事情都不要等准备完美再去做,只有边做边迭代才能收敛到理想的状态,所以我决定将一些还不是很完善的操作方法和技巧与大家分享,也欢迎大家多提意见帮忙一起迭代。
2. 入门基础
说到编程语言,我想理工科的本科生都学习过C语言,大多数也选修过MATLAB,当然这几年火遍全球的Python
语言也是势不可挡。但由于MATLAB非常容易上手且网上随手一搜就有答案的特性,我觉得研究一下MATLAB
控制CST的方法是很有必要的。在此之前我都是用CST自带的VBA编程,或者用Visual Basic编程来控制,后来发现用起来挺麻烦的、也很费时。可能是我不是很熟悉Basic语言的原因,我始终觉得用VBA
很不方便,就在网上查找关于用MATLAB控制CST的方法,终于在一个国外的论坛找到了利用invoke()函数调用控件的方法,之后又查到了CST的官方说明文件。掌握MATLAB和CST联调的初级使用方法后,我就开始基于科研中的一些实际问题研究各种操作方法与技巧,后来发现很多技巧在科研中帮助还挺大。
下面就开始介绍怎么用MATLAB来控制CST软件,不过在此之前,建议大家优先看一下CST的官方文件,下载地址:https://share.weiyun.com/51zMlKR提取密码:0o1yx6
假如你一看到英文就头疼,那就看下面的入门吧。
首先大家想到的就是怎么让MATLAB连接到CST,只有抓住了它,才能控制它。很显然这就必须要CST公司提供控件的接口,就是下面这行命令:
cst =actxserver('CSTStudio.application')
其中“cst”可以是任意的合法变量名,给它赋值后它就成为了一个句柄类型的变量(handle)。接下来就要新建一个
CST工程或者打开一个CST工程了。mws = invoke(cst, 'NewMWS')invoke(mws, 'OpenFile',‘filename.cst');
新建一个工程之后,我们先不着急设置环境参数,为帮大家弄明白这个MATLAB的代码是怎么来的,先来看如表
1所示的对比。表1 VBA代码和MATLAB代码一一对应
左边一列是CST中比较典型的一段建立立方体的代码,假如你从来没有看到过这段代码,请在CST
里面随便画一个立方体,然后打开历史树,双击建立立方体的那段命令,就会得到其详细的代码,请看下图。
2 历史树列表
这样一对比是不是感觉清晰明了。但是肯定有人发现有些操作在CST的历史树里面是看不到的,那么请在CST界面按F1
进入帮助,如下图所示,你就能够看到几乎所有可供操作的VBA命令,而留给我们做的就是看懂VBA的命令,然后把它翻译成MATLAB代码。有的人看到这里就已经按捺不住了:“如此简单为什么没有人告诉我呢?”
3 CST帮助文档里面的VBA使用指南
3. 入门范例我想有的同学看到上面的介绍就已经基本掌握了精髓,可以独立在MATLAB里面编写代码操作CST了,但是有点同学虽然明白了其中的道理,还是无从下手,那就请看下面详细的范例程序介绍。
下载示例代码之后,在同时装有MATLAB和CST的电脑上运行。强烈推荐使用CST2018,我的MATLAB版本是2016b
。MATLAB的版本老一点没有关系,CST版本尽量用最新的版本,不然运行后续内容会有麻烦。有的同学第一眼看到范例中的代码是不是觉得很烦躁,怎么乱七八糟的,那是因为我没有将各种操作打包成函数,这是为了让大家熟悉完整翻译VBA代码的过程,不过你要有代码洁癖的话可以自己重写。我主要是提供思路,大家可以自由发挥。
关于代码中关键步骤的介绍:
①基本的环境参数设置
在初次使用
CST的时候会有一个引导你设置模板的向导,设置完成后,每次新建项目都会出现如图4所示的模板,根据需要点击相应模板就不用再进行环境参数设置了。
4 新建项目
借助建立模板的思路,如图5所示,在编写MATLAB控制CST仿真的代码时就可以根据模板里的VBA代码来改写。在示例程序中,我将列出了一些常用的环境参数设置,各位在编写代码时候可以将常用的一些设置打包成函数,方便下次直接调用。5 新建项目模板的VBA代码
②建立贴片天线的实体模型图6所示的动图是示例代码运行过程中的截图,可以看出CST在执行基本的建模操作时,比较流畅。建模的过程在示例代码中的展示比较充分,大家可以仔细琢磨一下,简单易上手。
6 贴片天线自动建模演示(gif)
③添加馈电端口在贴片两端的微带线上添加端口,从示例代码中的说明可以知道,在设置端口时采用了一个方法,就是完全模仿我们在CST设置端口的操作方法,将鼠标的点击操作变成了MATLAB的命令,也就是通过代码完全复现手动操作的过程。这个理念很重要,有些复杂操作利用这种理念来解决,可以很直观地实现,后续课程会进一步用的此思想。
④仿真和保存结果
这一步,出现了一个至关重要的问题,大家注意看示例代码的末尾,我特意将退出程序这行命令注释了。这是因为假如我们将仿真完成并有结果的工程关闭之后,再打开,大家可以发现历史树里面就只剩两行命令了,如图7所示。也就是说此种情况下,如果你点击远场方向图的结果就会报错,因为没有端口。而假如此时重新添加端口,只要一更新项目,那么已生成的数据会消失,重新修改模型的几何参数,只要一更新模型,那么之前建立的整个模型就会消失了。此问题我还没有找到很好的解决办法。
7 关闭之后再打开的工程
因此,对于重要仿真结果,特别是要花很长时间才仿真完成的项目,最好使用命令将其需要的结果导出保存。或者就是建模之后将模型导出,重新导入之后再设置好参数、添加好端口之后仿真(手动操作完成)。不过总体来看,利用MATLAB来操作,还是提供了很多方便,可以在一定程度上节省建模时间。4. 这么简单,学会用了吗?
比如老师布置了一个任务,要你设计一个曲面共形的微带贴片阵列,需要生成一个“奇怪”(例如余割平方)的方向图,这个方向图是用于星载SAR成像的,为了使阵列单元布局更加合理优化,老师还想你采用非均匀的布阵方法组阵。但问题是贴片单元布局一变,单元的有源方向图就发生了改变,用于阵列综合的有源方向图参数也就变了,要只用CST仿真优化的话还挺麻烦的,每次仿真完都得手动调整大量单元的各种参数,本来仿真一次就要花好多时间,人工干预更是让人烦躁头疼,不知道要多久才能搞完,就想着要是能自动优化就好了。转念一想,今天学习MATLAB控制CST的方法,要是用MATLAB来控制CST进行建模、仿真、结构参数优化、方向图分析与综合等自动操作,不就行了吗?假如你已经想到了具体步骤与方法,我想你属于一点就通型,但是实际过程中你还是会遇到许多意想不到的问题,不过应该能想到解决方法;假如问题稍微复杂一点,你就发现虽然自己掌握了核心技术,但是没办法使出劲来,那就请耐心学习后续课程,我想学完之后你一定会有一个全新的认识。
当然,我也还在MATLAB和CST联合仿真的摸索和学习中,也还有许多问题待解决,因此我们应该放平心态,一起讨论。
课后讨论
在将MATLAB里面的变量传递给CST时,以下三种写法有什么区别和联系?什么情况下用什么代码不会出现问题?
① invoke(brick, 'Xrange', xl, xh);
② invoke(brick, 'Xrange', 'xl', 'xh');
③invoke(brick, 'Xrange', num2str(xl), num2str(xh));
致谢
本节校对与代码测试人员:
王志娟,成都电子科技大学本科,国防科技大学电子科学学院硕士研究生在读。CST微波工作室培训课程套装,专家讲解,视频教学,帮助您快速学习掌握CST设计应用
上一篇:CST如何进行时域自适应网格设置
下一篇:MATLAB-CST联合仿真之二:建模