加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Matlab做状态空间辨识1

(2013-11-17 16:06:41)
标签:

状态空间

系统辨识

ident

n4sid

ssest

分类: 信号处理
转载自了凡春秋USTC  https://chunqiu.blog.ustc.edu.cn/?p=329
 状态空间辨识是一种很强大的系统辨识方法,matlab的系统辨识工具箱提供了函数实现基于此方法的辨识。这里把matlab帮助简单翻译一下。
状态空间模型
    状态空间模型是一个快速辨识很不错的选择,因为它只需要一个用户输入,即模型阶次n。模型阶次是一个等于状态 \(x(t)\) 维数的整数,它与线性差分方程中输入输出的延迟相关,但不一定相等。
 

 

    连续时间形式的状态空间模型如下

\[\dot x(t) = Fx(t) +Gu(t) + \tilde Kw(t)\]

\[y(t) = Hx(t) + Du(t) +w(t)\]

\[x(0) = x_0\]

    连续时间状态空间模型通常是比较容易定义的,因为它可以由物理微分方程而得来。
    离散时间形式的状态空间模型与线性差分方程的ARX模型一致,但状态空间模型只有1个延迟。离散形式常常表示成如下更新模式innovations form:

 

\[x(kT+T) = Ax(kT) + Bu(kT) + Ke(kT)\]

\[y(kT) = Cx(kT) + Du(kT) + e(kT)\]

\[x(0) = x_0\]

其中 \(T\) 是采样间隔。
    连续时间模型和离散时间状态空间模型矩阵之间的关系在piece-wise-constant输入的定义下如下

\[A = e^{FT} \\ B = \int_0^T{e^{F\tau}Gd\tau \\ C = H}\]

\(K\) 和 \(\tilde K\) 之间的准确关系比较复杂,然而对于比较小的采样间隔 \(T\) ,下面的近似还是可以的

\[K = \int_0^T{e^{F\tau}\tilde Kd\tau}\]

    对线性模型,通常的符号模型描述如下

\[y = Gu + He\]

\(G\) 、 \(H\) 是传递函数。
那么传递函数和离散时间状态空间矩阵之间的关系如下

\[G(q) = C(qI_{nx}-A)^{-1}B+D\]

\[H(q) = C(qI_{nx}-A)^{-1}K+I_{ny}\]

其中, \(I_{nx}\) 和 \(I_{ny}\) 是单位阵, \(ny\) 是 \(y\) 和 \(e\) 的维数。连续时间的状态空间表示类似。
 
支持的状态空间参数化形式
    工具箱支持的状态空间参数化形式,即哪些参数需要辨识哪些是固定的:
自由参数化辨识
    直接辨识各系统矩阵 \(A,B,C,D\) 和 \(K\) 
规范型参数化辨识
    规范型参数化表示矩阵规范化后系统矩阵参数减少, \(A,B,C\) 很多元素为0或1。需要辨识的参数出现在系统矩阵的一些行或列。
结构参数化辨识
    允许用户指定一些参数是固定值,这些参数从待辨识参数中剔除。
完全任意映射参数化辨识
    即灰箱辨识,也就是指定一些变量,这些变量通过函数关系形成系统矩阵,根据输入输出数据直接辨识这些变量。
 
状态空间模型阶次的选择
    要辨识一个状态空间模型,首先要知道它的阶次。当你不知道阶次的时候,你可以通过下面的步骤选择一个阶次。
通过GUI选择阶次:
    如下,Orders中设定1:10,Method选择N4SID,或可以通过点击Order Selection来做如此设置
    点击Estimate打开Model Order Selection窗口,如下,显示了各状态对输入输出行为的贡献大小(协方差矩阵的奇异值取log)
Matlab做状态空间辨识1
    根据上图选择代表下降最快的那个阶次,点击insert插入到辨识的模型中。红色柱条表示推荐的选择,如上图中,状态1和2给出了最重要的贡献,状态2后面的贡献快速下降。
    为提高辨识的准确性,可以使用上面的模型最为后续辨识的初始猜测。
在命令行中选择阶次 :
    上面中利用GUI选择阶次可以在命令行中实现,如下
