线性动态系统(LDS)的卡尔曼滤波算法原理与状态估计过程
字数 3030 2025-11-07 12:33:00

线性动态系统(LDS)的卡尔曼滤波算法原理与状态估计过程

题目描述
线性动态系统(LDS)用于描述一个具有内在状态的系统,其状态随时间线性演化,并且我们只能通过包含噪声的观测值来间接感知系统的状态。卡尔曼滤波是一种高效的递归滤波器,它能够从一系列包含噪声的观测数据中,估计动态系统的内部状态。其核心任务是,在已知系统动态模型和观测模型的情况下,根据到当前时刻为止的所有观测数据,最优地(均方误差最小)估计当前时刻的系统状态。本题要求详细理解并阐述卡尔曼滤波算法的原理及其递推计算过程。

解题过程

1. 系统模型定义
卡尔曼滤波建立在两个核心的线性高斯模型之上:
a. 状态转移模型(系统模型):描述状态如何随时间演化。
\(\mathbf{x}_t = \mathbf{A}_t \mathbf{x}_{t-1} + \mathbf{B}_t \mathbf{u}_t + \mathbf{w}_t\)
* \(\mathbf{x}_t\): 时刻 \(t\) 的系统状态(一个向量,例如位置、速度)。
* \(\mathbf{A}_t\): 状态转移矩阵,描述状态如何从 \(t-1\) 时刻演化到 \(t\) 时刻。
* \(\mathbf{u}_t\): 时刻 \(t\) 的控制输入(可选,例如加速度)。
* \(\mathbf{B}_t\): 控制输入矩阵,描述控制输入如何影响状态。
* \(\mathbf{w}_t\): 过程噪声,服从均值为0、协方差矩阵为 \(\mathbf{Q}_t\) 的高斯分布,即 \(\mathbf{w}_t \sim \mathcal{N}(0, \mathbf{Q}_t)\)

b. 观测模型:描述我们如何观测到系统的状态。
\(\mathbf{z}_t = \mathbf{H}_t \mathbf{x}_t + \mathbf{v}_t\)
* \(\mathbf{z}_t\): 时刻 \(t\) 的观测值(一个向量)。
* \(\mathbf{H}_t\): 观测矩阵,描述真实状态如何映射到观测空间。
* \mathbf{v}_t\): 观测噪声,服从均值为0、协方差矩阵为 \(\mathbf{R}_t\) 的高斯分布,即 \(\mathbf{v}_t \sim \mathcal{N}(0, \mathbf{R}_t)\)

2. 卡尔曼滤波的递归循环
算法是一个“预测-更新”循环。在每一步 \(t\),我们拥有上一时刻的后验估计,并利用当前时刻的观测值 \(\mathbf{z}_t\) 来得到当前时刻的后验估计。

  • 输入:上一时刻的后验状态估计 \(\hat{\mathbf{x}}_{t-1|t-1}\) 及其估计误差的协方差矩阵 \(\mathbf{P}_{t-1|t-1}\)
  • 输出:当前时刻的后验状态估计 \(\hat{\mathbf{x}}_{t|t}\) 及其估计误差的协方差矩阵 \(\mathbf{P}_{t|t}\)

步骤一:预测步(时间更新)
在这一步,我们利用系统模型来预测当前时刻的状态和不确定性,但尚未使用当前时刻的观测值。

a. 先验状态预测:根据系统模型,预测 \(t\) 时刻的状态。
\(\hat{\mathbf{x}}_{t|t-1} = \mathbf{A}_t \hat{\mathbf{x}}_{t-1|t-1} + \mathbf{B}_t \mathbf{u}_t\)

b. 先验协方差预测:预测 \(t\) 时刻状态估计的不确定性。不确定性来自两个方面:上一时刻估计的不确定性(\(\mathbf{P}_{t-1|t-1}\))和过程噪声引入的不确定性(\(\mathbf{Q}_t\))。
\(\mathbf{P}_{t|t-1} = \mathbf{A}_t \mathbf{P}_{t-1|t-1} \mathbf{A}_t^T + \mathbf{Q}_t\)

步骤二:更新步(测量更新)
在这一步,我们结合预测值(先验)和新的观测值 \(\mathbf{z}_t\) 来得到更精确的估计(后验)。

