ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

系统辨识入门:从数据到模型的完整流程与避坑指南

系统辨识入门:从数据到模型的完整流程与避坑指南

简介:这份系统辨识教案面向自动化专业学生与相关课程学习者,围绕从输入输出数据中建立系统模型这一核心问题,梳理辨识理论、实验设计与编程计算的学习路径。压缩包共1个文件,为doc格式文档,大小约1.42MB,内容涵盖课程参考书目、学习要求与考核办法,并系统讲解实体与模型的概念、模型分类及数学模型的获取方法。文档还结合长网造纸过程的质量控制实例,完整展开明确辨识目的、收集先验知识、设计辨识试验、数据采集与预处理、选择模型类、结构辨识与参数估计、模型检验及转换应用等一般步骤,并引用Zadeh对系统辨识的经典定义,说明数据、模型类和准则三要素。已有150人学习,适合希望减少课堂依赖、通过自学掌握辨识技术并独立完成数据分析报告的读者参考。

1. 系统辨识:为什么“给一段输入输出数据就能反推出模型”不是玄学

拿到一份数据文件,里面只有输入序列和输出序列,要求你反推出一个能描述系统动态特性的数学模型——这件事听起来像玄学,但它恰恰是自动化专业一门 40 学时课程的核心训练。系统辨识要解决的问题很具体:真实系统(造纸机、热交换器、电机)的内部机理往往复杂到无法用机理分析法写出精确方程,但我们可以通过设计激励实验、采集输入输出数据、再用准则去拟合,从一组候选模型类中挑出一个与观测系统“等价”的模型。Zadeh 在 1962 年给出的定义把这件事拆成了三要素:数据、模型类、准则。三者不唯一,且互相牵制,这正是辨识既是技术又是判断力的原因。搞懂这套机制,你才能明白为什么同一组数据换一个准则会得到完全不同的模型,也才能在设计实验时不至于把系统激励到“翻车”。

2. 辨识三要素:数据、模型类、准则为什么必须一起谈

2.1 数据不是采了就能用:平稳性与各态遍历的前提

辨识用的数据来自对实体的观测,但观测本身有前提。教材里先区分随机过程、平稳随机过程和各态遍历平稳随机过程,这不是数学洁癖,而是因为后续所有相关函数、谱密度的计算都建立在“时间平均等于集合平均”这个假设上。只有各态遍历的平稳过程,你才能用一条足够长的采样序列去估计均值和自相关函数,而不需要重复做无数次实验。

数字特征那张表里,均值、均方值、方差、自相关函数、协方差函数在平稳和各态遍历条件下的简化关系,是后面推导最小二乘和相关性辨识的底座。离散计算时时延 τ = k·T₀,T₀ 是采样间隔,这个换算关系在写代码算互相关时天天要用。相关函数的性质里有几条特别值得记住:周期信号的自相关函数仍是同周期信号;均值为零且不含周期成分的信号,τ 很大时自相关趋于零;线性系统 y(k)=G(z)u(k) 下输入输出的互相关与脉冲响应直接挂钩。这些性质不是用来背的,而是用来判断“我采到的这段数据到底能不能支撑辨识”的。

2.2 白噪声与 M 序列:为什么扰动信号要“宽”且“可控”

维纳—肯塔金关系式告诉我们,随机过程的谱密度和自相关函数是一对傅立叶变换。对线性系统,输出谱密度等于输入谱密度乘以系统频率响应的模平方。这条关系直接推出一个设计原则:要充分激励系统,输入信号的频谱必须“宽”于系统频谱。白噪声谱密度为常数、频带无限、不同时刻互不相关,理论上是最理想的激励信号,还能用来判断残差是否白色、模型是否合适。

但白噪声在物理上不存在,工业现场常见的是有色噪声。有色噪声表示定理说,任何平稳有色噪声都可以看作白噪声经过一个渐近稳定的线性环节(成形滤波器)的输出。这就把“噪声建模”转化成了“找一个滤波器”,是后续增广最小二乘一类方法的理论入口。

工程上真正能用的是 M 序列——二位式最大长度伪随机序列。n 阶 M 序列周期 N=2ⁿ−1,一个周期里 1 比 0 多一个,以 −1 代替 0 后自相关函数在 τ=0 处为 1、其余为 −1/N,N 充分大时近似 δ 函数。这意味着以 M 序列为输入的线性系统,其输入输出互相关序列近似等于脉冲响应序列。更实用的是多输入场景:同一 M 序列的不同移位序列之间近似正交,只要输出对各输入的过渡过程小于移位间隔 J,就可以把多个输入同时激励而不互相污染。逆重复 M 序列把 M 序列与方波相乘,周期变为 2N,一个周期内 1 和 −1 个数相等,去掉了直流分量,自相关在奇数半周期处为 −1、其余为 0,幅值仍然可控——这就是“具有白噪声优点、幅值又可设计”的折中。

