第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 完整工具箱。

下一期:参数空间批量扫描——自动生成相位数据库,实现任意阶数的相位覆盖。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