15 线性动态系统——kalman filter

在这里插入图片描述
我们知道在概率图模型中,加入了time 的因素,就得到了Dynamic Model,实际上也就说我们通常所说的State Space Model。

  • 如果状态是离散的,就是我们上一节提到了Hidden Markov Model (HMM);
  • 如果状态是连续的,如果状态之间的关系是线性的,就是Linear Dynamic System (Kalman Filter),或者说是Linear Gaussian Model;
  • 如果状态之间的关系是Non-Linear 的或者Non-Gaussian 的,那么也就是Particle Filter。

1 背景

1.1 Dynamic Model Introduction

第一类问题,Learning 问题,即为在已知观测序列 O O O 的情况下求解 P ( π ∣ O ) P(\pi|O) P(πO)。其中,模型可以描
述为 π ( λ , A , B ) \pi(\lambda,A,B) π(λ,A,B)。代表性的就是Hidden Markov Model。
第二类问题就是Inference 问题,大致可以分为Decoding,Probability of Evidence,Filtering,Smoothing 和Prediction 五类问题。

1.2 Kalman Filtering: Linear Gaussian Model

Filtering 问题就是求 P ( z t ∣ x 1 , x 2 , ⋯   , x t ) , P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right), P(ztx1,x2,,xt), 实际上就是一个 Marginal Posterior 问题。对于 Linear 关系,Linear 主要反映在相邻时刻的两个状态之间的转移关系,当前时刻的隐变量状态和观测状态之 间的夫系。描述如片所示:
z t = A ⋅ z t − 1 + B + ϵ x t = C ⋅ z t + D + δ \begin{array}{l} z_{t}=A \cdot z_{t-1}+B+\epsilon \\ x_{t}=C \cdot z_{t}+D+\delta \end{array} zt=Azt1+B+ϵxt=Czt+D+δ
z t , z t − 1 z_{t}, z_{t-1} zt,zt1 x t , z t x_{t}, z_{t} xt,zt 之间体现了线性的关系。而 ϵ , δ \epsilon, \delta ϵ,δ 是符合 Gaussian Distribution 的 , ϵ ∼ N ( 0 , Q ) , δ ∼ , \epsilon \sim \mathcal{N}(0, Q), \delta \sim ,ϵN(0,Q),δ N ( 0 , R ) \mathcal{N}(0, R) N(0,R) 。所ル,大家都明白了 Linear 和 Gaussian 都是从何而米的,所ル Kalman Filtering 被称为Linear Gaussian Model 更合适。

Filtering 是一类问题的总称,我们之前在 Hidden Markov Model 中有详细的讨论过。那素,我们回顾一下 Hidden Markov Model 的基本信息做一个对比。
H M M : λ = { π , A , B } \mathrm{HMM}: \lambda=\{\pi, \mathcal{A}, \mathcal{B}\} HMM:λ={π,A,B}
状态转移矩阵:
A = [ a i j ] a i j = P ( i t + 1 = q j ∣ i t = q i ) B = [ b j ( k ) ] b j k = P ( o t = v t ∣ i t = q j ) \begin{array}{l} A=\left[a_{i j}\right] \quad a_{i j}=P\left(i_{t+1}=q_{j} | i_{t}=q_{i}\right) \\ B=\left[b_{j}(k)\right] \quad b_{j} k=P\left(o_{t}=v_{t} | i_{t}=q_{j}\right) \end{array} A=[aij]aij=P(it+1=qjit=qi)B=[bj(k)]bjk=P(ot=vtit=qj)
那么,对于 Kalman Filtering 来说,状态转移矩阵,发射概率,初始矩阵,模型参数我们可以做 出类似的表达:
P ( z t ∣ z t − 1 ) ∼ N ( A ⋅ z t − 1 + B , Q ) P ( x t ∣ z t ) ∼ N ( C ⋅ z t + D , R ) z 1 ∼ N ( μ 1 , Σ 1 ) θ = { A , B , C , D , Q , R , μ 1 , Σ 1 } \begin{array}{l} P\left(z_{t} | z_{t-1}\right) \sim \mathcal{N}\left(A \cdot z_{t-1}+B, Q\right) \\ P\left(x_{t} | z_{t}\right) \sim \mathcal{N}\left(C \cdot z_{t}+D, R\right) \\ z_{1} \sim \mathcal{N}\left(\mu_{1}, \Sigma_{1}\right) \\ \theta=\left\{A, B, C, D, Q, R, \mu_{1}, \Sigma_{1}\right\} \end{array} P(ztzt1)N(Azt1+B,Q)P(xtzt)N(Czt+D,R)z1N(μ1,Σ1)θ={A,B,C,D,Q,R,μ1,Σ1}
在这一小节中,我们已经了解了基础的相关概念,那下一小节中,我们将描述了 Filtering 问题的建模和求解。

