系统辨识 system identification(进阶篇)

本文详细介绍了基于有限数据窗的系统辨识方法,包括固定记忆的RLS、引入遗忘因子的FDW-FF-RLS以及加权迭代最小二乘WRLS算法。此外,还探讨了扩展/广义最小二乘辨识以及基于辅助模型的辨识技术,如ARMAX和ARARX模型的辨识。这些算法在处理有限数据和复杂系统模型时展现出高效性和灵活性。

目录

目录

目录

引言

基于有限数据窗的系统辨识

固定记忆的 RLS

固定记忆的 RLS2*

有限数据窗引入遗忘因子 FDW-FF-RLS

加权迭代最小二乘 WRLS

引入

推导

结果 WRLS

迭代扩展/广义最小二乘辨识

引入

扩展 RLS

广义RLS

基于辅助模型的系统辨识

原理

辅助模型的精妙之处

Box-Jenkkins 模型辨识

辨识方法的分析与套用


引言

根据基础篇,我们已经得知,对于一个辨识模型,我们可以得到其对应的最小二乘辨识估计值

\begin{align*} identification\ model:\ y(t)&=\varphi^T(t)\theta+v(t)\\ identification\ LSE:\ \hat{\theta}(t)&=\hat{\theta}(t-1)+L(t)[y(t)-\varphi^T(t)\hat{\theta}(t-1)]\\ gain:\ L(t)&=\frac{P(t-1)\varphi(t)}{1+\varphi^T(t)P(t-1)\varphi(t)}\\ covariance\ matrix:\ P(t)&=[I-L(t)\varphi^T(t)]P(t-1) \tag{1.1}\end{}

基于有限数据窗的系统辨识

固定记忆的 RLS

为了减少数据存储空间,提高运算效率,可以限制每次计算所用数据的数量,当新数据加入时,丢弃掉最前面的数据,保证参与计算的数据量恒定,以此保证每次计算都能有效的更新估计值。

上述方法中参与计算的恒定数据量有一个专门的名字,称为 有限数据窗(finite data window)

根据上述原理,接下来进行算法推演,设数据长度为 p,则

\begin{align*} H(p,t)&=\left[\begin{array}{ccc}\varphi^T(t-p+1)\\...\\\varphi^T(t) \end{} \right ],\ Y(p,t)=\left[\begin{array}{ccc}y(t-p+1)\\...\\y(t) \end{} \right ],\\ J(\theta)&=\sum_{i=t-p+1}^{t}{(y(i)-\varphi^T(i)\theta)^2}\\ &=(Y(p,t)-H(p,t)\theta)^T(Y(p,t)-H(p,t)\theta) \end{}

LSE 协方差矩阵 P 的递推关系也会发生改变

\begin{align*} \because P^{-1}(t-1)&=H^T(p,t-1)H(p,t-1)\\ &=\left[\begin{array}{ccc}\varphi^T(t-p)\\...\\\varphi^T(t-1) \end{} \right ]^T_{p \times n}\left[\begin{array}{ccc}\varphi^T(t-p)\\...\\\varphi^T(t-1) \end{} \right ]_{p \times n}\\ \therefore P^{-1}(t)&=H^T(p,t)H(p,t)\\ &=\left[\begin{array}{ccc}\varphi^T(t-p+1)\\...\\\varphi^T(t) \end{} \right ]^T_{p \times n}\left[\begin{array}{ccc}\varphi^T(t-p+1)\\...\\\varphi^T(t) \end{} \right ]_{p \times n}\\ &=P^{-1}(t-1)+\varphi^T(t)\varphi(t)-\varphi^T(t-p)\varphi(t-p)\\ \end{}

同样的,为了避免矩阵逆运算,此处也需要去逆操作,推理如下(此部分推理较为麻烦,可跳过看结论即可)

\begin{align*} P^{-1}(t)&=P^{-1}(t-1)+\varphi^T(t)\varphi(t)-\varphi^T(t-p)\varphi(t-p)\\ denote\ Q^{-1}(t)&=P^{-1}(t-1)+\varphi^T(t)\varphi(t)\\ then\ Q(t)&=P(t-1)+\frac{P(t-1)\varphi(t)\varphi^T(t)P(t-1)}{1+\varphi^T(t)P(t-1)\varphi(t)}\\ P(t)&=Q(t)+\frac{Q(t)\varphi(t-p)\varphi^T(t-p)Q(t)}{1+\varphi^T(t-p)Q(t)\varphi(t-p)}\\ \end{}