2.3 准则的三种误差:为什么 J 的形式决定了算法能走多远

准则规定了模型与实体等价的评判标准,教材把误差分成参数误差、方程误差和输出误差。参数误差 J=∑(参数偏差)²/n 适合算法研究;方程误差 e(k)=y(k)+a·y(k−1)−b·u(k−1)−c·u(k−2),J 是参数的线性函数,只能做一步预测,对应模型 AY=B₁U₁+B₂U₂;输出误差 e(k)=y(k)−ŷ(k),ŷ 由模型自身递推得到,J 是参数的非线性函数,输入已知时可做多步预测。

这个区分是整门课的分水岭。方程误差线性、好解,但模型结构受限;输出误差更贴近真实预测,却把参数估计变成了非线性优化。教材还点出两个容易被忽略的效应:模型阶次越高 J 越小,会导致过估计;采样间隔增大一倍,模型阶次大致减半,所以比较不同采样步长下的模型时,误差公式要改成 J=∑eᵀWe·T₀²/N,把采样步长的影响归一化掉。不做这一步归一化,你会在“哪个模型更好”上得出完全错误的结论。

3. 从实验设计到模型检验:一条不能跳步的流水线

3.1 造纸例子拆解:先验知识如何决定实验边界

教材用长网造纸的定量与水份控制做贯穿例子。目标是建立 G=f(D,F,V,P)、W=g(D,F,V,P) 的模型用于计算机控制。收集先验知识阶段发现:车速调整存在同步困难、不同步会断纸,所以车速设为恒定;流量到定量有约 60 秒延迟、响应约 2 秒;浓度到定量延迟约 120 秒、响应约 80 秒;蒸汽压力到水份延迟约 45 秒、响应约 60 秒。这些数字直接决定了后面怎么分块、怎么选采样频率、扰动加在哪些通道上。

设计试验时,取流量和蒸汽压力对定量、水份的影响作为一个分块,保持车速和浓度不变,对流量和蒸汽压力分别施加伪随机序列扰动,幅度以不引起断纸为限,采样频率设为 2,试验时间 1000 秒,采集定量、水份、纸浆流量和蒸汽压力四路信号。这里每一步都有依据:分块是为了解耦,幅值受限是安全工况约束,采样频率要满足香农定理且与扰动信号步宽匹配。

3.2 M 序列参数怎么定:n 和 Ts 的两套算法

扰动信号设计要点是频带宽于过程工作频带、持续 3–5 个扰动周期、幅值由安全工况确定。M 序列设计要定级数 n 和步宽 Ts。设系统过渡过程时间为 T、最高工作频率 fmax(通常 fmax=(3~15)/T),第一套算法:由 1/Ts>3·fmax 得 Ts=T/(3k)(设 fmax=k/T),再由 1.5T<(2ⁿ−1)Ts 推出 4.5k≈2ⁿ−1 求 n。第二套算法更直接:先定 n,再由 n·Ts=(0.1~0.8)T 算 Ts。多输入单输出系统还要求 (2ⁿ−1−1)·Ts>1.5·∑(输出对各输入的过渡过程时间),保证各移位序列在过渡过程内正交。

数据采集设计里,采样间隔 T₀ 满足 1/T₀>2·fmax,有扰动信号时 T₀<Ts 且 Ts 应是 T₀ 的整数倍。实验数据长度取 3–5 个扰动周期,预实验 1–2 个周期。下面这段伪代码把上述约束落成了可执行的检查逻辑:

def design_m_sequence(T, k=5, n=None, Ts=None): # T: 系统过渡过程时间; fmax = k/T fmax = k / T if Ts is None: Ts = T / (3 * k) # 由 1/Ts > 3*fmax 反推 if n is None: # 由 1.5*T < (2^n - 1)*Ts 求最小 n n = 1 while (2**n - 1) * Ts <= 1.5 * T: n += 1 N = 2**n - 1 # 一个周期的状态数 assert N * Ts >= 1.5 * T, "周期长度不足以覆盖过渡过程" assert 1 / Ts > 3 * fmax, "步宽过大,频带不够宽" return n, Ts, N # 采样间隔必须小于步宽,且步宽是采样间隔整数倍 def check_sampling(Ts, T0, fmax): assert 1 / T0 > 2 * fmax, "违反香农定理" assert T0 < Ts and abs(Ts / T0 - round(Ts / T0)) < 1e-9, "Ts 非 T0 整数倍"

参数含义:T 是实测过渡过程时间,k 取 3–15 之间,n 是移位寄存器阶数,Ts 是一步持续时间,N 是一个周期长度。两个 assert 就是教材里那两条不等式的代码化,跑不过就说明扰动信号设计不成立,别急着往下采数据。