2 建模和求解

Filtering 问题公式话的表达即为求 P ( z t ∣ x 1 , x 2 , ⋯   , x t ) , P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right), P(ztx1,x2,,xt), 是一种 On-Line Learning 的思路,随着越 来越多的数据不断的被观测到,隐藏状态得到不断的更新。也就是在观察变量序列 { x 1 , x 2 , ⋯   , x t } \left\{x_{1}, x_{2}, \cdots, x_{t}\right\} {x1,x2,,xt} 下,求得隐变量状态 z t z_{t} zt 的分布。模型表达为如下所示:
在这里插入图片描述
图 1: 模型基本拓扑结构
首先我们回顾一下前向算法的求解思路。在这个算法中首先定义了中间变量为:
α t ( i ) = P ( x 1 , x 2 , ⋯   , x t , z t = q i ) \alpha_{t}(i)=P\left(x_{1}, x_{2}, \cdots, x_{t}, z_{t}=q_{i}\right) αt(i)=P(x1,x2,,xt,zt=qi)
而我们下一步则是要寻找 α t + 1 ( i ) \alpha_{t+1}(i) αt+1(i) α t ( i ) \alpha_{t}(i) αt(i) 之间的关系。所以,可以按 α 1 ( i ) , α 2 ( i ) , ⋯   , α t ( i ) \alpha_{1}(i), \alpha_{2}(i), \cdots, \alpha_{t}(i) α1(i),α2(i),,αt(i) 的顺序依次推断得到 α t ( i ) , \alpha_{t}(i), αt(i), 从而得到根据当前的模型推断出观测序列的分布 P ( O ∣ λ ) P(O | \lambda) P(Oλ)

2.1 Filtering 问题思路