接下来顺水推舟,用得到的递推关系,求取 RLSE 如下

\begin{align*} \because P(t)P^{-1}(t-1)&=I-P(t)\varphi^T(t)\varphi(t)+P(t)\varphi^T(t-p)\varphi(t-p)\\ and\ H^T(p,t-1)Y(p,t-1)&=H^T(p,t)Y(p,t)-\varphi(t)y(t)+\varphi(t-p)y(t-p)\\ \therefore \hat{\theta}(t)&=P(t)\left[\begin{array}{ccc} H(p-1,t)\\\varphi^T(t) \end{} \right ]^T \left[\begin{array}{cc}Y(p-1,t)\\y(t) \end{} \right ]\\ &=P(t)[H(p-1,t)^TY(p-1,t)+\varphi(t)y(t))\\ &=[I-P(t)\varphi^T(t)\varphi(t)+P(t)\varphi^T(t-p)\varphi(t-p)]\hat{\theta}(t-1)+P(t)\varphi(t)y(t)\\ &=\hat{\theta}(t-1)+P(t)[\varphi(t)\ -\varphi(t-p)]\left[\begin{array}{cc}y(t)-\varphi^T(t)\hat{\theta}(t-1)\\y(t-p)-\varphi^T(t-p)\hat{\theta}(t-1) \end{} \right ] \end{}

此处注意,由于有限数据窗的定义,此处系数 P、H、Y 的递推不再是简单的添加一项,而是加一项的同时还需要去掉最前面一项,因此需要改变两个对应元素。

综上所述,这种方法称为 固定记忆的迭代最小二乘算法(fixed memery RLS):

\begin{align*} \hat{\theta}(t)&=\hat{\theta}(t-1)+P(t)[\varphi(t)\ -\varphi(t-p)]\left[\begin{array}{cc}y(t)-\varphi^T(t)\hat{\theta}(t-1)\\y(t-p)-\varphi^T(t-p)\hat{\theta}(t-1) \end{} \right ] \\ Q(t)&=P(t-1)-\frac{P(t-1)\varphi(t)\varphi^T(t)P(t-1)}{1+\varphi^T(t)P(t-1)\varphi(t)}\\ P(t)&=Q(t)+\frac{Q(t)\varphi(t-p)\varphi^T(t-p)Q(t)}{1-\varphi^T(t-p)Q(t)\varphi(t-p)} \end{}

固定记忆的 RLS2

在上述的 FDW-RLS 中,有很多变量有重复的部分,但是各自存在特殊的项,因此,我们可以对辨识过程增加一个过渡环节,分两步进行辨识

\begin{align*} let\ P_\alpha(t-1)&=[H^T(p-1,t-1)H(p-1,t-1)]^{-1}\\ then:\quad\qquad&\\ P^{-1}(t)&=P^{-1}_\alpha(t-1)+\varphi(t)\varphi^T(t)\\ P^{-1}(t-1)&=P^{-1}_\alpha(t-1)+\varphi(t-p)\varphi^T(t-p) \end{}

