Python学习-卡尔曼滤波

        依旧是Python课程 _(:з」∠)_  期末需要完成小组作业,选题内容主要是用卡尔曼滤波来实现交通参数的预测。已有数据包括:历时7天的上下匝道线圈数据,匝道口上下游的数据。数据采集点及数据结构如下图所示。

数据结构
数据采集点

        预想通过上游NX39、匝道入口ZP=NI=01/02的历史和当前数据,以及NX40的历史时间序列数据,来预测下一时刻NX40处的交通参数:流量、密度、占有率。


卡尔曼滤波器算法(The Kalman Filter Algorithm)

        卡尔曼滤波的原版论文:《A New Approach to Linear Filtering andPrediction Problems》(线性滤波与预测问题的新方法)http://www.cs.unc.edu/~welch/kalman/media/pdf/Kalman1960.pdf

离散控制系统

X(k)=A X(k-1)+B U(k)+W(k)

X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。W(k)表示过程的噪声,假设成高斯白噪声(White Gaussian Noise),covariance 是Q(这里我们假设不随系统状态变化而变化)。

Z(k)=H X(k)+V(k)

Z(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。V(k)表示测量的噪声,被假设成高斯白噪声(White Gaussian Noise),covariance是R(这里我们假设不随系统状态变化而变化)。

因此,对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。

公式概述

(1)X(k|k-1)=A X(k-1|k-1)+B U(k)

X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。

(2)P(k|k-1)=A P(k-1|k-1) A’+Q

P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的covariance,A’表示A的转置矩阵,Q是系统过程的covariance。

上述两个公式是对系统的预测。


(3)Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R)

Kg为卡尔曼增益(Kalman Gain)

(4)X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) 

结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k)。

更新k状态下X(k|k)的covariance:

(5)P(k|k)=(I-Kg(k) H)P(k|k-1)

其中I为1的矩阵,对于单模型单测量,I=1。当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。


建立模型

根据项目背景,研究范围是上下匝道口之间的路段,我们知道交通流参数满足一定的函数关系:例速度和流量满足二次曲线关系。因此这个路段的V、S、O的当前值跟前一时刻的V、S、O不同,所以要设置系统参数A。这里的系统参数由回归模型的系数决定。

KFT 代码:https://github.com/xUhEngwAng/trafficPredict/tree/trafficPredict

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容