我们还是采用的前向算法的思路:
P ( z t ∣ x 1 , x 2 , ⋯   , x t ) = P ( z t , x 1 , x 2 , ⋯   , x t ) P ( x 1 , x 2 , ⋯   , x t ) ∝ P ( z t , x 1 , x 2 , ⋯   , x t ) = P ( x t ∣ x 1 , x 2 , ⋯   , x t − 1 , z t ) ⏟ P ( x t ∣ z t ) P ( x 1 , x 2 , ⋯   , x t − 1 , z t ) = P ( x t ∣ z t ) P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) ⏟ prediction P ( x 1 , x 2 , ⋯   , x t − 1 ) ⏟ const ∝ P ( x t ∣ z t ) P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) \begin{aligned} P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right) &=\frac{P\left(z_{t}, x_{1}, x_{2}, \cdots, x_{t}\right)}{P\left(x_{1}, x_{2}, \cdots, x_{t}\right)} \\ & \propto P\left(z_{t}, x_{1}, x_{2}, \cdots, x_{t}\right) \\ &=\underbrace{P\left(x_{t} | x_{1}, x_{2}, \cdots, x_{t-1}, z_{t}\right)}_{P\left(x_{t} | z_{t}\right)} P\left(x_{1}, x_{2}, \cdots, x_{t-1}, z_{t}\right) \\ &=P\left(x_{t} | z_{t}\right) \underbrace{P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{\text {prediction}} \underbrace{P\left(x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{\text {const}} \\ & \propto P\left(x_{t} | z_{t}\right) P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) \end{aligned} P(ztx1,x2,,xt)=P(x1,x2,,xt)P(zt,x1,x2,,xt)P(zt,x1,x2,,xt)=P(xtzt) P(xtx1,x2,,xt1,zt)P(x1,x2,,xt1,zt)=P(xtzt)prediction P(ztx1,x2,,xt1)const P(x1,x2,,xt1)P(xtzt)P(ztx1,x2,,xt1)

很显然通过如上的推导,我们将 Filtering 问题四归到了一个 Prediction 的问题。那么这个 Pre-
diction 的问题,如何进一步求解此? 下一步,我们对 Prediction 的部分进何推导。
P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) = ∫ z t − 1 P ( z t , z t − 1 ∣ x 1 , x 2 , ⋯   , x t − 1 ) d z t − 1 = ∫ z t − 1 P ( z t ∣ z t − 1 , x 1 , x 2 , ⋯   , x t − 1 ) ⏟ P ( z t − 1 ∣ x 1 , x 2 , ⋯   , x t − 1 ) ⏟ P ( z t ∣ z t − 1 ) d z t − 1 \begin{aligned} P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) &=\int_{z_{t-1}} P\left(z_{t}, z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right) d z_{t-1} \\ &=\int_{z_{t-1}} \underbrace{P\left(z_{t} | z_{t-1}, x_{1}, x_{2}, \cdots, x_{t-1}\right)} \underbrace{P\left(z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{P\left(z_{t} | z_{t-1}\right)} d z_{t-1} \end{aligned} P(ztx1,x2,,xt1)=zt1P(zt,zt1x1,x2,,xt1)dzt1=zt1 P(ztzt1,x1,x2,,xt1)P(ztzt1) P(zt1x1,x2,,xt1)dzt1
通知上述的推导,我们又同到了一个 Filtering 的问题,那么这样我们形成了一个递归的表达。那
素,我们可V憲结为在一个 Filtering 问题中,我们通过一个 Prediction 问题,来构建形成了一个回归。
那幻,下丽我将详细的说明一下求解的过程:
t = 1 t = 2 p ( z 2 ∣ x 1 )  prediction  ⋯ ⋯ p ( z 3 ∣ x 1 , x 2 )  prediction  t = T { P ( z 1 ∣ x 1 )  update  p ( z T + 1 ∣ x 1 , x 2 , ⋯   , x T − 1 )  update  \begin{array}{l} t=1 \\ t=2 \\ p\left(z_{2} | x_{1}\right) \text { prediction } \\ \cdots \cdots \\ p\left(z_{3} | x_{1}, x_{2}\right) \text { prediction } \\ t=T\left\{\begin{array}{ll} P\left(z_{1} | x_{1}\right) & \text { update } \\ p\left(z_{T+1} | x_{1}, x_{2}, \cdots, x_{T-1}\right) & \text { update } \end{array}\right. \end{array} t=1t=2p(z2x1) prediction p(z3x1,x2) prediction t=T{P(z1x1)p(zT+1x1,x2,,xT1) update  update 
很显然,我们可以不断的往里面添加数据来更新隐变量烟态 z t z_{t} zt

2.2 Filtering 问题求解具体分析

首先,我们需要明确一个问题,Gaussian Distribution 是一个具有非常好的性质的自共轭分布。通
俗的讲就是,Gaussian 分布的边缘分布,条件分布,联合概率分布等都是符合高斯分布的。首位,我
先回忆一下在Math Basis 那小节中,总结的线性高斯模型中,已知条件高斯分布,求变量高斯分布的
公式:
( 1 ) : P ( X ) = N ( X ∣ μ , Λ − 1 ) ( 2 ) : P ( Y ∣ X ) = N ( X ∣ A X + b , L − 1 ) ( 3 ) : P ( Y ) = N ( Y ∣ A X + b , L − 1 + A − 1 Λ A ) ( 4 ) : P ( X ∣ Y ) = N ( Σ { A T L ( y − b ) + Λ μ } , Σ ) Σ = ( Λ + A T L A ) − 1 \begin{array}{l} (1):P(X)=\mathcal{N}\left(X | \mu, \Lambda^{-1}\right) \\ (2):P(Y | X)=\mathcal{N}\left(X | A X+b, L^{-1}\right) \\ (3):P(Y)=\mathcal{N}\left(Y | A X+b, L^{-1}+A^{-1} \Lambda A\right) \\ (4):P(X | Y)=\mathcal{N}\left(\Sigma\left\{A^{T} L(y-b)+\Lambda \mu\right\}, \Sigma\right) \quad \Sigma=\left(\Lambda+A^{T} L A\right)^{-1} \end{array} 1P(X)=N(Xμ,Λ1)2P(YX)=N(XAX+b,L1)3P(Y)=N(YAX+b,L1+A1ΛA)4P(XY)=N(Σ{ATL(yb)+Λμ},Σ)Σ=(Λ+ATLA)1
从上小节中我们分析了 Filtering 问题的推导过程,我们可以看到 Filtering 问题可以被大致分成
两个部分,也就是 Prediction 和 Update 两个部分。上一小节中我描述了大致的求解思路,那么这一 小节我们将详细的描述怎么计算。

2.2.1 Prediction

预测问题被我们描述为, P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) , P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right), P(ztx1,x2,,xt1), 那下面我们来进行分析怎么求。
P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) = ∫ z t − 1 P ( z t ∣ z t − 1 ) P ( z t − 1 ∣ x 1 , x 2 , ⋯   , x t − 1 ) d z t − 1 P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)=\int_{z_{t-1}} P\left(z_{t} | z_{t-1}\right) P\left(z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right) d z_{t-1} P(ztx1,x2,,xt1)=zt1P(ztzt1)P(zt1x1,x2,,xt1)dzt1
根据 Gaussian Distribution 的自共轭性(两个高斯分布相乘仍是高斯分布),所以 P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) P(ztx1,x2,,xt1) 一定是一个 Gaussian Distribution。事实上 x 1 , x 2 , ⋯   , x t − 1 x_{1}, x_{2}, \cdots, x_{t-1} x1,x2,,xt1 中所有的信息都是已知的。为了方便表达
P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) ∼ P ( z t ) P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) \sim P\left(z_{t}\right) P(ztx1,x2,,xt1)P(zt),
那么,我们令

  • t − 1 t-1 t1 时刻: P ( z t − 1 ∣ x 1 , x 2 , ⋯   , x t − 1 ) ∼ N ( μ t − 1 , Σ t − 1 ) P\left(z_{t-1} | x_{1}, x_{2}, \cdots, x_{t-1}\right) \sim \mathcal{N}\left(\mu_{t-1}, \Sigma_{t-1}\right) P(zt1x1,x2,,xt1)N(μt1,Σt1)
  • t t t 时刻的分布 P ( z t ∣ x 1 , x 2 , ⋯   , x t ) ∼ N ( μ t ∗ , Σ t ∗ ) P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right) \sim \mathcal{N}\left(\mu_{t}^{*}, \Sigma_{t}^{*}\right) P(ztx1,x2,,xt)N(μt,Σt)

