第1期 | CST超表面自动化:MATLAB一行代码搞定建模 + 仿真 + S参数导出
第1期 | CST超表面自动化:MATLAB一行代码搞定建模 + 仿真 + S参数导出
⚡ 30秒速览:一套开源MATLAB工具箱,输入一行命令,自动在CST中完成超表面单元建模→仿真→S参数导出,全程不碰CST界面。内置10种经典结构,支持一键参数扫描,还能让AI帮你写新设计。
先看效果
在MATLAB命令行输入一行代码:
run_simulation('design_rect')
工具箱自动完成6个步骤:连接CST → 设置频率边界 → 建地板+基板+贴片 → 保存工程 → 跑仿真 → 导S参数并画图。

跑完之后,CST里自动出现完整的超表面单元模型:

S参数自动提取并绘图:

你没有点过一次CST界面。
实战:复现一篇论文的超表面结构
光看矩形贴片太简单,来个真实的。
Sci.Rep. 2018 上有一篇双频段手性超表面的论文,其中一层金属图案是 4个同心矩形环,基板是 Rogers 5880(0.127 mm),工作在 K/Ka 波段(18–32 GHz)。结构长这样:

我把论文中的结构参数告诉 AI(ChatGPT),让它基于工具箱的模板生成了一个设计文件 design_concentric_rings.m。AI 输出的完整代码:
function cfg = design_concentric_rings(overrides) cfg.P = 4.0; cfg.f_min = 16; cfg.f_max = 34; cfg.sub_h = 0.127; cfg.sub_eps = 2.2; cfg.sub_tan = 0.001; cfg.sub_name = 'Rogers5880'; cfg.met_t = 0.018; % 铜层 18 μm cfg.save_name = 'concentric_rings'; W1 = 3.898; H1 = 3.726; % 最外环 W2 = 3.256; H2 = 2.995; W3 = 2.463; H3 = 1.903; W4 = 1.628; H4 = 1.191; % 最内环 rw = 0.2; % 统一环宽 0.2mm % ...(override 处理省略) cfg.build_pattern = @(mws,z2,z3) build(mws,z2,z3, ... W1,H1, W2,H2, W3,H3, W4,H4, rw);endfunction build(mws, z2, z3, W1,H1, W2,H2, W3,H3, W4,H4, rw) rings = {W1,H1,'Ring1'; W2,H2,'Ring2'; W3,H3,'Ring3'; W4,H4,'Ring4'}; for i = 1:size(rings, 1) W = rings{i,1}; H = rings{i,2}; name = rings{i,3}; cst_brick(mws, [name '_out'], -W/2,W/2, -H/2,H/2, z2,z3); cst_brick(mws, [name '_cut'], -W/2+rw,W/2-rw, -H/2+rw,H/2-rw, z2,z3); cst_subtract(mws, [name '_out'], [name '_cut']); if i > 1, cst_add(mws, 'Ring1_out', [name '_out']); end endend
保存到 designs/ 目录,运行:
run_simulation('design_concentric_rings')
CST 中自动建好了 4 个同心矩形环的完整模型:

S 参数结果也自动提取并画好了,可以观察到 K/Ka 波段的谐振效应:

全过程没有打开过一次 CST 界面。 从论文参数到仿真出图,就是"告诉 AI → 拿到设计文件 → 一行命令运行"。
当然,这只是复现了原文多层结构中的一层。如果要做完整的多层堆叠,修改设计文件叠加更多层即可——这也是后续会更新的内容。
3步上手
Step 1:下载工具箱
下载 MetasurfaceCST 文件夹,放到你的 MATLAB 工作目录下。文件结构:
MetasurfaceCST/├── main.m ← 主入口├── run_simulation.m ← 单次仿真├── run_sweep.m ← 参数扫描├── engine/ ← 引擎(不用动)├── helpers/ ← 建模工具(不用动)├── designs/ ← 设计文件(改这里)└── output/ ← 结果输出
你只需要关注 designs/ 文件夹下的设计文件。
Step 2:看一眼设计文件
打开 designs/design_rect.m,这就是一个矩形贴片的完整配置,一共只有15行:
function cfg = design_rect(overrides) cfg.P = 10; cfg.f_min = 4; cfg.f_max = 12; cfg.sub_h = 1.6; cfg.sub_eps = 4.3; cfg.sub_tan = 0.025; cfg.sub_name = 'FR4'; cfg.save_name = 'rect_patch'; W = 6; H = 6; if nargin > 0 && isfield(overrides, 'W'), W = overrides.W; end if nargin > 0 && isfield(overrides, 'H'), H = overrides.H; end cfg.build_pattern = @(mws,z2,z3) build(mws,z2,z3, W,H);endfunction build(mws, z2, z3, W, H) cst_brick(mws, 'Patch', -W/2,W/2, -H/2,H/2, z2,z3);end
上半部分是仿真参数(周期、频率、基板),下半部分的 build 函数定义金属图案——矩形贴片就是一个 cst_brick。
想改参数?直接改数字就行:
|
参数 |
含义 |
默认值 |
|---|---|---|
cfg.P |
单元周期 |
10 mm |
cfg.f_min / f_max |
频率范围 |
4–12 GHz |
cfg.sub_h |
基板厚度 |
1.6 mm |
cfg.sub_eps |
介电常数 |
4.3 (FR4) |
W / H |
贴片宽度/高度 |
6 mm |
Step 3:运行
cd MetasurfaceCSTrun_simulation('design_rect')
等仿真跑完,S参数自动导出到 output/ 文件夹,同时弹出结果图。
想换结构?改一个单词
工具箱内置了 10种经典超表面结构,换结构只需要改设计名:
run_simulation('design_rect') % 矩形贴片run_simulation('design_cross') % 十字形run_simulation('design_srr') % 开口谐振环run_simulation('design_smith_srr') % Smith双SRR (PRL 2000经典)run_simulation('design_jerusalem_cross') % 耶路撒冷十字

