2. MATLAB系统辨识工具箱快速入门
系统辨识的完整工作流可以概括为“准备数据 → 选择模型结构 → 估计参数 → 验证模型 → 应用模型”五个环节,而 MATLAB 的 System Identification Toolbox 正是围绕这条主线提供支持的。本节不讨论辨识算法本身,而是先把“工具用起来”:确认工具箱是否可用、认识图形界面与命令行两条入口、掌握数据对象的构造与导入方式,并完成一次最小可运行的辨识操作。
一、确认与安装工具箱
在动手之前,先确认当前 MATLAB 是否已经安装了该工具箱。最直接的方式是在命令行执行:
ver % 列出已安装的所有工具箱及版本
license('test','Identification_Toolbox') % 返回 1 表示已授权
which ident % 返回路径说明可用,返回空说明未安装
如果 ver 的输出中没有 “System Identification Toolbox”,则需要通过 MATLAB 的“附加功能 → 获取附加功能”(Add-Ons → Get Add-Ons)搜索并安装;校园版或网络许可用户通常由管理员统一部署,安装后重启 MATLAB 即可生效。安装完成后建议再执行一次 ver 确认版本号,因为不同版本在函数名和 App 名称上略有差异(例如早期版本使用 ident 图形界面,较新版本推荐使用 systemIdentification App)。
which ident 能返回有效路径、且 systemIdentification 能正常打开 App 窗口。二、两条入口:App 界面与命令行
工具箱提供两种互补的使用方式。图形界面适合探索性分析:在命令行输入 systemIdentification 打开 System Identification App,界面自上而下分为四个区域——左侧是“数据/模型”列表,用于导入和选择工作数据;中部是“操作选择区”,包含 Estimate(估计)、Process Models(过程模型)、Quick Start(快速开始)等入口;右侧是“结果视图区”,可切换 Time plot(时域曲线)、Frequency response(频响)、Model output(模型输出对比)、Residual analysis(残差分析)等视图;底部是状态提示区,显示当前数据区间、采样时间等信息。
命令行方式适合批量处理与脚本化复现。两者并非割裂:App 中的每一步操作都会在命令行历史中留下对应函数调用,可以据此把交互过程固化为脚本。常用命令按功能归类如下:
| 功能 | 常用命令 | 说明 |
|---|---|---|
| 构造数据对象 | iddata | 把输入输出数组封装为辨识专用对象 |
| 数据预处理 | detrend、resample、iddata 的 Ts 参数 | 去趋势、重采样、设定采样时间 |
| 划分数据 | data(1:500)、merge | 按索引切片或合并多段实验数据 |
| 模型估计 | arx、armax、oe、bj、tfest、ssest | 不同结构的最小二乘/预测误差估计 |
| 模型比较 | compare、resid、predict | 拟合度对比、残差白性检验、预测 |
| 模型转换 | tf、ss、c2d、d2c | 传递函数/状态空间互转、连续离散互转 |
三、数据导入与 iddata 对象
辨识的第一步永远是数据。工具箱要求数据以 iddata 对象形式参与运算,其基本构造语法为:
% y: 输出序列(N×1),u: 输入序列(N×1),Ts: 采样周期
data = iddata(y, u, Ts);
% 若为多输入多输出,u 为 N×nu 矩阵,y 为 N×ny 矩阵
data = iddata(y, u, 0.01, 'Name', 'motor_test', ...
'InputName', {'voltage'}, 'OutputName', {'speed'});
数据来源通常有三类:一是工作区中已有的数值数组,直接传入 iddata;二是文本或 Excel 文件,用 readmatrix 或 readtable 读入后再构造;三是 App 中的 Import data 菜单,支持从 MAT 文件、工作区变量或 Excel 导入。导入后务必检查三件事:采样时间 Ts 是否与实际一致(Ts=0 表示连续时间数据)、输入输出是否对齐、是否存在缺失值或异常跳变。可用 data.Ts、data.InputData、data.OutputData 查看属性,用 plot(data) 快速观察波形。
下面这张图把“从原始数据到可用模型”的关键路径与各环节对应的命令、检查点串在一起,可作为本节的操作地图:
四、一次最小可运行的辨识示例
下面用一段自造数据走通全流程,便于理解各命令的输入输出关系。示例数据由已知二阶系统生成,属于教学假设,不代表任何实测结果:
rng(1); % 固定随机种子,保证可复现
Ts = 0.05; % 采样周期 0.05 s
t = (0:Ts:20)'; % 20 s 数据
u = idinput(length(t),'prbs',[0 0.3]); % PRBS 激励信号
sys_true = tf([1],[1 1.2 1]); % 假设真实连续系统
sys_d = c2d(sys_true, Ts); % 离散化
y = lsim(sys_d, u, t) + 0.02*randn(size(t)); % 加少量噪声
data = iddata(y, u, Ts); % 构造 iddata 对象
de = data(1:300); % 估计集
dv = data(301:end); % 验证集
m_arx = arx(de, [2 2 1]); % ARX:na=2, nb=2, nk=1
m_oe = oe(de, [2 2 1]); % OE 结构
compare(dv, m_arx, m_oe); % 在验证集上比较拟合度
resid(dv, m_arx); % 残差分析
运行后 compare 会给出各模型在验证数据上的拟合百分比(fit),数值越高说明模型输出与实际输出越接近;resid 会绘制残差自相关与输入互相关图,若曲线基本落在置信区间内,说明残差接近白噪声,模型未遗漏主要动态。若拟合度偏低,常见原因包括:阶次不足、延迟 nk 设置错误、数据未去趋势、或激励信号频带不足以激发系统动态。此时应回到数据准备与结构选择环节调整,而不是盲目提高阶次。
五、基本操作中的几个易错点
- 采样时间不一致:若
iddata的Ts与实际采样周期不符,频响和预测结果都会失真。连续时间数据应显式设Ts=0。 - 输入输出维度错位:
iddata(y,u,Ts)中 y 在前、u 在后,多通道时按列排列,顺序必须与InputName/OutputName对应。 - 直接对含趋势数据建模:温漂、零点漂移等慢变分量会被模型误当作动态,建议先
detrend或差分处理。 - 忽略延迟 nk:实际系统存在纯延迟时,若
nk设为 1 而真实延迟为 3 个采样周期,ARX 会强行用高阶极点逼近,导致模型虚高。