并且, 根据 Gaussian Distribution 的自共轭性,我们可以令 P ( z t ∣ z t − 1 ) ∼ N ( z t ∣ A z t − 1 + B , Q ) P\left(z_{t} | z_{t-1}\right) \sim \mathcal{N}\left(z_{t} | A z_{t-1}+B, Q\right) P(ztzt1)N(ztAzt1+B,Q) 。令 x = z t − 1 , y = z t , x=z_{t-1}, y=z_{t}, x=zt1,y=zt, 代公式 ( 1 ) − ( 4 ) , (1)-(4), (1)(4), 可以计算出:
{ μ t ∗ = A μ t − 1 + B Σ t ∗ = Q + A Σ t − 1 A T \left\{\begin{array}{l} \mu_{t}^{*}=A \mu_{t-1}+B \\ \Sigma_{t}^{*}=Q+A \Sigma_{t-1} A^{T} \end{array}\right. {μt=Aμt1+BΣt=Q+AΣt1AT

2.2.2 Update

然而,对于 update 问题,我们的目标是求解:
P ( z t ∣ x 1 , x 2 , ⋯   , x t ) ∝ P ( x t ∣ z t ) ⋅ P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right) \propto P\left(x_{t} | z_{t}\right) \cdot P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right) P(ztx1,x2,,xt)P(xtzt)P(ztx1,x2,,xt1)
在这个问题中 x 1 , x 2 , ⋯   , x t − 1 x_{1}, x_{2}, \cdots, x_{t-1} x1,x2,,xt1 都是已知的,而 x t x_{t} xt 是未知的。所以上式 可以被改写为:
P ( z t ∣ x 1 , x 2 , ⋯   , x t ) ⏟ P ( X ∣ Y ) ∝ P ( x t ∣ z t ) ⏟ P ( Y ∣ X ) ⋅ P ( z t ∣ x 1 , x 2 , ⋯   , x t − 1 ) ⏟ P ( X ) \underbrace{P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t}\right)}_{P(X | Y)} \propto \underbrace{P\left(x_{t} | z_{t}\right)}_{P(Y | X)} \cdot \underbrace{P\left(z_{t} | x_{1}, x_{2}, \cdots, x_{t-1}\right)}_{P(X)} P(XY) P(ztx1,x2,,xt)P(YX) P(xtzt)P(X) P(ztx1,x2,,xt1)
同样利用 Guassian Distribution 的自共轭性,我们可以将公式改与为:
N ( μ t , Σ t ) ∝ N ( x t ∣ C z t + D , R ) ⋅ N ( μ t ∗ , Σ t ∗ ) \mathcal{N}\left(\mu_{t}, \Sigma_{t}\right) \propto \mathcal{N}\left(x_{t} | C z_{t}+D, R\right) \cdot \mathcal{N}\left(\mu_{t}^{*}, \Sigma_{t}^{*}\right) N(μt,Σt)N(xtCzt+D,R)N(μt,Σt)
所以,利用公式 (1,2,4) 我们可以求解出 μ t \mu_{t} μt Σ t \Sigma_{t} Σt 根据公式 ( 4 ) , (4), (4), 我们其实可以看到这个求解过程实际上非常的复杂,实际上地是一个迭代的过程。我们就不再做过多的描述了 (实际上把公式一代入,把符号换一下就可可以)。 所以将第一小节和第二小节结合起来一下,第一小节给出了求解的主体思路,第二小节中给出了
每一步具体如何实现。并且利用了 Gaussian Linear Model 的计算公式米进行求解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的无迹卡尔曼滤波的 MATLAB 程序: ```matlab function [x, P] = ukf_filter(z, x0, P0, Q, R, ffun, hfun) % UKF_FILTER Unscented Kalman Filter for nonlinear dynamic systems % % [x, P] = ukf_filter(z, x0, P0, Q, R, ffun, hfun) % % INPUTS % z - measurements (column vector) % x0 - initial state (column vector) % P0 - initial covariance matrix % Q - process noise covariance matrix % R - measurement noise covariance matrix % ffun - function handle to state transition function % hfun - function handle to measurement function % % OUTPUTS % x - state estimate (column vector) % P - state covariance matrix n = length(x0); % Define scaling parameters alpha = 1e-3; kappa = 0; beta = 2; % Calculate sigma points L = chol(P0)'; X = [zeros(n,1), L, -L]; X = sqrt(n+lambda)*X + x0(:,ones(2*n+1,1)); % Calculate weights lambda = alpha^2*(n+kappa)-n; Wm = [lambda/(n+lambda), 0.5/(n+lambda)*ones(1,2*n)]; Wc = Wm; Wc(1) = Wc(1) + (1-alpha^2+beta); c = sqrt(n+lambda); % Initialize state estimate and covariance x = x0; P = P0; % Perform unscented Kalman filtering for k = 1:length(z) % Propagate sigma points through state transition function X = ffun(X); % Calculate predicted state and covariance x_pred = X*Wm'; P_pred = zeros(n,n); for j = 1:2*n+1 P_pred = P_pred + Wc(j)*(X(:,j)-x_pred)*(X(:,j)-x_pred)'; end P_pred = P_pred + Q; % Propagate sigma points through measurement function Y = hfun(X); % Calculate predicted measurements and innovation covariance z_pred = Y*Wm'; S = zeros(length(z_pred),length(z_pred)); for j = 1:2*n+1 S = S + Wc(j)*(Y(:,j)-z_pred)*(Y(:,j)-z_pred)'; end S = S + R; % Calculate cross-covariance matrix Pxy = zeros(n,length(z_pred)); for j = 1:2*n+1 Pxy = Pxy + Wc(j)*(X(:,j)-x_pred)*(Y(:,j)-z_pred)'; end % Calculate Kalman gain K = Pxy/S; % Update state estimate and covariance x = x_pred + K*(z(k)-z_pred); P = P_pred - K*S*K'; end ``` 其中,输入参数为: - `z`:测量向量(列向量)。 - `x0`:初始状态向量(列向量)。 - `P0`:初始协方差矩阵。 - `Q`:过程噪声协方差矩阵。 - `R`:测量噪声协方差矩阵。 - `ffun`:状态转移函数的函数句柄。 - `hfun`:测量函数的函数句柄。 输出参数为: - `x`:状态估计向量(列向量)。 - `P`:状态协方差矩阵。 这个程序实现了一个无迹卡尔曼滤波器,可以用于非线性动态系统的状态估计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值