a. 计算卡尔曼增益:卡尔曼增益 \(\mathbf{K}_t\) 是一个权衡因子,决定我们应该在多大程度上相信预测值还是观测值。
\(\mathbf{K}_t = \mathbf{P}_{t|t-1} \mathbf{H}_t^T (\mathbf{H}_t \mathbf{P}_{t|t-1} \mathbf{H}_t^T + \mathbf{R}_t)^{-1}\)
* 如果观测噪声 \(\mathbf{R}_t\) 很小(观测很精确),增益会变大,意味着更相信观测。
* 如果预测的不确定性 \(\mathbf{P}_{t|t-1}\) 很大,增益也会变大,意味着需要更多依赖观测来修正预测。

b. 后验状态更新:用卡尔曼增益将先验状态预测和观测的新息(观测值与预测观测值之差)进行融合。
\(\hat{\mathbf{x}}_{t|t} = \hat{\mathbf{x}}_{t|t-1} + \mathbf{K}_t (\mathbf{z}_t - \mathbf{H}_t \hat{\mathbf{x}}_{t|t-1})\)
* \((\mathbf{z}_t - \mathbf{H}_t \hat{\mathbf{x}}_{t|t-1})\) 被称为新息,它代表了实际观测与我们预测的观测之间的差异。

c. 后验协方差更新:更新状态估计的不确定性。由于融入了新的观测信息,不确定性会减小。
\(\mathbf{P}_{t|t} = (\mathbf{I} - \mathbf{K}_t \mathbf{H}_t) \mathbf{P}_{t|t-1}\)
* \(\mathbf{I}\) 是单位矩阵。

3. 算法初始化与循环
算法需要一个起始点:

  • \(\hat{\mathbf{x}}_{0|0} = E[\mathbf{x}_0]\) (初始状态的期望)
  • \(\mathbf{P}_{0|0} = E[(\mathbf{x}_0 - \hat{\mathbf{x}}_{0|0})(\mathbf{x}_0 - \hat{\mathbf{x}}_{0|0})^T]\) (初始状态的协方差)

然后,对于每一个新的时间步 \(t = 1, 2, 3, ...\),重复执行预测步更新步。这个过程是递归的,计算效率很高,因为它不需要保存历史数据,只需要上一时刻的结果。

总结
卡尔曼滤波通过“预测-修正”的框架,优雅地结合了系统动力学模型和带噪声的观测数据。预测步根据模型外推状态,更新步则根据观测残差来修正预测。卡尔曼增益动态地调整对模型和观测的信任度,从而在满足线性高斯假设的条件下,给出了最优的状态估计。

