使用matlab卡尔曼进行非线性系统估计
Using matlab kalman for nonlinear system estimation
我有一个由一阶非线性差分方程组描述的非线性系统:
x(k) = f(x(k-1)) + u(k-1)
y(k) = h(x(k)) + v(k)
其中 u(k-1)
和 v(k)
是独立的零均值高斯噪声过程,协方差分别为 Q
和 R
。
我想使用 matlab 中的 kalman
函数来估计给定 y
的 x
。但是matlab控制系统工具箱中的界面是:
[K,L,P]= kalman(sys, Q, R, N)
其中 sys
是状态-space 模型。我的问题是:如何在 matlab 中为我的一阶非线性差分方程组定义 sys
?
正如其他人所提到的,kalman
函数仅适用于线性系统。然而,对于高度非线性系统,扩展卡尔曼滤波器 (EKF) 可能是一个糟糕的估计器。在这些情况下,unscented 卡尔曼滤波器 (UKF) 可能更好。所以,你可能想尝试两者。
(EKF 或 UKF)的 Matlab 代码可以在 EKF/UKF Toolbox for Matlab here. Another UKF implementation that is suited for your additive noise model can be found at Matlab Central.
中找到
希望对您有所帮助。
我有一个由一阶非线性差分方程组描述的非线性系统:
x(k) = f(x(k-1)) + u(k-1)
y(k) = h(x(k)) + v(k)
其中 u(k-1)
和 v(k)
是独立的零均值高斯噪声过程,协方差分别为 Q
和 R
。
我想使用 matlab 中的 kalman
函数来估计给定 y
的 x
。但是matlab控制系统工具箱中的界面是:
[K,L,P]= kalman(sys, Q, R, N)
其中 sys
是状态-space 模型。我的问题是:如何在 matlab 中为我的一阶非线性差分方程组定义 sys
?
正如其他人所提到的,kalman
函数仅适用于线性系统。然而,对于高度非线性系统,扩展卡尔曼滤波器 (EKF) 可能是一个糟糕的估计器。在这些情况下,unscented 卡尔曼滤波器 (UKF) 可能更好。所以,你可能想尝试两者。
(EKF 或 UKF)的 Matlab 代码可以在 EKF/UKF Toolbox for Matlab here. Another UKF implementation that is suited for your additive noise model can be found at Matlab Central.
中找到希望对您有所帮助。