具有未知状态转移矩阵的卡尔曼滤波

信息处理 卡尔曼滤波器 自适应滤波器 协方差
2022-02-21 01:50:37

我目前正在研究使用卡尔曼滤波器来估计线性系统。我目前的状态转换矩阵(STM)是身份,因为到目前为止我一直在处理非时变系统。然而,我的下一步是扩展到时变系统,在这种情况下,没有关于系统如何变化的信息,因此 STM 是未知的。到目前为止,在我的测试中,错误的 STM 会导致卡尔曼滤波器估计出现大量错误。所以我的问题是,是否有一种方法可以避免这种情况,无论是通过动态更新 STM 还是某种更新过程噪声协方差矩阵的方式来解决这个问题?

2个回答

在 MATLAB 的贝叶斯网络工具箱 (BNT) 中,卡尔曼滤波器下有一个示例,其中 EM 算法用于估计状态转移矩阵(以及其余部分)。这是一个 2 遍批处理算法。

http://bayesnet.github.io/bnt/docs/usage_dbn.html#learn

唯一的问题是 BNT 是为 Matlab V5 编写的,GitHub 版本(参见GitHub Repository - BayesNet BNT)有一些更新,但在 2017a 下,有一些问题,但我发现它很有用。

另一个限制是它适用于严格的卡尔曼滤波器,而不是 EKF、UKF 或粒子滤波器。

不幸的是,在经典卡尔曼滤波器应用程序中,您需要猜测控制状态的状态转换模型。用于时变系统的此类模型的经典选择是随机游走模型,或其泛化,一阶马尔可夫模型。如果不知道可以假设哪种状态模型,您可以尝试从状态时间序列中提取趋势分量(例如,通过 EMD 或移动平均滤波器),并绘制它以了解例如,您的状态的一阶矩随时间变化。如果它作为幂律衰减n(IEE[x(n)]αn) 直到最终值,这可能表明极点等于的一阶马尔可夫模型α可以作为状态转换模型。

否则,您可以将状态的转换模型视为黑匣子,并考虑诸如无味卡尔曼滤波器之类的技术。