从"聊天"到"执行":MATLAB Agentic AI + MCP Server 实战------以 5G NR PDSCH 波形仿真为例
环境:Windows 11 + MATLAB R2024a + MATLAB MCP Server v0.11.3
全文基于一次真实的端到端工程实践:通过官方 MATLAB Agentic 工作流,完成 5G NR PDSCH 波形生成、48 组多参数扫描仿真(带宽 × 天线 × MCS)、ACLR/EVM 指标分析及全套波形可视化。
摘要
本文记录了一次完整的"智能体驱动"的工程仿真实践。首先从原理层面阐述什么是 Agentic AI、MATLAB/Simulink Agentic Toolkit 的架构,以及 MCP(Model Context Protocol)如何作为"AI 的 USB-C 接口"连接大语言模型与 MATLAB 计算引擎;随后以 5G NR PDSCH 下行信道波形仿真为案例,逐步演示如何通过 MATLAB MCP Server 实现代码编写、静态检查、执行、单元测试的自动化闭环,并深入讲解带宽(20/50/80/100 MHz)、天线数(1/2/4)、调制方式(QPSK/16QAM/64QAM/256QAM)对 ACLR 与 EVM 的影响规律。文末附完整排坑记录,供同行参考。
一、背景:为什么需要 Agentic AI?
传统上,用 ChatGPT 或 Claude 帮助写 MATLAB 代码的工作流是这样的:
- 向 LLM 提问,获得一段代码;
- 手动复制粘贴到 MATLAB;
- 运行报错,把错误信息复制回聊天框;
- 拿到新代码,再粘贴、再运行、再报错......
这种"复制-粘贴-报错-再复制"的循环效率低下且令人沮丧。核心痛点在于:LLM 只会"生成"代码,不会"执行"代码;它无法看到运行结果,也无法根据错误自动修正。
Agentic AI(智能体式 AI)彻底改变了这一范式------AI 不仅能"思考"(推理下一步),还能"行动"(直接调用工具执行),并"观察"(读取结果),从而迭代直到任务完成。MathWorks 官方指南《Guide to Agentic AI with MATLAB and Simulink》用一张表格清晰对比了两者:
| 非 Agentic AI | Agentic AI |
|---|---|
| 按需生成代码片段 | 直接编写并执行代码 |
| 需要你手动复制、粘贴、运行 | 迭代直到任务完成 |
| 依赖你解释错误并追问 | 自己看到错误并自动修复 |
| 无法访问你的文件和数据 | 访问你的工作区与数据 |
| 无法验证代码是否工作 | 交付你可以测试的有效结果 |
一句话概括:非 Agentic AI 像只写报告不干活的顾问,Agentic AI 像真正动手把活干完的同事。
二、原理篇:MATLAB/Simulink Agentic AI 与 MCP
2.1 总体架构
MathWorks 官方提供的 Agentic 解决方案包含三个层次:
┌─────────────────────────────────────────────────────────┐
│ AI 编码智能体 (Client) │
│ Claude Code / GitHub Copilot / OpenAI Codex │
└──────────────────────────┬──────────────────────────────┘
│ MCP 协议 (stdio/HTTP)
┌──────────────────────────▼──────────────────────────────┐
│ MATLAB MCP Server (桥梁/翻译器) │
│ 把 AI 请求翻译成 MATLAB 执行,把结果回传给 AI │
└──────────────────────────┬──────────────────────────────┘
│ 启动/控制 MATLAB 会话
┌──────────────────────────▼──────────────────────────────┐
│ MATLAB R2024a (计算引擎) │
│ 5G Toolbox / Communications / Simulink ... │
└─────────────────────────────────────────────────────────┘
决策权在 AI,计算权在 MATLAB。LLM 决定"做什么",MATLAB 保证"算得对"------LLM 会幻觉数学,MATLAB 不会。
2.2 MCP:Model Context Protocol(模型上下文协议)
MCP 是 Anthropic 于 2024 年底开源的标准协议,为 AI 应用与外部工具之间提供统一的交互框架。官方将其类比为 "AI 的 USB-C 接口":就像 USB-C 让任何设备都能连接任何外设,MCP 让任何 AI 模型都能连接任何工具,包括 MATLAB 和 Simulink。
MCP 的核心概念:
- Host(宿主):发起连接的 AI 应用,如 Claude Desktop、Claude Code、VS Code Copilot。
- Client(客户端):Host 内部与 Server 建立一对一连接的组件。
- Server(服务端):暴露能力(工具/资源/提示词)的轻量级程序,如 MATLAB MCP Server。
- Transport(传输):客户端与服务器间的通信方式,常用 stdio(标准输入输出)或 HTTP。
MCP 定义了三种能力原语:
- Tools(工具):AI 可调用的函数,如"运行这段 MATLAB 代码",需要参数校验,执行后返回结构化结果------这是 Agentic 闭环的关键。
- Resources(资源):只读的上下文数据,如"MATLAB 编码规范文档",AI 按需读取。
- Prompts(提示词):可复用的用户交互模板。
2.3 MATLAB MCP Server:五个内置工具与两个资源
MATLAB MCP Server 是 MathWorks 官方开源项目(GitHub: matlab/matlab-mcp-server,Go 语言实现),支持 MATLAB R2021a 及之后版本。它暴露了五个核心工具:
| 工具 | 功能 |
|---|---|
evaluate_matlab_code |
执行一段 MATLAB 代码字符串并返回命令行输出 |
run_matlab_file |
执行一个 .m 脚本文件 |
run_matlab_test_file |
通过 runtests 运行单元测试,返回结构化 Pass/Fail 结果 |
check_matlab_code |
基于 Code Analyzer 做静态代码分析(只读、不执行) |
detect_matlab_toolboxes |
列出 MATLAB 版本与已安装工具箱 |
同时提供两个 MCP 资源(专为 AI 设计的文档):
matlab_coding_guidelines:MATLAB 编码规范(命名、格式化、性能、错误处理);plain_text_live_code_guidelines:纯文本 Live Script 生成规范。
AI 智能体在写代码时会自动参考这些资源,避免"幻觉"出不存在的工具箱函数或过时 API。
2.4 MATLAB Agentic Toolkit:MCP + 领域技能
MATLAB Agentic Toolkit(GitHub: matlab/matlab-agentic-toolkit)是免费的开源技能包,由两部分组成:
- MATLAB MCP Server:提供与本地 MATLAB 会话的实时连接(即上文所述);
- Agent Skills(技能) :基于 Markdown 的指令文件,教 AI 智能体 MATLAB 工程实践。技能不是代码库,而是结构化提示词------让 AI 具备训练数据中没有的领域知识。
技能目录覆盖 25 个领域,与本文案例直接相关的是 wireless-communications 组,包含:
matlab-generate-5g-waveform:用nrWaveformGenerator生成 3GPP 兼容的 NR 波形matlab-design-ofdm-system:OFDM 系统设计matlab-add-awgn:加性高斯白噪声添加matlab-generate-wlan-waveform/matlab-generate-ble-waveform等
这些技能显著提升了 AI 解决深度科学/工程问题的能力、鲁棒性和成本效率。
2.5 Simulink Agentic Toolkit
在 MATLAB 工具包之上,Simulink Agentic Toolkit 将 Agentic AI 扩展到基于模型的设计(Model-Based Design),增加针对 Simulink 模型的 MCP 工具与技能:读取模型结构、编辑模块与连线、查询参数、运行仿真。支持 Simulink 框图、Stateflow 状态机、Simscape 物理系统、System Composer 架构模型。其推荐工作流为五步循环:Propose(提议)→ Approve(审批)→ Generate(生成)→ Run(运行)→ Confirm(确认),核心原则是"AI 提议,工程师决策"。
2.6 三种 Agent 实现模式
官方指南还给出了在 MATLAB 中用代码构建智能体的模式(需 LLMs with MATLAB 与 MATLAB MCP HTTP Client):
- Pattern 1 - ReAct(推理+行动):LLM 思考下一步 → 执行工具 → 观察结果 → 循环直到完成;
- Pattern 2 - Tool Chaining(工具链):生成代码 → 分析代码 → 执行代码 → 评估结果,前一步输出作为后一步输入;
- Pattern 3 - Human-in-the-Loop(人在回路):对安全关键操作增加审批步骤。
三、部署篇:在本机搭建 MATLAB Agentic 环境
3.1 环境清单
| 组件 | 版本/路径 |
|---|---|
| MATLAB | R2024a(24.1.0.2537033),含 5G Toolbox 等 100+ 工具箱 |
| MATLAB MCP Server | v0.11.3(Windows x64 二进制,19 MB) |
| Agentic Toolkit | GitHub matlab/matlab-agentic-toolkit(技能目录克隆到 C:\eda\workspace) |
| Python | 3.11(用于 MCP 客户端封装) |
3.2 安装步骤
bash
# 1. 克隆官方仓库
git clone https://github.com/matlab/matlab-mcp-server.git
git clone https://github.com/matlab/matlab-agentic-toolkit.git
# 2. 下载 Windows 二进制(或 go install 从源码构建)
# 从 Releases 页下载 matlab-mcp-server-windows-x64.exe
# 3. 注册到 MCP 客户端(此处为 OpenClaw,其他客户端类似)
openclaw mcp add matlab \
--command 'C:\eda\workspace\matlab-mcp\bin\matlab-mcp-server.exe' \
--arg '--matlab-root=C:\Program Files\MATLAB\R2024a' \
--arg '--initial-working-folder=C:\eda\workspace\matlab-mcp\demo' \
--arg '--matlab-display-mode=nodesktop' \
--arg '--disable-telemetry=true' \
--cwd 'C:\eda\workspace\matlab-mcp\demo'
关键启动参数说明:
--matlab-root:指定 MATLAB 安装路径(不含 bin);--matlab-display-mode=nodesktop:无桌面模式,AI 专用;--matlab-session-mode:new(新开会话)/existing(连接已有会话,需先运行shareMATLABSession())/auto;--disable-telemetry:关闭匿名遥测。
3.3 验证部署
用任意 MCP 客户端(或自写 Python stdio 客户端)完成握手:
python
# MCP initialize 握手
{"jsonrpc":"2.0","id":1,"method":"initialize",
"params":{"protocolVersion":"2024-11-05","capabilities":{},
"clientInfo":{"name":"pdsch-agent","version":"1"}}}
返回 serverInfo: matlab-mcp-server v0.11.3,随后 tools/list 应列出全部 5 个工具。调用 detect_matlab_toolboxes 确认 MATLAB 与 5G Toolbox 可用,即部署成功。
四、案例篇:5G NR PDSCH 波形仿真
4.1 案例目标
通过 MATLAB MCP 完成三件事:
- 生成符合 3GPP 规范的下行 PDSCH 基带波形(含 DM-RS);
- 多参数扫描:4 带宽(20/50/80/100 MHz)× 3 天线(1/2/4)× 4 MCS(QPSK/16QAM/64QAM/256QAM)= 48 组仿真;
- 计算每组对应的 ACLR(邻道泄漏比) 与 EVM(误差矢量幅度),分析其随带宽/MCS 的变化规律,并输出时域、频域、资源栅格、星座图四联波形图。
4.2 波形生成:用官方波形生成器而非手工拼接
官方 Agentic 技能明确建议:生成波形应使用 nrWaveformGenerator,不要用底层原语(nrCarrierConfig + nrPDSCH + nrOFDMModulate)手工拼接------波形生成器会正确处理信道复用、功率缩放和 OFDM 调制。核心代码:
matlab
%% 载波配置 (FR1, 30 kHz SCS)
carrier = nrCarrierConfig;
carrier.SubcarrierSpacing = 30; % 30 kHz
carrier.NSizeGrid = NRB; % 52~273 RB 随带宽
carrier.NCellID = 42;
%% PDSCH 配置
pdsch = nrWavegenPDSCHConfig;
pdsch.Modulation = mod; % QPSK/16QAM/64QAM/256QAM
pdsch.NumLayers = nAnt; % 1/2/4 层
pdsch.PRBSet = (0:NRB-1).';
pdsch.SymbolAllocation = [0 14]; % 全时隙
pdsch.TargetCodeRate = rate;
pdsch.DataSource = 'PN9-ITU'; % 伪随机数据源
%% 官方波形生成器:自动完成编码、映射、DM-RS、OFDM
cfg = nrDLCarrierConfig;
cfg.SCSCarriers = {scs};
cfg.BandwidthParts = {bwp};
cfg.PDSCH = {pdsch};
[waveform, info] = nrWaveformGenerator(cfg);
4.3 Agentic 工作流闭环
完整流程按官方推荐的"工具链"模式执行(生成→检查→执行→测试):
detect_matlab_toolboxes ──► 确认 MATLAB R2024a + 5G Toolbox
│
check_matlab_code ──► 静态检查 generate_pdsch_waveform.m → 0 issues
│
run_matlab_file ──► 生成 PDSCH 波形 + 分析图
│
run_matlab_test_file ──► runtests 单元测试 → 1 Passed, 0 Failed
基带波形参数实测:
- 采样点数:153,600;采样率:15.36 Msps(10 MHz 配置)
- 时长:10.000 ms(1 个无线帧);RMS:0.0216;PAPR:11.45 dB
- 频谱占用:52 RB × 12 子载波 × 15 kHz = 9.36 MHz(10 MHz 载波)
4.4 多参数扫描仿真设计
| 维度 | 取值 | 说明 |
|---|---|---|
| 带宽 | 20 / 50 / 80 / 100 MHz | 对应 RB 数 51/133/217/273(30 kHz SCS,3GPP TS 38.104) |
| 天线 | 1 / 2 / 4 | 对应 PDSCH 层数 1/2/4 |
| MCS | QPSK / 16QAM / 64QAM / 256QAM | 目标码率 0.3/0.5/0.65/0.8 |
每组执行完整链路:随机传输块 → DL-SCH 编码(CRC+LDPC+速率匹配)→ 调制+层映射 → DM-RS 生成 → OFDM 调制 → (削波模拟 PA 非线性)→ 指标计算。
4.5 指标计算方法
ACLR(邻道泄漏比)------发射频谱质量指标,3GPP 定义为:
ACLR=10log10(PmainPadjacent)\text{ACLR} = 10\log_{10}\left(\frac{P_{\text{main}}}{P_{\text{adjacent}}}\right)ACLR=10log10(PadjacentPmain)
实现要点:用 Welch 法估计 PSD,主信道窗口取实际占用带宽(NRB×12×SCS),邻道窗口取偏移一个信道带宽的相邻区间,积分求功率比。
matlab
[psd, freq] = pwelch(txOs(:,1), hann(2048,'periodic'), 1024, nfft, sampleRateOs);
mainW = abs(fMHz) <= occBW/2;
adjW = (fMHz > occBW/2) & (fMHz <= occBW/2 + BW);
aclr = 10*log10(trapz(freq(mainW),psd(mainW)) / trapz(freq(adjW),psd(adjW)));
EVM(误差矢量幅度)------调制质量指标:
EVMrms=∑∣s^−s∣2∑∣s∣2×100%\text{EVM}_{\text{rms}} = \sqrt{\frac{\sum |\hat{s} - s|^2}{\sum |s|^2}} \times 100\%EVMrms=∑∣s∣2∑∣s^−s∣2 ×100%
采用数据辅助判决:解调回栅格后提取 PDSCH RE,用 qamdemod/qammod 找到最近星座点作为参考,计算 RMS EVM。
4.6 仿真结果
48 组全部完成,两个关键修正后结果物理合理:
ACLR:28.4 ~ 30.6 dB
| 带宽 | 20 MHz | 50 MHz | 80 MHz | 100 MHz |
|---|---|---|---|---|
| ACLR 范围 | 28.4~29.9 | 29.8~30.6 | 28.6~29.7 | 29.5~30.1 |
- ACLR 主要由发射频谱掩模决定,与 MCS 基本无关(各调制间差异 <1.5 dB,物理正确);
- 随带宽轻微波动,大带宽略优(RB 多、频谱填充更均匀);
- 天线数影响很小。
EVM:0.6% ~ 2.8%(7 dB 回退削波产生的轻度非线性失真)
- 全部 48 组远优于 3GPP 限值:QPSK 17.5% / 16QAM 12.5% / 64QAM 8% / 256QAM 3.5%;
- 256QAM 全部组合 EVM < 3.5%,满足最严格限值;
- 线性度良好的发射机各调制 EVM 相近,无明显 MCS/BW 单调趋势,符合预期。

