MATLAB 和 HFSS 联合建模和仿真优化方法详细介绍
作者:萌萌的妖狐(QQ: 3490486548)
本教程旨在介绍 MATLAB 和 HFSS 联合仿真优化方法。适用于电子类专业
本科生,研究生及相关行业技术人员。为了方便您对本教程的理解,您需要具备
基本的 MATLAB 和 HFSS 操作技能。本教程重点介绍相关的仿真操作方法,不
对电磁理论进行深入讨论。
首先为什么要学习 MATLAB 和 HFSS 的联合仿真。原因有三:
一. 对于许多参数众多,结构复杂的模型,在 HFSS 中建模是一项工作
量极大的工作。而采用程序化建模的方式可以大大降低工作量。比
如类似与下图的所示的具有几百个单元的超表面,每个单元都具有
不同的结构参数,在 HFSS 中手动建模是极其耗时且容易出错的。
而使用 MATLAB 可以简单快速的完成上述建模过程。
二. 设计微波器件的过程中,仿真优化是极其重要的一环。采用参数扫
描的优化方法往往费时费力,需要人为的时时根据仿真结果修改参
数扫描范围,这对设计者的经验,直觉和对模型的理解有较高的要
求。而利用 MATLAB 和 HFSS 的联合优化技术,利用已有的优化
算法(本教程以粒子群算法为例),可以轻松的实现无需人为干预的
参数自动优化,从而快速实现设计指标,节省时间和精力。
三. HFSS 只是电磁仿真工具,其本身扩展性不强。在实际工程应用和
科研中,基于 HFSS 的二次开发是很重要的技术手段。而其基础就
是 MATLAB 和 HFSS 的联合建模和优化仿真。
下面我们从 HFSS 与 MATLAB 联合建模开始。
首先,我们在 HFSS 中的任何操作都可以对应一段脚本(可以是 VB 脚本或者
是 IronPython 脚本,本文以 VB 脚本为例)。比如,当我们要画一个长方体,我们
可以通过 draw box 按钮轻松完成。我们也可以选择让 HFSS 执行一段“画长方
体”的脚本来完成这个操作。这个脚本程序如下:
Dim oAnsoftApp
Dim oDesktop
Dim oProject
Dim oDesign
Dim oEditor
Dim oModule
Set oAnsoftApp = CreateObject("Ansoft.ElectronicsDesktop")
Set oDesktop = oAnsoftApp.GetAppDesktop()
oDesktop.RestoreWindow
Set oProject = oDesktop.SetActiveProject("Project1")
Set oDesign = oProject.SetActiveDesign("HFSSDesign1")
Set oEditor = oDesign.SetActiveEditor("3D Modeler")
oEditor.CreateBox Array("NAME:BoxParameters", "XPosition:=", "-0.6mm",
"YPosition:=", _
"-1.5mm", "ZPosition:=", "0mm", "XSize:=", "2mm", "YSize:=", "2.9mm",
"ZSize:=", _
"1.8mm"), Array("NAME:Attributes", "Name:=", "Box1", "Flags:=", "",
"Color:=", _
"(132 132 193)", "Transparency:=", 0, "PartCoordinateSystem:=", "Global",
"UDMId:=", _
"", "MaterialValue:=", "" & Chr(34) & "vacuum" & Chr(34) & "", "SolveInside:=",
_
true)
我们将这段脚本写在一个记事本里面,命名为 draw_box。运行这个脚本时,选
择 Tools→Run Script,然后选择这个脚本就可以了。此时 HFSS 会自动画出一个长
方体盒子。
那么如何来写这样的脚本呢?这里介绍一种简单的方法。共三步:
1. Tools→Record Script to File, 保持类型选择(*.vbs)然后起一个自己可以
记住的名字。
2. 在 HFSS 中正常进行操作。
3. Tools→Stop Script Recording。
此时你再步骤2中进行的操作对应的脚本就记录在你步骤1中所指定的文件
中。依照上述步骤,你可以写出任意的操作所对应的脚本文件。对于一些基本的
操作Vijay Ramasami等人编写了一些列的MATLAB函数包,调用这个函数可以轻
松写出相应操作的脚本文件。如果有一些操作,这个函数包里面没有,也可以通
过上面的方法写自己所需要的函数。
编写完所需所有操作的函数后,仅需在MATLAB中按步骤连续调用函数即
可。比如绘制完成一个如下所示天线模型建模
1. 将各个函数包加入到本路径下
2. 创建脚本文件,调用新建工程函数
3. 设置所需变量
4. 调用模型函数(大部分在 3dmodeler 函数包中)进行建模
5. 设置边界条件和材料
6. 设置端口
7. 求解设置
8. 脚本执行函数(该函数用于启动 HFSS)
这个过程和在 HFSS 中完成仿真是一样的,只不过这里面用脚本函
数代替了在 HFSS 中的人工操作。越是复杂的模型,这种建模方法越能
体现出优势。通常情况下,Vijay Ramasami 等人编写的函数包足够我们
使用,但是为了进一步挖掘 HFSS 的功能和降低我们的工作量,学会自
己编写函数也是很重要的。
完成了建模过程,下面就是开始进行仿真优化。这里仅以 PSO 算法为例讲解
这个方法。天线的优化可能会涉及各种指标例如,驻波比,副瓣,增益等等。实
际工程中,这些指标通常需要综合考量。通常我们可以采用参数扫描的办法来确
定合理的结构尺寸,但是这种办法费时费力。可以考虑使用优化算法对天线结构
进行自动的优化仿真。步骤如下:
1. 首先将上述建模程序改成一个 MATLAB 函数,其输入变量就是需要进行优
化的结构参数。
2. 编写数据交互函数,即将需要优化的指标比如驻波比,副瓣等从 HFSS 的计
算结果中导入到 MATLAB。这一步需要自己编写函数,Vijay Ramasami 等人
编写的函数包中没有这类函数。
3. 编写适应度函数,即优化目标函数。这里面我只想要优化天线的副瓣,那么
适应度函数就是副瓣(主程序中默认副瓣越小越好)
4. 编写优化算法主程序。一些常见的优化算法 GA,PSO 都有很多开源的代码。
如果想要编写自己的优化算法的话,这一步就需要自己写程序了。我这里面
使用的是一份 pso.m 的开源代码。
这里我仅仅进行了 3 次迭代计算,副瓣就有显著的降低,下面左图是优化前
的,右图是优化后的。
这些步骤完成后,工作就基本结束了,大家只要安心等待结果就好了,再也
不用进行繁琐无聊的反复扫参过程了,我们可以把精力更加集中在结构设计
和算法设计上面。
上述教程只是一个示例性的教学,希望对大家有所帮助。
如有问题,需要帮助请联系 QQ: 3490486548。如果您有更好的方法也希望能
与我交流。