m = n4sid(data,n1:n2);
上面语句会弹出Model Order Selection窗口。
    除此之外,还可以使用ssest命令打开阶次选择窗口,如下
m = ssest(data, nn)
其中的nn = [n1,n2,...,nN]指定你想尝试的阶次。n4sid使用data数据的采样时间来估计模型,所以估计的是离散模型。而ssest默认估计的连续时间模型。可以通过指定Ts和其值的额外参数对来指定估计离散模型,如
model = ssest(data,nn,'Ts',data.Ts);
    如果想不打开阶次选择窗口自动得到最优阶次,可以使用如下命令
m = n4sid(data,'best')
 
在GUI中辨识状态空间模型
    使用GUI做系统辨识先要做如下准备:
将数据导入GUI;
对数据做一些预处理,如去趋势,这样能提高辨识的精度;
选择阶次,上面已经介绍过了。
    准备工作做好后,选择Estimate>State Space Models打开Polynomial and State Space Models对话框,如下
    各选项的说明如下
Orders:
    指定模型阶次。还可以使用下面的Order Editor...来做更详细配置,如设置选项N4Weight和N4Horizon。
Method:
    选择PEM或N4SID方法。N4SID为子空间方法,可以先用来估计得到一个初始模型;PEM为最小化预测误差迭代方法(得到最大似然估计),对应的函数为ssest,可以对初始估计进行改善。PEM会默认先运行N4SID得到初始估计矩阵再对初始估计矩阵进行迭代优化,所以它运行时间较长。
    N4SID运行比SSEST快,但精度和鲁棒性均不如SSEST,需要指定额外的难于调整的参数。
Domain:
    选择辨识连续时间模型还是离散模型。
Feedthrough:
    指定模型是否有直通分量。通过输入一个与输入个数相同的布尔型向量来配置。如对于一个两输入模型,输入[true false],表示第一个输入直通到系统输出,第二个不直通。这相当于设置状态空间模型的D矩阵。
Form:
    设置辨识的参数化形式。有如下选项
Matlab做状态空间辨识1
对应自由参数化辨识、特征多项式伴随形式参数化辨识、模型分解形式参数化辨识(A是对角矩阵)、可观规范型形式参数化辨识。
Input delay:
    指定输入延迟。通过输入一个与输入个数相同向量来配置。对于连续时间模型,延迟需要以秒为单位。对于离散模型,指定为整数的延迟量,即采样周期的倍数。
Name:
    辨识模型的名字。
Focus:
    选择如何衡量在不同频率处拟合的相对重要性。
Matlab做状态空间辨识1
    Prediction:使用噪声模型H的逆来衡量不同频率范围内拟合的相对重要性。这与最小化一步前向预测相对应,适合于在一段短时间间隔的拟合。适合于输出预测应用
    Simulation:使用输入的频谱来衡量不同频率范围内拟合的相对重要性,而不使用噪声模型来衡量。适合于输出仿真应用
    Stability:估计最稳定的模型。
    Filter:通过弹出Estimation Focus对话框来指定一个用户滤波器,详见Defining a Custom Filter章节做配置。这个预滤波只在估计从输入到输出的动态特性时应用。干扰模型由估计数据决定。
Initial state:
    指定对待初始状态的方法。这个在使用PEM辨识时作为迭代的初始状态使用。如果辨识得到不精确的解,可以尝试指定特定的方法来处理初始状态而不是选择自动。
Matlab做状态空间辨识1
    Auto:基于估计的数据自动选择Zero、Estimate或Backcast。如果初始状态对估计误差的效果微不足道,可以设置为0来最优化方法的效果。
    Zero:设置初始状态为0。
    Estimate:把初始状态作为一个未知的参数向量来对待,从数据中辨识初始状态。
    Backcast:用后向滤波方法(最小二乘拟合)估计初始状态。
Covariancs:
    如果想得到参数的不确定度,选择Estimate;否则选择None。不确定度会显示在模型置信区间的图中。对于复杂模型或大数据集问题,选择None可以减少计算时间。
Matlab做状态空间辨识1
Display progress:
    对于选用PEM方法辨识时,勾选上复选框会弹出一个进程窗口显示估计的过程。

 



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有