依旧是Python课程 _(:з」∠)_ 期末需要完成小组作业,选题内容主要是用卡尔曼滤波来实现交通参数的预测。已有数据包括:历时7天的上下匝道线圈数据,匝道口上下游的数据。数据采集点及数据结构如下图所示。
![](https://img.haomeiwen.com/i10769852/de854b6e2dad1d0a.png)
![](https://img.haomeiwen.com/i10769852/510850e475677d81.png)
预想通过上游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
网友评论