使用matlab卡尔曼进行非线性系统估计
Posted
技术标签:
【中文标题】使用matlab卡尔曼进行非线性系统估计【英文标题】:Using matlab kalman for nonlinear system estimation 【发布时间】:2016-08-16 20:01:22 【问题描述】:我有一个由一组一阶非线性差分方程描述的非线性系统:
x(k) = f(x(k-1)) + u(k-1)
y(k) = h(x(k)) + v(k)
其中u(k-1)
和v(k)
是独立的零均值高斯噪声过程,协方差分别为Q
和R
。
我想在给定y
的情况下使用matlab 中的kalman
函数来估计x
。但是matlab控制系统工具箱中的界面是:
[K,L,P]= kalman(sys, Q, R, N)
其中sys
是状态空间模型。我的问题是:如何在 matlab 中为我的一阶非线性差分方程系统定义 sys
?
【问题讨论】:
卡尔曼滤波器只能用于线性系统,因为该理论不适用于非线性系统。如果您的非线性系统在平衡点附近运行,您可以在该点线性化系统,然后使用卡尔曼滤波器进行估计。你可能想看看en.wikipedia.org/wiki/Extended_Kalman_filter 我同意。您需要使用扩展卡尔曼滤波器,其中f
和h
将围绕先前估计的状态进行线性化。
【参考方案1】:
正如其他人所提到的,kalman
函数仅适用于线性系统。然而,对于高度非线性系统,扩展卡尔曼滤波器 (EKF) 可能是一个较差的估计器。在这些情况下,unscented 卡尔曼滤波器 (UKF) 可能会更好。因此,您可能想同时尝试两者。
可以在EKF/UKF Toolbox for Matlab here 中找到任一(EKF 或 UKF)的 Matlab 代码。另一个适合您的加性噪声模型的 UKF 实现可以在 at Matlab Central 找到。
希望这会有所帮助。
【讨论】:
以上是关于使用matlab卡尔曼进行非线性系统估计的主要内容,如果未能解决你的问题,请参考以下文章
matlab代码复现:目标跟踪多传感器融合非线性滤波等探讨及技术支持