完整列表:
|
设计文件 |
结构 |
|---|---|
design_rect |
矩形贴片 |
design_cross |
十字形 |
design_circle |
圆形贴片 |
design_ring |
圆环 |
design_srr |
开口谐振环 (SRR) |
design_bowtie |
领结形 |
design_h_shape |
H形 |
design_jerusalem_cross |
耶路撒冷十字 |
design_smith_srr |
Smith双SRR (PRL 2000) |
design_concentric_rings |
同心矩形环 (Sci.Rep. 2018) |
自己的结构怎么加?
两种方式:
方式一:手写
复制 design_rect.m,改参数和 build 函数即可。
比如十字形的 build 函数只有3行——两个矩形臂 + 布尔合并:
function build(mws, z2, z3, aL, aW) cst_brick(mws, 'ArmH', -aL/2,aL/2, -aW/2,aW/2, z2,z3); cst_brick(mws, 'ArmV', -aW/2,aW/2, -aL/2,aL/2, z2,z3); cst_add(mws, 'ArmH', 'ArmV');end
可用的建模工具:
|
函数 |
功能 |
|---|---|
cst_brick |
矩形 |
cst_cylinder |
圆柱/圆环 |
cst_polygon |
任意多边形 |
cst_add |
布尔合并 |
cst_subtract |
布尔减 |
cst_rotate |
旋转 |
方式二:让AI写
把 AI_PROMPT.md(工具箱自带)和任意一个设计文件一起粘贴给 ChatGPT 或 Claude,然后描述你想要的结构,AI直接输出一个新的设计文件。保存到 designs/ 目录,运行即可。

引擎做了什么?为什么不自己拼VBA?
你可能会想:既然CST本身就支持VBA/MATLAB脚本,为什么不直接让AI生成一整套完整脚本?
试过就知道——CST的MATLAB COM接口,网上几乎找不到系统的参考文档。 官方帮助文档以VBA宏为主,MATLAB调用方式散落在零星的论坛帖子里,而且很多是过时的。你让AI从零写一个CST自动化脚本,它大概率会给你一段两三百行的VBA字符串拼接:
sCmd = [10 'With Brick' 10 '.Reset' 10 '.Name "patch"' ... 10 '.Component "unit_cell"' 10 '.Material "Copper (annealed)"' ... 10 '.Xrange "-3.5", "3.5"' 10 ... ]; % 还有几十行...invoke(prj, 'AddToHistory', 'define brick: patch', sCmd);
看着就头疼。更要命的是:换个结构?重写。加个端口?再拼几十行。改个边界条件?又是一坨字符串。某个引号漏了?CST不报错,默默给你建了个错误的模型。
本工具箱的引擎做的事情,就是把这些脆弱的底层操作封装成经过验证的模块:
run_simulation('design_xxx') │ ├── engine_connect 连接CST(自动检测已打开的实例,避免COM冲突卡死) ├── engine_setup 设单位/频率/边界/Floquet端口/自定义材料(一步到位) ├── engine_build 建地板+基板+调用你的build函数画金属图案 ├── engine_solve 配置并运行求解器(频域/时域自动切换) └── engine_extract 提取S参数、切换视图、导出数据、画图
每个模块都是踩过真实的坑之后写出来的。这些细节,AI不知道,文档里也没写,只有实际调试过才能踩到。
所以这个工具箱的价值不在于代码量,而在于它是一套经过验证的、可靠运行的底层引擎。 有了它,无论是你自己写设计文件,还是让AI帮你写,都只需要关注十几行结构描述,底下的几百行脏活引擎替你处理好了。
几个容易踩的坑
actxserver 报错——CST没装好或COM组件没注册。最简单的解决方式:先手动打开CST软件,再运行MATLAB脚本。脚本会自动检测已打开的CST实例。
仿真卡住不返回——去看CST界面是不是弹了确认框。MATLAB会阻塞等CST跑完,如果CST弹窗了就会一直卡着。
材料名对不上——设计文件里的材料名(如 'FR4')是由引擎自动创建的,不需要CST材料库里已有该名称。如果你手动改成CST内置材料名,大小写和括号必须完全一致。
不知道CST某个操作的VBA命令——CST菜单 → Macros → Start Recording,手动操作一遍,然后 Stop Recording 看录制出的VBA代码。
环境要求
-
• MATLAB R2018a+
-
• CST Studio Suite 2020+(建议最新版2026,CST不向上兼容)
-
• Windows(CST COM 接口依赖)
完整代码获取
本期工具箱已上传,关注「CST超表面工坊」,回复「01」获取 MetasurfaceCST 完整工具箱。
下一期:参数空间批量扫描——自动生成相位数据库,实现任意阶数的相位覆盖。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)