matlab状态空间模型,Matlab做状态空间辨识2

转载自了凡春秋USTChttps://chunqiu.blog.ustc.edu.cn/?p=334

命令行辨识状态空间模型

准备工作:

构造iddata对象(输入输出数据对象)或frd、idfrd对象(频率响应数据对象);

数据预处理,如对时域数据做去趋势;

选择阶次。

状态空间辨识有两种方式,决定于你对系统了解的先验知识。

黑箱辨识:

指定模型阶次,选择性的对一些模型矩阵结构属性进行配置。这种辨识方式,你可以使用ssest或n4sid函数以数据和模型阶次作为主要函数参数来辨识。额外的属性要以名字-值对的形式来指定,如指定模型模型采样时间、直通分量存在性、噪声成分是否存在等。你不能直接配置各系统矩阵的元素。

结构化辨识:

你需要首先创建一个包含系统矩阵初始值的idss模型结构,在此结构中,使用Structure属性来指定参数约束。如指定系统矩阵某个元素固定或设定其范围。详细参数化配置可以参考ssform函数说明。

在配置好约束后,就可以此idss模型作为ssest的输入进行辨识了。注意n4sid不能结构化辨识。

另外注意,这里的结构化辨识其实就是灰箱辨识,属于一种简单的一种,复杂的灰箱辨识可以使用idgrey和idnlgrey模型实现;结构化辨识中不能指定系统矩阵中各元素之间的关系,即各元素之间是独立的,对于元素之间有依赖性的结构化辨识属于复杂灰箱辨识,可尝试使用grayest估计器。

命令行辨识的实现:

使用ssest辨识

m = ssest(data,n,opt,Name,Value)

其中,data为估计的数据,n为系统阶次,opt包含了状态空间估计的配置参数,包括初始条件、输入偏移、估计中心、搜索方法等,其详细配置见ssest函数。

使用n4sid辨识

m = n4sid(data,n,opt,Name,Value)

除非指定采样时间,ssest默认辨识连续时间模型;而n4sid辨识离散模型。

连续模型与离散模型的选择:

默认情况下,ssest估计连续时间模型。如果使用非零采样周期的数据,可以使用如下命令估计离散模型

model = ssest(data,nx,'Ts',data.Ts);

如果使用的是连续时间频域数据,则不能辨识离散模型。

默认地,n4sid以数据的采样周期辨识离散时间模型,如果想辨识连续时间模型,可以用如下命令

model = n4sid(data,nx,'Ts',0);

对于状态空间辨识,你可以指定是否辨识 \(D\) 、 \(K\) 、 \(X0\) 矩阵,分别表示输入-输出直通分量、噪声模型和初始状态。

\(D\) :

默认情况下, \(D\) 矩阵是不辨识的,除静态模型外其值固定为0。

黑箱辨识中,使用Feedthrough名和值对输入参数来设置直通分量的存在与否。如两输入模型中,第二输入直通,则使用如下命令设置

model = n4sid(data,n,'Feedthrough',[false true]);.

结构辨识中,通过配置init_sys.Structure.d来设置,其中init_sys是一个代表理想模型结构的idss结构。如强制第 \(i\) 个输入为直通,则

init_sys.Structure.d.Value(:,i) = 0;

init_sys.Structure.d.Free = true;

init_sys.Structure.d.Free(:,i) = false;

第一行指定矩阵 \(D\) 的第 \(i\) 列的值为0;第二行指定 \(D

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值