Matlab:帮助运行卡尔曼滤波器工具箱

标签 matlab kalman-filter

我有 AR(1) 模型,其数据样本 $N=500$ 由随机输入序列 x 驱动。观测值 y 被零均值的测量噪声 $v$ 破坏。型号为

y(t) = 0.195y(t-1) + x(t) + v(t) 其中 x(t) 生成为 randn()。我不确定如何将其表示为状态空间模型以及如何估计参数 $a$ 和状态。我尝试过状态空间表示为

d(t) = \mathbf{a^T} d(t) + x(t)

y(t) = \mathbf{h^T}d(t) + sigma*v(t)

西格玛=2。 我无法理解如何执行参数和状态估计。使用下面提到的工具箱,我检查了 KF 方程与教科书中的方程是否匹配。然而,参数估计的方法是不同的。我将不胜感激关于实现程序的建议。

实现1: 我正在关注这里的实现:Learning Kalman Filter 。该实现不使用期望最大化来估计 AR 模型的参数,而是找出过程噪声的协方差。就我而言,我没有过程噪声,但有输入 $x$。

实现2:Kalman Filter by Kevin Murphy是另一个使用 EM 进行 AR 模型参数估计的工具箱。现在,这很令人困惑,因为两种实现都使用不同的方法进行参数估计。 我很难找出正确的方法、状态空间模型表示和代码。非常感谢有关如何进行的建议。

我运行了 KalmanARSquareRoot 技术的第一个实现,结果完全不同。正在执行指数移动平均平滑并使用长度为 30 的 MA 滤波器。如果我运行演示示例,工具箱运行良好。但改变模型后,结果却很差。也许我做错了什么。我是否需要更改时间序列的 KF 方程?

在第二个实现中,我无法弄清楚要更改什么以及在哪里更改方程式。

一般来说,如果我必须使用这些工具,那么我是否需要更改每个时间序列模型的 KF 方程?如果这些工具箱不适合所有时间序列模型 - AR、MA、ARMA,我该如何自己编写方程?

最佳答案

我对卡尔曼滤波器只有一点经验,所以对此持保留态度。

看来你根本不需要改变方程。使用第二个包 (learn_kalman),您可以创建大小为 [length(d(t)) length(d(t))] 的 A0 矩阵。 C0 是相同的,在您的情况下,初始状态可能有意义作为单位矩阵(与您的 A0 不同。您需要做的就是选择一个好的初始条件。

但是,我查看了您的系统(绘制了一个示例),似乎噪音在您的系统中占主导地位。 KF 是一个最优估计器,但我不知道它能拒绝那么多噪声。它只能保证减少协方差......这意味着如果您的系统主要由噪声主导,您将计算出一个糟糕的模型,该模型在给定噪声的情况下估计您的系统!

尝试绘制 [d f],其中 d 是初始数据,f 使用回归公式计算 f(t) = C * A * f(t-1) :

f(t) = A * f(t-1) ; y(t) = C * f(t)

也就是说,假装没有噪音,但使用估计的 AR 模型。您将看到它拒绝了所有噪音,并且在“技术上”对系统进行了很好的建模(因为唯一独特的行为是在最开始的时候)。

例如,如果您的系统 A = 0.195,Q=R=0.l,那么您将收敛到 A = 0.2207,但它仍然不够好。这里的问题是你的初始状态是如此之低,以至于在数据的几个步骤内,你基本上处于 0 考虑噪声。自然地,KF 可以收敛到很多相似的模型解决方案。任何噪音都会破坏即使是最好的初始条件。

如果您以某种方式提高数据的分辨率(例如更大的初始条件、更精细的时间步长),您将看到一个很好的拟合。例如,将初始条件更改为 110,您会发现两条曲线相似,但模型仍然相当不同。

我不知道有什么方法可以很好地对数据进行建模。如果噪声方差实际上为 1 并且您的系统很快收敛到 0,那么似乎注定无法有效建模,因为您没有捕获数据集中的任何独特行为。

关于Matlab:帮助运行卡尔曼滤波器工具箱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28773252/

相关文章:

MATLAB 轴具有恒定值

c - 通过 USB 使用 FPGA 访问 PC 的 PCI 卡

android - 获得最准确的位置/位置? (GPS/卡尔曼/安卓)

c++ - 带加速度的卡尔曼滤波器

matlab - 是否有内置测试字符串(或句柄)是否引用脚本?

matlab - 获取圆边界

带有 plot3 和 scatter3 模糊的 matlab 图?

matlab - 间接(误差状态)卡尔曼滤波器的结构是什么?误差方程是如何导出的?

algorithm - 如何利用 GPS 数据流预测预计到达时间 (ETA)?

c++ - 使用 OpenCV 跟踪目标的多相机标定