图 1:48 组仿真 ACLR / EVM vs 带宽 / 天线 / MCS 四联趋势图
4.7 波形可视化
为 48 组各生成一张四联分析图(waveform_plots/),包含:
- 时域波形(Time Domain):天线 1 前 3000 采样,观察 OFDM 符号包络与 CP 结构;
- 频谱(Frequency Domain):归一化 PSD(-90~5 dB),观察信道带宽与带外泄漏;
- 资源栅格(Resource Grid):时频格图,PDSCH 数据 + DM-RS 参考信号清晰可见;
- 星座图(Constellation):PDSCH 调制符号,QPSK 四点 / 16QAM 16 点 / 64QAM / 256QAM 星型分布一目了然。
命名规则:pdsch_BW{带宽}MHz_Ant{天线}_{MCS}.png。

图 2:PDSCH 波形四联图(10 MHz 配置:时域 / 频谱 / 资源栅格 / 星座)

图 3:20 MHz / 1 天线 / QPSK 四联波形图

图 4:100 MHz / 4 天线 / 256QAM 四联波形图(最高配置)
五、排坑记录(实战精华)
本次实践踩过的坑,按价值排序:
- MCP 工具调用超时陷阱 :视频生成任务在恰好 120.000 秒被标记
isError=true,返回误导文本 "cancelled by user"。根因是客户端/插件层的 120 秒等待上限 (模型自身 generationTimeout 为 600 秒)。对策:降低参数(720p、≤5s、关音频)或延长客户端超时。教训:看到 "cancelled by user" 未必是用户操作,先查 elapsedMs。 - ACLR 必须过采样 :30.72 MHz 采样率下 Nyquist 仅 15.36 MHz,20 MHz 偏移的邻道窗口落在 Nyquist 之外导致 ACLR≈0.7 dB 假值。对策:4x 过采样(
resample)后再算 PSD,得到 22~30 dB 正确值。 - EVM 必须在原始采样率波形上解调 :对 4x 过采样信号直接
nrOFDMDemodulate会因采样率不匹配导致判决全错(EVM≈100%)。对策:EVM 用未过采样波形解调,ACLR 用过采样波形,各司其职。 - 单元测试脚本内禁用
clear:run()执行脚本时会清空调用者工作区,clear会连带清除testCase对象导致MATLAB:refClearedVar。对策:脚本顶部只保留rng()。 - 路径含
&与中文 :ModelSim/Vivado 等 EDA 工具无法在含&的路径建库。对策:工程放C:\eda\workspace\,产物拷回项目目录。 - MATLAB 无头模式绘图 :
-nojvm下不能创建 figure。对策:数据落 CSV + Python matplotlib 出图,或用-batch(保留 JVM)直接exportgraphics。 - MCP 对复杂绘图返回空文本 :
evaluate_matlab_code对包含 figure 的脚本返回空 content(不报错)。对策:改用matlab -batch直接执行绘图脚本。
六、总结与展望
本次实践验证了 MATLAB Agentic AI 从原理到落地的完整闭环:
- 原理层:MCP 作为标准协议,让任意 LLM 都能安全、结构化地调用 MATLAB 计算引擎;
- 能力层:Agentic Toolkit 的 5 个 MCP 工具 + 25 组领域技能,覆盖"检查-执行-测试"全流程;
- 应用层:48 组 5G NR PDSCH 多参数仿真一次跑通,ACLR/EVM 结果物理合理,全套可视化交付。
相比传统"复制-粘贴-报错"工作流,Agentic 方式将工程效率提升了一个量级:AI 写码、AI 自查、AI 执行、AI 测试、AI 修正------工程师从"代码搬运工"回归"结果决策者"。
未来可扩展方向:
- 接入 Simulink Agentic Toolkit,实现基于模型的设计闭环(Propose→Approve→Generate→Run→Confirm);
- 将 48 组扫描扩展到 MIMO 预编码、TDL 多径信道、HARQ 重传等真实场景;
- 用
LLMs with MATLAB+MATLAB MCP HTTP Client在 MATLAB 内原生构建 ReAct 智能体; - 结合 HDL Coder(激活许可证后)将 MATLAB 定点模型自动生成可综合 Verilog,贯通"算法→RTL→验证"全链路。
附录:产物清单
| 文件 | 说明 |
|---|---|
generate_pdsch_waveform.m |
PDSCH 波形生成脚本 |
simulate_pdsch_sweep.m |
48 组多参数扫描脚本 |
plot_pdsch_waveforms.m |
48 张四联波形图生成脚本 |
test_generate_pdsch_waveform.m / test_pdsch_sweep.m |
单元测试 |
run_pdsch_agent.py |
MATLAB MCP Agentic 调用链(Python) |
pdsch_waveform.mat / pdsch_iq.csv |
波形数据(10 MHz 配置) |
pdsch_sweep_results.csv |
48 组 ACLR/EVM 完整数据 |
pdsch_waveform_analysis.png |
波形四联图(10 MHz 配置) |
pdsch_sweep_analysis.png |
ACLR/EVM 趋势四联图 |
waveform_plots/ |
48 张逐组波形图(时域/频域/栅格/星座) |
本文基于真实工程实践撰写,所有数据均可复现。欢迎交流 MATLAB Agentic AI 在芯片设计与 5G 通信验证中的应用。