简介面向自动化专业本科教学的《系统辨识教案》可作为课程配套教材与自学材料帮助读者建立从输入输出数据到系统模型的完整认知适合课堂讲授、期末复习和辨识实验入门。压缩包内为1个doc文档约1.42MB按40课时组织便于打印和二次编辑。内容从实体与模型的概念切入梳理直觉模型、物理模型与数学模型的分类讲清Zadeh定义中的数据、模型类和准则三要素并按明确目的、收集先验知识、设计试验、结构辨识与参数估计、模型检验等步骤展开造纸定量与水分控制案例可辅助理解工程建模流程。教案还列出徐南荣《系统辨识》、方崇智与萧德云《过程辨识》等参考书以及自主学习、实验设计与编程计算的要求和报告式考核办法。已有151人学习下载适合需要梳理辨识理论框架、补充笔记或准备建模作业的自动化专业学生与教师参考。1. 系统辨识的真相最小二乘只占十分之一工作量很多人第一次接触系统辨识默认它等于「套一个最小二乘」。真跑一遍就会发现拟合代码不到二十行剩下时间全耗在纠结采样周期取多少、扰动信号加多大幅度、阶次选 3 还是 5、要不要先把数据去均值。更反直觉的是这些看起来外围的决定直接决定最后那二十行代码算出来的参数有没有意义。这份系统辨识教案把四十课时里绝大部分篇幅给了试验设计、数据预处理和准则选择算法推导反而被压缩得很薄。这种配比不是偷懒而是这门课真正的难点所在参数估计之前的所有环节才是模型能不能用的分水岭。2. 辨识三要素为什么「数据、模型类、准则」必须同时锁定2.1 一条定义里的三个自由度上世纪六十年代初一位学者给出了被沿用至今的定义辨识就是在输入输出数据的基础上从一组给定的模型类中确定一个与所观测系统等价的模型。这句话短但每个从句都藏着一个自由度。「输入输出数据」是第一个自由度。同一台设备观测时长不同、观测时段不同、观测目的不同拿到的数据就不同。上午采的一段数据记录的是上午那个工况下午再采一遍未必能复现。数据本身不唯一这一点决定了辨识结论天然带条件。「一组给定的模型类」是第二个自由度。模型类规定了模型的形式是选差分方程、传递函数还是状态空间是一阶还是五阶是有时延还是无时延。模型类不唯一受辨识目的和辨识方法影响。「等价」是第三个自由度的落点也就是准则。等价不是相等两台完全不同的系统在某个准则下可能被判为等价。准则规定了模型与实体比对的尺子尺子换了结论就换。这里有个容易被跳过的推论三要素是评判数据拟合方法优劣的必要条件缺一不可。只有在相同的三要素下才谈得上比较两种拟合方法谁更好三要素换了这种比较本身就没有意义。理解了这一条就不会再纠结「最小二乘和梯度法哪个准」这种问法因为在模型类和准则没锁死之前这个问题无解。常见的实现思路是把方法比较当成一个受控实验除了算法本身其他全部固定。2.2 辨识目的如何反向锁定模型类与准则三要素里最上游的是目的。教案里给了一张对照表把这层反向决定关系写得很清楚值得单独拎出来。辨识目的对模型的要求模型类倾向验证理论模型零极点、结构阶次与时延、参数都准确与理论模型同构设计常规控制器动态响应特性、零极点、时延准确便于频域或根轨迹分析设计数字控制器动态响应特性、时延准确便于计算机递推运算设计仿真或训练系统动态响应特性准确便于模拟实现预报预测动态响应特性、时延准确便于递推计算监视过程参数、故障诊断参数准确能直观体现被监视物理量定性与定量分析静态关系准确结构简单便于人脑判断看这张表的用法目的不同对准的定义就不同。做控制器设计你根本不在乎某个中间系数是不是物理真值你只在乎闭环下相位裕度够不够做故障诊断恰好相反你不在乎动态响应是否完美复现只在乎那个对应物理量比如换热效率的系数有没有漂移。这就解释了一个新手常见的困惑为什么同一批数据换一个目的重做一遍辨识结果会差很远而且两个结果都对。因为它们优化的本来就不是同一把尺子。我一般会这么理解模型不是一个客观对象而是一份针对特定用途的合同条款写什么取决于你要用它干什么。2.3 十一步流程里哪几步是后悔药教案用长网造纸的质量控制做贯穿案例。成品纸的定量 G 和水份 W 与纸浆浓度 D、流量 F、车速 V、蒸汽压力 P 有关目标是建一个能上计算机控制的模型。围绕这个例子铺开的十一步把整个流程走了一遍。第一步明确目的为计算机控制建定量与水份的模型。第二步收集先验知识现场调查得到三条关键信息车速调整不同步会引起断纸所以车速设恒定流量变化到定量变化有约 60 秒延迟响应过程只有约 2 秒浓度变化到定量变化有约 120 秒延迟响应过程约 80 秒蒸汽压力到水份有约 45 秒延迟响应过程约 60 秒。这三条信息的分量极重。延迟 60 秒、响应 2 秒意味着这是一个典型的大延迟小时间常数对象采样间隔和试验时长必须按 60 秒这个量级定而不是按 2 秒。如果按响应过程定采样你会采到一个几乎全是纯延迟的数据段阶次怎么估都是错的。第三步设计辨识试验把系统分块取流量与蒸汽压力对定量与水份的影响这一块保持车速与浓度不变对两个输入分别施加伪随机序列扰动幅度以不引起断纸为限采样频率设为 2对应采样间隔 0.5 秒试验时长 1000 秒。第四步现场准备包括申请试验时段、扰动信号发生器预发校验、干扰摸底与模拟滤波、模数转换零迁与放大标定、接线。第五步数据采集并存盘写数据说明文件。第六步数据预处理。第七步选模型类分应用模型与参考模型两部分参考模型是便于做结构辨识和参数估计的中间形式。第八步结构辨识与参数估计。第九步模型检验。第十步模型转换把参考模型转成应用模型。第十一步应用评价。这套流程的骨架是一条链但真正值得注意的是回退箭头检验不通过回退到前面应用评价不成功也回退。回退意味着大部分环节都能重来唯独数据观测这一段不行。现场工况过了就过了领导批的试验时段过了就过了传感器接线拆了再装一遍零点就变了。血泪经验是一次辨识失败八成不是算法选错而是当初采的那批数据里根本没有能激励出目标模态的成分而这份数据不可再生。所以第四步现场准备那几件看起来最像杂活的事恰恰是最不能省的。3. M 序列伪随机信号凭什么能当白噪声用3.1 互相关直接给出脉冲响应的推导先看白噪声做输入时会发生什么。线性系统输出 y 与输入 u 的互相关函数满足 R_uy(τ) h(τ) * R_uu(τ)卷积。白噪声的自相关是 σ²·δ(τ)代进去就得到 R_uy(τ) σ²·h(τ)。也就是说只要输入是白噪声输入输出互相关函数的形状就是脉冲响应的形状差一个常数因子。这条性质的价值在于绕开了解方程。不需要假设阶次、不需要构造回归矩阵、不需要迭代只要算一遍互相关非参数模型就到手了。对于完全不清楚结构的新对象这是最安全的起点。问题是白噪声物理上不存在幅值无界、频谱无限宽、每一时刻都要重新抽一个独立随机数。现场不允许你在蒸汽压力上叠加一个服从正态分布、偶尔冲到 5 倍标准差的扰动。M 序列就是在这个夹缝里的替代品它是一种二位式最大长度伪随机序列幅值只取 a 和 -a 两个值幅值可控但自相关函数在一个周期内近似为 δ 函数。用 -1 代替 0 之后M 序列的自相关是τ iN 时取 1其余时刻取 -1/N。N 是周期长度 2^n - 1。当 N 足够大时-1/N 这个底座趋近于 0整条自相关曲线就退化成一个冲激。这时把它接到线性系统上互相关序列就等于脉冲响应序列。教案里明确写了应用条件N 要大于过渡过程否则一个周期还没走完冲激就被卷回来了。用代码验证这件事比看公式踏实得多import numpy as np def m_sequence(n, cycles1): 生成 n 阶 M 序列0/1 形式。 n: 移位寄存器级数决定周期 N 2^n - 1 cycles: 输出多少个完整周期 抽头按本原多项式选取选错抽头周期会变短 taps {3: (3, 2), 4: (4, 3), 5: (5, 3), 6: (6, 5), 7: (7, 6), 8: (8, 6, 5, 4)} tab taps[n] N (1 n) - 1 state (1 n) - 1 # 初值不能全 0否则寄存器锁死在零态 out [] for _ in range(N * cycles): out.append(state 1) # 最低位输出其他位右移 fb 0 for t in tab: # 抽头位做异或作为反馈 fb ^ (state (t - 1)) 1 state (state 1) | (fb (n - 1)) return out def m_autocorr(seq): 把 0/1 序列映射为 -1/1 后算归一化自相关 x 2 * np.array(seq) - 1 N len(x) return np.array([np.dot(x[:N - k], x[k:]) / N for k in range(N)]) seq m_sequence(4, cycles1) r m_autocorr(seq) print(len(seq), r[0], r[1:5]) # 15 1.0 [-0.0667 ...]跑出来周期长度正好 15自相关在零延迟处为 1其余处为 -1/15 ≈ -0.0667。这里的关键参数是 n它同时决定了周期长度和序列的状态数4 阶移位寄存器一共只有 15 个非零状态全周期就是把这 15 个状态各走一遍所以周期必然是 2^n - 1多一个都走不出来。这也是它叫最大长度的原因。3.2 谱线结构M 序列不是真白噪声M 序列的频谱不是光滑曲线而是一根一根的线条谱谱线间隔是 1/(N·Ts)包络呈 sinc 形状。这个线条特征带来三个必须记住的后果。第一直流分量。M 序列一个周期里 1 的个数比 0 的多 1所以均值是 1/N不是零。加大 N 可以让这个偏置迅速衰减直流功率占比按 1/N² 下降。这就是为什么试验要跑 3 到 5 个周期跑得少直流偏置在数据里占比大趋势项会把低频信息盖住。第二带宽。谱包络不是无限的主要能量集中在 1/(3Ts) 以内Ts 为一步序列的持续时间。所以减小 Ts 可以增加带宽。这一条直接对应扰动信号设计要点里那句扰动信号频带应宽于过程的工作频带。带宽不够系统的高频模态根本没被激励你辨识出来的模型在高频段就是瞎猜。第三谱线密度与 N 成正比。N 越大谱线越密越接近连续谱也越接近理想白噪声的假设。但 N 大意味着试验时间长而试验时间长又受生产工况稳定性的制约这是绕不过去的取舍。逆重复 M 序列是这条路线上的一个改良版本把 M 序列与方波序列相乘周期变成 2N一个周期里 1 和 -1 的个数相等。它的自相关在偶数倍 N 处为 1在奇数倍 N 处为 -1其余处为 0。均值严格为零避免了直流偏置污染低频段。散点分布上它保留了白噪声的优点同时幅值依然是可控的两位式这在工业现场是决定性的优势。3.3 n 与 Ts 怎么定两套公式的实际用法扰动信号设计的核心就是把 n 和 Ts 定下来。教案给了两套方法算出来的量级差不多思路不同。第一套从频带出发。设系统过渡过程时间为 T最高工作频率 fmax 通常取 (3~15)/T记 fmax k/T。由 1/Ts 3·fmax 得到 Ts T/(3k)。再由一个周期的长度要覆盖 1.5 倍过渡过程即 1.5T (2^n - 1)·Ts代入可得 4.5k 2^n - 1解出 n。第二套从周期长度出发。先确认 T 并直接选 n再由 n·Ts (0.1~0.8)T 反算 Ts。def design_by_bandwidth(T, k5): 第一套按带宽约束定 Ts再按周期覆盖定 n T: 过渡过程时间(s) k: fmax k/T 中的系数经验取 3~15 fmax k / T Ts 1.0 / (3 * fmax) # 满足 1/Ts 3*fmax n 1 while (2 ** n - 1) * Ts 1.5 * T: # 周期长度要超过 1.5T n 1 return n, Ts, (2 ** n - 1) * Ts def design_by_period(T, n): 第二套先定阶次再让 n*Ts 落在 (0.1~0.8)T 区间 Ts 0.1 * T / n # 取下限偏保守 return n, Ts for k in (3, 5, 15): print(k, design_by_bandwidth(T60, kk))拿造纸案例的流量通道试一下T 取 60 秒的延迟量级k 5 时 Ts 4 秒n 要满足 (2^n - 1)·4 90即 2^n 23.5取 n 5周期长度 31×4 124 秒约两倍于过渡过程够用。这套算法有个隐含约束k 越大要求带宽越宽算出来的 n 越大试验周期也越长。所以 k 不能随便往大取。多输入单输出系统还有一条额外约束(2^n - 1 - 1)·Ts 1.5·Σ(输出对各输入的过渡过程时间)。这条的物理含义在下一章的坑里细说。采样间隔 T0 的定法相对简单满足香农定理1/T0 2·fmax对有扰动信号的系统要求 T0 Ts且 Ts 必须是 T0 的整数倍。最后这一点最容易被忽略——不对齐的话扰动的自相关会出现毛刺本来该是 δ 的东西变得坑坑洼洼。4. 误差准则为什么换个误差定义参数就翻车4.1 方程误差与输出误差线性与非线性的一线之隔教案把误差分成四类前两类是仿真研究用的后两类是实战用的。参数误差 J Σ(θ̂ - θ)²/n直接比参数真值。它只在你知道真值的仿真里可用实际对象哪来的真值。这类准则适合做算法研究不适合工程。方程误差以 y(k) a·y(k-1) b·u(k-1) c·u(k-2) 这个模型为例残差写成 e(k) y(k) a·y(k-1) - b·u(k-1) - c·u(k-2)J Σe(k)²/N。关键性质J 是参数的线性函数。因为 e(k) 里每一项都是参数 × 已知数据可以直接堆成一个回归矩阵一次最小二乘解出来不需要迭代不存在局部极小。代价是它只能做一步预测它衡量的是用上一时刻的真实输出预测这一时刻而真实系统跑起来的时候上一时刻的预测输出才是你能拿到的。输出误差换了个做法。先让模型自己跑ŷ(k) -a·ŷ(k-1) b·u(k-1) c·u(k-2)注意这里用的是 ŷ(k-1) 而不是 y(k-1)然后 e(k) y(k) - ŷ(k)。这一改J 就成了参数的非线性函数——因为 ŷ(k-1) 本身含有 a、b、c参数进到了回归量里面。非线性意味着没有解析解得用梯度法或信赖域迭代还得担心初值和局部极小。换来的是它能做多步预测模型自洽。import numpy as np from scipy.optimize import least_squares def fit_equation_error(y, u): 方程误差残差对参数线性一次最小二乘即可 Phi np.column_stack([-y[1:-1], u[1:-1], u[:-2]]) theta, *_ np.linalg.lstsq(Phi, y[2:], rcondNone) return theta # [a, b, c] def oe_residual(theta, y, u): 输出误差模型自跑残差对参数非线性 a, b, c theta yhat np.zeros_like(y) yhat[0] y[0] for k in range(1, len(y)): yhat[k] -a * yhat[k - 1] b * u[k - 1] c * u[k - 2] return y - yhat # 供 least_squares 迭代 def fit_output_error(y, u, theta0(0.5, 0.5, 0.1)): res least_squares(oe_residual, theta0, args(y, u)) return res.x两段代码的差别只有一行ŷ(k-1) 还是 y(k-1)。但这一行决定了你走的是闭式解还是迭代解也决定了模型能不能用来做长时段预测。选择逻辑很清楚只要目的是仿真、预测或者模型转换就得吃输出误差这口非线性的苦如果只是要一组初始参数先用方程误差拿个解当迭代初值是最省事的组合。还有一类白化误差加权准则J Σe(k)ᵀWe(k)/N用一个加权阵 W 对不同通道、不同时段的残差差别对待。这在多输出系统里很实用因为定量和水份的量纲、精度要求本来就不一样。4.2 阶次与采样间隔怎么腐蚀误差值有一个陷阱藏在 J 的定义里模型阶次越高J 值越小。这不是模型变好了而是自由度多了拟合能力天然更强最后能把噪声也拟合进去。教案里管这叫过估计。所以拿 J 的绝对值比两个不同阶次的模型方法本身就是错的。正确做法是看增加阶次带来的 J 下降是否显著——如果从 3 阶升到 4 阶J 只降了 2%那多出来的那个极点大概率在拟合噪声。这一步本质上是模型结构检验教案把它放在第九步而不是第八步是有道理的。采样间隔的影响更反直觉。采样间隔增大一倍模型阶次大致减少一半。原因是离散化把连续系统的极点映射到 z 平面采样越慢快模态越往原点附近挤很快变得不可辨识等效阶次就降下来了。但这里紧接着一个问题既然采样间隔变了阶次就变那怎么比较不同采样步长下辨识出来的两个模型直接比 J 会得出错误结论因为离散残差的量纲跟着 T0 变了T0 小的天然占便宜。教案给的修正公式是把误差折算回连续时间的能量J Σe(k)ᵀWe(k)·T0²/N。乘上 T0² 之后不同采样步长的 J 才在同一把尺子上。这个细节在任何一本算法书里都不起眼但在写辨识报告、比较方案时是硬性要求漏了就白做。4.3 预处理标准化为什么能救方程数据预处理这一步有四件事传感器非线性校正、滤波、重抽样、标准化。前两件是常识后两件值得拆开看。滤波的关键约束是输入输出必须加相同的滤波器。因为传递函数是 G Y/U如果 Y 和 U 各乘一个 F得到 (Y·F)/(U·F) G系统关系不变。反过来只滤输出不滤输入等于凭空给系统加了一个环节辨识出来的模型必然带偏差。这条在噪声大的现场特别容易违反因为直觉上噪声在输出上当然只滤输出。重抽样的逻辑和上一节的采样间隔一致过渡过程长的子系统原始采样率往往过高重抽样降低采样率能把模型阶次压下来减少待估参数。标准化是这四件事里最有技术含量的。教案给的推导很值得跟着走一遍。原模型是 y(k) a·y(k-1) b·u(k-1) c·u(k-2) d其中 d 是直流偏置。先两边取平均得到 ȳ a·ȳ b·ū c·ū d所以 d (1 a)·ȳ - (b c)·ū。把 d 代回去并令 Y(k) y(k) - ȳ、U(k) u(k) - ū就得到去均值后的方程 Y(k) a·Y(k-1) b·U(k-1) c·U(k-2)。再做单位方差σy² ΣY(k)²/Nσu² ΣU(k)²/N令 Yσ Y/σy、Uσ U/σu代进去整理得 Yσ(k) a·Yσ(k-1) B·Uσ(k-1) C·Uσ(k-2)其中 B b·σu/σyC c·σu/σy。反演公式是 b B·σy/σuc C·σy/σu。def normalize(y, u): 去均值 单位方差返回标准化数据与反演所需的统计量 my, mu y.mean(), u.mean() sy, su y.std(), u.std() return (y - my) / sy, (u - mu) / su, my, mu, sy, su def denormalize_coef(B, C, sy, su): 把标准化域估出的 B、C 还原成物理参数 b、c return B * sy / su, C * sy / su为什么要多这一步两个原因。一是数值上原始数据的量级可能是 10⁵ 帕斯卡配 10⁻³ 米的位移回归矩阵各列量级差好几个数量级正规方程的条件数会爆炸解出来的参数能差出好几个有效位这就是所谓的病态方程。二是结构上去均值把 d 从模型里消掉了等于少估一个参数而 d 在多数场景下根本没有物理意义估出来也是干扰项。我一般会这么理解标准化不是在美化数据而是在给最小二乘换一套坐标让它在数值上站得住。5. 常见问题排查五个能把结论彻底带偏的坑5.1 试验与数据阶段的坑坑一辨识出来的稳态增益差了一倍。现象是拟合残差看着不大但把阶跃输入代进去稳态值明显对不上。原因基本只有一个数据没去均值模型里的直流项 d 被强行塞进了 a、b、c 里。方程误差的回归矩阵里如果带着明显非零的均值最小二乘会把这部分均值解释成参数的一部分尤其是在数据长度不够、周期数不足M 序列均值 1/N 没能衰减的时候。解决办法是先做零均值化再拟合或者显式地把 d 作为待估参数放进回归量。这个坑的隐蔽之处在于残差曲线很漂亮因为偏置被完美吸收了。坑二扰动信号一加下去现场数据全是毛刺。现象是采集到的输出偏离正常工况甚至触发报警。原因是幅值按理论值取超过了安全工况允许的范围或者扰动信号发生器没做预发校验、没加限幅器。教案里对应的要求写得很直白幅值由安全工况确定可中断生产的系统才考虑单独试验。对不可中断的流程工业扰动幅值往往被压得很小噪信比随之变差这时就得靠延长试验时间和增加周期数来补。解决顺序是先预发 1 到 2 个周期看现场反应确认无异常再正式采集扰动信号发生器必须带限幅接线前后都要标定时间间隔。坑三M 序列的自相关出现毛刺互相关算出来的脉冲响应带振荡。现象是理论上的 -1/N 底座上叠了一层不规则的抖动。原因是采样间隔 T0 和序列步宽 Ts 没对齐Ts 不是 T0 的整数倍。数字化的时候序列的边沿落在采样点之间实际输出的是一段被截断过的序列自相关自然就不是干净的两值。解决办法很机械先定 T0再令 Ts m·T0m 为整数然后反算 n 使周期长度满足覆盖要求。顺序不能倒过来先定 Ts 再凑 T0 一定会对不齐。5.2 模型与评价阶段的坑坑四多输入系统两个通道的参数互相串。现象是单独辨识每个通道都挺准一起辨识时参数明显偏移甚至出现符号相反的情况。原因是多个输入用了同一条 M 序列的不同移位本来是靠移位序列之间的正交性解耦的但移位间隔 J 小于输出对各输入的过渡过程时间正交性失效。教案给的那条约束就是针对这个(2^n - 1 - 1)·Ts 1.5·Σ(输出对各输入的过渡过程时间)。注意是求和不是取最大——因为通道之间会互相污染污染是累加的。解决办法是加大 n周期变长或减小 Ts在带宽允许的范围内让可用的移位间隔足够大。坑五J 很小模型一上控制器就振。现象是拟合残差在噪声水平但闭环响应出现持续振荡。原因有两层。第一层是只验证了拟合误差没验证用途——如果目的是设计控制器准则里必须体现动态响应和时延的准确性光看残差平方和是不够的。第二层是阶次过估计多出来的极点往往和零点靠得很近看起来相互抵消实际上对消不干净在闭环高增益下就成了振源。解决办法是按用途选准则做交叉验证用另一半数据算 J而不是拟合用的那批再把辨识出的模型画成阶跃响应或者频率响应跟实测比对。教案把模型检验和模型转换分成两步就是为了逼你把参考模型翻译成能看懂的物理形式再判断。还有一条容易被当成坑外之坑拿不同采样率下算出的 J 直接比大小判哪个模型好。修正公式在上面 4.2 已经给过J 要乘 T0² 才能横向比较。6. 设计取舍模型精度到底该优化到什么程度整套材料走完最值得反复咀嚼的不是哪个算法而是一个贯穿始终的取舍参数模型还是非参数模型。非参数模型的门槛极低——给一个 M 序列扰动算一遍互相关脉冲响应就到手了不需要假设阶次、不需要迭代、不会陷入局部极小。代价是它是一串数不是方程没法直接扔进控制器设计工具里也没法做长时段外推。参数模型反过来它把无穷维的响应压缩成几个数能算极点、能算裕度、能写进程序但每一步压缩都在做假设假设错了模型再漂亮也是错的。教案的流程设计其实是在这两者之间搭桥第三步到第六步拿非参数结果第七步选模型类第八步落到参数。顺序不能反。血泪经验是一旦跳过非参数这一步直接估参数你连自己估错了都不知道——因为你没有独立的参照物去对照。而互相关算出来的脉冲响应就是那个参照物延迟多少、有没有反向、有没有二次上升一眼能看出来。第二个取舍是模型精度与用途的匹配。前面那张目的对照表已经把话说透了但工程上真正难的是克制。当你发现把阶次从 3 加到 6J 还能再降一半的时候手是会痒的。可这多出来的三个极点如果对应的是一致性很差的模态模型在训练数据之外的表现会迅速退化。判断标准不是 J而是模型在你的用途上是不是够用做前馈补偿时延准不准比阶次高不高重要得多做故障诊断某个系数的物理含义能不能被单独摘出来比整体拟合精度重要得多。第三个取舍是离线还是递推。教案参考书目里专门列了一本讲递推辨识的专著说明这条线是课程的一部分。离线辨识的好处是可以反复试、可以回头看、可以换准则重做递推辨识的好处是能跟踪时变参数比如换热器表面积灰导致传热系数缓慢漂移这种场景离线模型必然失效。递推的代价是每一步都只有局部信息初值和遗忘因子选不好就会漂或者跟不上而且没有重来一遍的机会。我的建议是先用离线把结构和阶次定死再上递推只估参数别指望递推顺便把结构也定出来。最后一个也是最容易被忽略的现场准备那一步的价值。它不在任何公式里但它决定了后面所有公式有没有输入。从那以后我每次做辨识不管对象多简单都强制走一遍预发信号和干扰摸底宁可多花半天也不愿意在数据采完之后才发现录进来的是噪声。希望这些能帮到你少走一段弯路——这套教案里真正值钱的恰好是那些看着不像算法的部分值得对着源码和流程一节一节地抠下来。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?