线性动态系统(LDS)的卡尔曼滤波算法原理与状态估计过程 题目描述 线性动态系统(LDS)用于描述一个具有内在状态的系统,其状态随时间线性演化,并且我们只能通过包含噪声的观测值来间接感知系统的状态。卡尔曼滤波是一种高效的递归滤波器,它能够从一系列包含噪声的观测数据中,估计动态系统的内部状态。其核心任务是,在已知系统动态模型和观测模型的情况下,根据到当前时刻为止的所有观测数据,最优地(均方误差最小)估计当前时刻的系统状态。本题要求详细理解并阐述卡尔曼滤波算法的原理及其递推计算过程。 解题过程 1. 系统模型定义 卡尔曼滤波建立在两个核心的线性高斯模型之上: a. 状态转移模型(系统模型) :描述状态如何随时间演化。 \( \mathbf{x}_ t = \mathbf{A} t \mathbf{x} {t-1} + \mathbf{B}_ t \mathbf{u}_ t + \mathbf{w}_ t \) * \( \mathbf{x}_ t \): 时刻 \( t \) 的系统状态(一个向量,例如位置、速度)。 * \( \mathbf{A}_ t \): 状态转移矩阵,描述状态如何从 \( t-1 \) 时刻演化到 \( t \) 时刻。 * \( \mathbf{u}_ t \): 时刻 \( t \) 的控制输入(可选,例如加速度)。 * \( \mathbf{B}_ t \): 控制输入矩阵,描述控制输入如何影响状态。 * \( \mathbf{w}_ t \): 过程噪声,服从均值为0、协方差矩阵为 \( \mathbf{Q}_ t \) 的高斯分布,即 \( \mathbf{w}_ t \sim \mathcal{N}(0, \mathbf{Q}_ t) \)。 b. 观测模型 :描述我们如何观测到系统的状态。 \( \mathbf{z}_ t = \mathbf{H}_ t \mathbf{x}_ t + \mathbf{v}_ t \) * \( \mathbf{z}_ t \): 时刻 \( t \) 的观测值(一个向量)。 * \( \mathbf{H}_ t \): 观测矩阵,描述真实状态如何映射到观测空间。 * \mathbf{v}_ t\): 观测噪声,服从均值为0、协方差矩阵为 \( \mathbf{R}_ t \) 的高斯分布,即 \( \mathbf{v}_ t \sim \mathcal{N}(0, \mathbf{R}_ t) \)。 2. 卡尔曼滤波的递归循环 算法是一个“预测-更新”循环。在每一步 \( t \),我们拥有上一时刻的后验估计,并利用当前时刻的观测值 \( \mathbf{z}_ t \) 来得到当前时刻的后验估计。 输入 :上一时刻的后验状态估计 \( \hat{\mathbf{x}} {t-1|t-1} \) 及其估计误差的协方差矩阵 \( \mathbf{P} {t-1|t-1} \)。 输出 :当前时刻的后验状态估计 \( \hat{\mathbf{x}} {t|t} \) 及其估计误差的协方差矩阵 \( \mathbf{P} {t|t} \)。 步骤一:预测步(时间更新) 在这一步,我们利用系统模型来预测当前时刻的状态和不确定性,但尚未使用当前时刻的观测值。 a. 先验状态预测 :根据系统模型,预测 \( t \) 时刻的状态。 \( \hat{\mathbf{x}}_ {t|t-1} = \mathbf{A} t \hat{\mathbf{x}} {t-1|t-1} + \mathbf{B}_ t \mathbf{u}_ t \) b. 先验协方差预测 :预测 \( t \) 时刻状态估计的不确定性。不确定性来自两个方面:上一时刻估计的不确定性(\( \mathbf{P}_ {t-1|t-1} \))和过程噪声引入的不确定性(\( \mathbf{Q} t \))。 \( \mathbf{P} {t|t-1} = \mathbf{A} t \mathbf{P} {t-1|t-1} \mathbf{A}_ t^T + \mathbf{Q}_ t \) 步骤二:更新步(测量更新) 在这一步,我们结合预测值(先验)和新的观测值 \( \mathbf{z}_ t \) 来得到更精确的估计(后验)。 a. 计算卡尔曼增益 :卡尔曼增益 \( \mathbf{K}_ t \) 是一个权衡因子,决定我们应该在多大程度上相信预测值还是观测值。 \( \mathbf{K} t = \mathbf{P} {t|t-1} \mathbf{H}_ t^T (\mathbf{H} t \mathbf{P} {t|t-1} \mathbf{H}_ t^T + \mathbf{R}_ t)^{-1} \) * 如果观测噪声 \( \mathbf{R} t \) 很小(观测很精确),增益会变大,意味着更相信观测。 * 如果预测的不确定性 \( \mathbf{P} {t|t-1} \) 很大,增益也会变大,意味着需要更多依赖观测来修正预测。 b. 后验状态更新 :用卡尔曼增益将先验状态预测和观测的新息(观测值与预测观测值之差)进行融合。 \( \hat{\mathbf{x}} {t|t} = \hat{\mathbf{x}} {t|t-1} + \mathbf{K}_ t (\mathbf{z}_ t - \mathbf{H} t \hat{\mathbf{x}} {t|t-1}) \) * \( (\mathbf{z}_ t - \mathbf{H} t \hat{\mathbf{x}} {t|t-1}) \) 被称为 新息 ,它代表了实际观测与我们预测的观测之间的差异。 c. 后验协方差更新 :更新状态估计的不确定性。由于融入了新的观测信息,不确定性会减小。 \( \mathbf{P}_ {t|t} = (\mathbf{I} - \mathbf{K}_ t \mathbf{H} t) \mathbf{P} {t|t-1} \) * \( \mathbf{I} \) 是单位矩阵。 3. 算法初始化与循环 算法需要一个起始点: \( \hat{\mathbf{x}}_ {0|0} = E[ \mathbf{x}_ 0 ] \) (初始状态的期望) \( \mathbf{P}_ {0|0} = E[ (\mathbf{x} 0 - \hat{\mathbf{x}} {0|0})(\mathbf{x} 0 - \hat{\mathbf{x}} {0|0})^T ] \) (初始状态的协方差) 然后,对于每一个新的时间步 \( t = 1, 2, 3, ... \),重复执行 预测步 和 更新步 。这个过程是递归的,计算效率很高,因为它不需要保存历史数据,只需要上一时刻的结果。 总结 卡尔曼滤波通过“预测-修正”的框架,优雅地结合了系统动力学模型和带噪声的观测数据。预测步根据模型外推状态,更新步则根据观测残差来修正预测。卡尔曼增益动态地调整对模型和观测的信任度,从而在满足线性高斯假设的条件下,给出了最优的状态估计。