3.3 数据预处理:标准化为什么能防病态方程

采到的原始数据要先做传感器非线性校正、滤波、重抽样、标准化。滤波时对输入输出加相同滤波器,输入输出关系不变,这是能这么做的原因。重抽样针对过渡过程较长的子系统,重新选采样间隔以降低模型阶次。标准化做零均值、单位方差,目的是降低舍入误差、防止病态方程、提高计算精度。

教材给出的推导很能说明问题:原方程 y(k)+a·y(k−1)=b·u(k−1)+c·u(k−2)+d,先减去均值消掉常数项 d,得到 Y(k)+a·Y(k−1)=b·U(k−1)+c·U(k−2);再除以标准差 σy、σu 得 Yσ(k)+a·Yσ(k−1)=B·Uσ(k−1)+C·Uσ(k−2),其中 B=b·σu/σy、C=c·σu/σy;估出 B、C 后要反演回 b=B·σy/σu、c=C·σy/σu。忘记反演,你得到的参数就是错的,这是新手最常见的翻车点之一。

3.4 模型检验与转换:不通过时该回到哪一步

结构辨识与参数估计得到参考模型的阶次和参数后,要按准则做模型检验。不通过就分析问题、返回前期相应步骤:可能是激励不够、可能是模型类选错、可能是预处理没做好。通过后做模型转换,把便于辨识的参考模型转成便于应用的应用模型,再做应用评价,不成功同样要回溯。这条流程的关键在于“返回点”的判断——教材流程图里每个“不通过”都指向不同的上游步骤,而不是笼统地重来。

4. 避坑与排查:辨识现场最容易踩的五个坑

4.1 扰动幅值超限导致生产异常

现象:试验中途出现断纸或设备报警。原因:M 序列幅值只按“能激励系统”选,没按安全工况限幅。解决:幅值由安全工况确定,扰动信号发生器加限幅器,预发信号阶段先验证实际输出幅值。

4.2 采样间隔与步宽不匹配

现象:辨识出的模型阶次虚高或参数漂移。原因:T₀ 不是 Ts 的整数倍,或 1/T₀ 不满足大于 2·fmax。解决:按 3.2 节的 check_sampling 先做约束检查,重抽样时保持 Ts/T₀ 为整数。

4.3 忘记标准化反演

现象:参数估计值量级明显不对。原因:用标准化后的数据估出 B、C 后直接当 b、c 用。解决:按 b=B·σy/σu、c=C·σy/σu 反演,并在报告里写清标准化前后的对应关系。

4.4 多输入移位间隔不足

现象:多输入单输出辨识时各通道互相污染。原因:移位间隔 J 小于输出对各输入的过渡过程时间。解决:满足 (2ⁿ−1−1)·Ts>1.5·∑过渡过程时间,或增大 J 后重新设计序列。

4.5 用高阶模型硬拟合

现象:J 很小但模型无法用于控制。原因:阶次越高 J 越小,导致过估计。解决:结合辨识目的选模型类,比较不同采样步长时用 J=∑eᵀWe·T₀²/N 归一化,别只盯 J 的绝对值。

5. 模型类选择的取舍:为什么“够用”比“精确”更难判断

辨识目的直接决定模型类怎么选。验证理论模型要求零极点、结构、参数都准,模型类要同理论模型;设计常规控制器要求动态响应、零极点、时延准确,模型类要便于分析;设计数字控制器和预报预测要求便于计算机运算;监视过程参数做故障诊断只要求参数准确、能直观体现被监视量;定量定性分析只要求静态关系准确、模型简单到人脑能判断。同一组数据,为不同目的服务时该选的模型类完全不同,这就是三要素里“模型类不唯一”的真正含义。

教材列出的模型谱系从阶跃响应、差分/微分方程、连续/离散传递函数到状态方程,再到惯性、微分、积分、惯性加微分这些典型环节。集中参数还是分布参数、序列还是方程、线性还是非线性、时变还是时不变、确定还是随机、单变量还是多变量、离散还是连续、有时延还是无时延——每一对选择背后都是“精度”和“可用性”的交换。时变模型里锅炉热交换器因灰尘附着改变效率的例子说明,模型有效性会随时间漂移,动态建模需要定期更新参数,这不是模型没建好,而是对象本身在变。

我一般会这么理解这套取舍:辨识不是追求 J 最小,而是在给定数据、给定模型类、给定准则下找到一个“应用评价能通过”的模型。考核方式给一个数据文件让你编程辨识并写报告,考的正是这条完整链路——你能不能从数据里看出该选什么模型类、该用什么准则、检验不通过时该回到哪一步。从那以后我每次拿到一组辨识数据,都强制先走一遍“目的—先验知识—试验设计—预处理—模型类—检验”的检查表,再动手写拟合代码,因为跳过任何一步,后面都会用更大的代价补回来。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进