我目前正在研究使用卡尔曼滤波器来估计线性系统。我目前的状态转换矩阵(STM)是身份,因为到目前为止我一直在处理非时变系统。然而,我的下一步是扩展到时变系统,在这种情况下,没有关于系统如何变化的信息,因此 STM 是未知的。到目前为止,在我的测试中,错误的 STM 会导致卡尔曼滤波器估计出现大量错误。所以我的问题是,是否有一种方法可以避免这种情况,无论是通过动态更新 STM 还是某种更新过程噪声协方差矩阵的方式来解决这个问题?
具有未知状态转移矩阵的卡尔曼滤波
信息处理
卡尔曼滤波器
自适应滤波器
协方差
2022-02-21 01:50:37
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 或移动平均滤波器),并绘制它以了解例如,您的状态的一阶矩随时间变化。如果它作为幂律衰减(IE) 直到最终值,这可能表明极点等于的一阶马尔可夫模型可以作为状态转换模型。
否则,您可以将状态的转换模型视为黑匣子,并考虑诸如无味卡尔曼滤波器之类的技术。
其它你可能感兴趣的问题