利用设置的中间变量,计算“中间估计值”(intermediate

<think>我们正在回答用户关于SystemIdentificationToolbox的详细使用教程和功能介绍的问题。根据引用内容,我们可以总结如下:引用[1]提到该工具箱用于系统识别,包括基本概念、使用方法以及PID参数调整技巧。引用[2]详细展示了如何使用工具箱辨识传递函数,包括导入数据、设置传递函数模型、查看结果和导出曲线数据。引用[3]介绍了工具箱的功能:提供MATLAB函数、Simulink模块和应用程序,用于构建动态系统的数学模型,支持多种模型类型(传递函数、过程模型、状态空间模型)和数据类型(时域、频域)。引用[4]补充了数据导入的注意事项。因此,我们的回答应该包括以下内容:1.工具箱简介2.主要功能3.基本使用步骤(参考引用[2]的步骤)4.示例代码(包括数据导入、模型辨识、结果验证等)同时,我们需要按照用户要求:-所有行内数学表达式用$...$,例如传递函数$G(s)$-独立公式用$$...$$-使用中文-生成相关问题-引用的段落末尾添加引用标识另外,注意引用内容中提到的具体操作步骤,尤其是数据导入和模型估计部分。由于引用[2]提供了详细的步骤,我们将以此为基础构建使用教程,并补充示例代码。注意:用户要求生成相关问题,我们在最后添加“相关问题”部分。下面开始组织回答:</think>### MATLAB System Identification Toolbox 使用教程 System Identification Toolbox 是 MATLAB 用于动态系统建模的核心工具箱,支持通过实验数据(输入/输出信号)建立传递函数、状态空间模型等。以下是详细功能介绍和使用指南: --- #### **核心功能** 1. **模型辨识** - 支持传递函数 $G(s)=\frac{Y(s)}{U(s)}$、状态空间模型 $\dot{x}=Ax+Bu$、ARMAX 模型等 - 支持时域/频域数据,连续/离散系统辨识[^3] 2. **数据处理** - 数据预处理(滤波、重采样、异常值剔除) - 模型验证(残差分析、拟合度计算) 3. **PID 整定** - 基于辨识模型自动优化 PID 参数[^1] 4. **Simulink 集成** - 导出模型直接用于 Simulink 仿真 --- #### **使用步骤与示例代码** ##### **1. 导入实验数据** ```matlab % 创建模拟数据:输入u为阶跃信号,输出y为带噪声的一阶系统响应 t = (0:0.1:10)'; u = ones(size(t)); % 阶跃输入 sys_true = tf(5, [1, 1]); % 真实系统:G(s)=5/(s+1) y = lsim(sys_true, u, t) + 0.1*randn(size(t)); % 添加噪声 % 导入工具箱 data = iddata(y, u, 0.1); % 采样时间0.1秒 ``` ##### **2. 辨识传递函数** ```matlab % 估计一阶传递函数(1极点,0零点) opt = tfestOptions('Display','on'); model_tf = tfest(data, 1, 0, opt); % 模型阶次: npoles=1, nzeros=0 % 显示结果 disp("辨识的传递函数:"); display(model_tf) ``` > 输出示例: > $$ G(s) = \frac{5.01}{s + 1.002} $$ > 拟合度 > 90% 表示模型可靠[^2] ##### **3. 验证模型** ```matlab % 绘制对比曲线 compare(data, model_tf); title('模型验证: 实测 vs 辨识'); % 残差分析(检验独立性) resid(data, model_tf); ``` ![模型验证曲线示例](https://www.mathworks.com/help/examples/ident/win64/CompareMeasuredAndSimulatedOutputExample_01.png) *图:实测输出与模型仿真对比[^3]* ##### **4. 导出模型数据** ```matlab % 提取辨识曲线数据 [Y_sim, T_sim] = sim(model_tf, u, t); plot(T_sim, Y_sim, 'r', 'LineWidth', 2); % 导出传递函数参数 [num, den] = tfdata(model_tf); disp("分子系数:"); disp(num{1}); disp("分母系数:"); disp(den{1}); ``` --- #### **典型应用场景** 1. **控制系统设计** - 基于辨识模型设计 PID 控制器[^1] 2. **故障诊断** - 比较正常/异常状态下的系统模型差异 3. **预测建模** - 如电池 SOC 估计、机械磨损预测 4. **物理参数识别** - 从振动数据中辨识质量-弹簧-阻尼系统参数 $m\ddot{x}+c\dot{x}+kx=F(t)$ --- #### **进阶技巧** - **模型结构选择** 使用 `struc` 和 `selstruc` 命令自动选择最优模型阶次: ```matlab NN = struc(1:3, 1:3, 0:2); % 测试不同阶次组合 V = arxstruc(data, data, NN); order = selstruc(V, 'AIC'); % AIC准则选择最优结构 ``` - **在线辨识** 使用 `recursiveARX` 对象实现实时参数更新: ```matlab obj = recursiveARX([2 2 1]); % ARX模型 for k = 1:length(data) [A, B, EstimatedOutput] = step(obj, y(k), u(k)); end ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值