卡尔曼滤波(Kalman Filtering)基础知识(方差、协方差与相关系数)

本文详细解释了卡尔曼滤波中的关键概念,包括方差、协方差和相关系数,阐述了它们在衡量随机变量间关系和预测中的作用,以及如何通过公式理解这些统计量。

卡尔曼滤波(Kalman Filtering)——(2)基础知识(方差、协方差与相关系数)

背景

卡尔曼滤波预测中用到协方差,查了相关资料,以此记录。
在这里插入图片描述

协方差

协方差(Covariance)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

协方差公式

在这里插入图片描述

一、 方差

方差是各个数据与平均数之差的平方的平均数。在概率论和数理统计中,方差(英文Variance)用来度量随机变量和其数学期望(即均值)之间的偏离程度。在许多实际问题中,研究随机变量和均值之间的偏离程度有着很重要的意义。
  在这里插入图片描述

二、标准差

方差开根号。

三、协方差

在概率论和统计学中,协方差用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
在这里插入图片描述
 可以通俗的理解为:两个变量在变化过程中是否同向变化?还是反方向变化?同向或反向程度如何?

  • 你变大,同时我也变大,说明两个变量是同向变化的,这是协方差就是正的。
  • 你变大,同时我变小,说明两个变量是反向变化的,这时协方差就是负的。
  • 如果我是自然人,而你是太阳,那么两者没有相关关系,这时协方差是0。

从数值来看,协方差的数值越大,两个变量同向程度也就越大,反之亦然。
  可以看出来,协方差代表了两个变量之间的是否同时偏离均值,和偏离的方向是相同还是相反。
公式:如果有X,Y两个变量,每个时刻的“X值与其均值之差”乘以“Y值与其均值之差”得到一个乘积,再对这每时刻的乘积求和并求出均值,即为协方差。
在这里插入图片描述
中间省略若干,数字基础太差。。。

  • 卡尔曼滤波(Kalman Filtering)——(2)基础知识(方差、协方差与相关系数)
    四、方差,标准差与协方差之间的联系与区别
  • 1.方差和标准差都是对一组(一维)数据进行统计的,反映的是一维数组的离散程度;而协方差是对2组数据进行统计的,反映的是2组数据之间的相关性。
  • 2.标准差和均值的量纲(单位)是一致的,在描述一个波动范围时标准差比方差更方便。比如一个班男生的平均身高是170cm,标准差是10cm,那么方差就是10cm^2。可以进行的比较简便的描述是本班男生身高分布是170±10cm,方差就无法做到这点。
  • 3.方差可以看成是协方差的一种特殊情况,即2组数据完全相同。
    协方差的计算公式为:
    在这里插入图片描述
    在这里插入图片描述
    4.协方差只表示线性相关的方向,取值正无穷到负无穷

四、相关系数

相关度的大小了:相关系数
协方差的相关系数,不仅表示线性相关的方向,还表示线性相关的程度,取值[-1,1]。也就是说,相关系数为正值,说明一个变量变大另一个变量也变大;取负值说明一个变量变大另一个变量变小,取0说明两个变量没有相关关系。同时,相关系数的绝对值越接近1,线性关系越显著。
相关系数:
1、也可以反映两个变量变化时是同向还是反向,如果同向变化就为正,反向变化就为负。
2、由于它是标准化后的协方差,因此更重要的特性来了:它消除了两个变量变化幅度的影响,而只是单纯反应两个变量每单位变化时的相似程度。
计算公式为:就是用X、Y的协方差除以X的标准差乘以Y的标准差。
在这里插入图片描述
在概率论中,两个随机变量 X 与 Y 之间相互关系,大致有下列3种情况:
在这里插入图片描述

当 X, Y 的联合分布像左图那样时,我们可以看出,大致上有: X 越大 Y 也越大, X 越小 Y 也越小,这种情况,我们称为 “正相关”。

当X, Y 的联合分布像中图那样时,我们可以看出,大致上有:X 越大Y 反而越小,X 越小 Y 反而越大,这种情况,我们称为 “负相关”。

当X, Y 的联合分布像右图那样时,我们可以看出:既不是X 越大Y 也越大,也不是 X 越大 Y 反而越小,这种情况我们称为 “ 不相关”。

怎样将这3种相关情况,用一个简单的数字表达出来呢?

  • 在图中的区域(1)中,有 X>EX ,Y-EY>0 ,所以(X-EX)(Y-EY)>0;
  • 在图中的区域(2)中,有 X<EX ,Y-EY>0 ,所以(X-EX)(Y-EY)<0;
  • 在图中的区域(3)中,有 X<EX ,Y-EY<0 ,所以(X-EX)(Y-EY)>0;
  • 在图中的区域(4)中,有 X>EX ,Y-EY<0 ,所以(X-EX)(Y-EY)<0。

当X 与Y 正相关时,它们的分布大部分在区域(1)和(3)中,小部分在区域(2)和(4)中,所以平均来说,有E(X-EX)(Y-EY)>0 。

当 X与 Y负相关时,它们的分布大部分在区域(2)和(4)中,小部分在区域(1)和(3)中,所以平均来说,有(X-EX)(Y-EY)<0 。

当 X与 Y不相关时,它们在区域(1)和(3)中的分布,与在区域(2)和(4)中的分布几乎一样多,所以平均来说,有(X-EX)(Y-EY)=0 。
所以,我们可以定义一个表示X, Y 相互关系的数字特征,也就是协方差。

cov(X,Y)=E(X−EX)(Y−EY)

  • 当 cov(X, Y)>0时,表明 X与Y 正相关;
  • 当 cov(X, Y)<0时,表明X与Y负相关;
  • 当 cov(X, Y)=0时,表明X与Y不相关。

这就是协方差的意义。
协方差矩阵的主对角线就是方差,反对角线上的就是两个变量间的协方差。
就上面的二元高斯分布而言,协方差越大,图像越扁,也就是说两个维度之间越有联系。

特别提示

上面的公式和数据并非我推导或者验证,仅做参考。

引用博客

### 卡尔曼滤波用于加速度方差估计 在卡尔曼滤波框架内,当已知位置数据时,可以通过扩展状态向量来估算加速度及其不确定性。具体而言,假设系统的状态由位置 \(p\)、速度 \(v\) 和加速度 \(a\) 组成,则状态转移模型可以表示为: \[ \begin{bmatrix} p_{k+1}\\ v_{k+1}\\ a_{k+1} \end{bmatrix}= \begin{bmatrix} 1 & T_s & \frac{T_s^2}{2}\\ 0 & 1 & T_s\\ 0 & 0 & 1 \end{bmatrix}\cdot\begin{bmatrix} p_k \\ v_k \\ a_k \end{bmatrix}+\begin{bmatrix} w_p \\ w_v \\ w_a \end{bmatrix}, \] 其中 \(T_s\) 是采样周期,\(w_p, w_v, w_a\) 表示过程噪声[^1]。 为了从观测到的位置信息中推断出加速度的方差,需要定义一个合适的观测矩阵 \(H\) 将实际测量的位置映射回状态空间: \[ z_k= H\cdot x_k+v_k=\begin{bmatrix} 1&0&0 \end{bmatrix}\cdot\begin{bmatrix} p_k \\ v_k \\ a_k \end{bmatrix}+v_k,\] 这里只考虑了位置作为直接可观测变量,而忽略了速度和加速度的直接测量[^4]。 接下来,初始化先验概率分布,即给定初始状态下各个参数均值协方差矩阵 P 的设定。由于关注点在于计算加速度的不确定度(即方差),因此特别注意协方差矩阵右下角元素——它代表了对加速度估计的信心程度。随着每次迭代更新,此值会逐渐收敛至较为稳定的状态,反映出系统对于加速度认知的确信水平变化情况。 ```python import numpy as np def kalman_filter_update(x_pred, P_pred, z_measured, R, Q): """ Perform one step of Kalman Filter update. :param x_pred: Predicted state vector [px; vx; ax] :param P_pred: Prediction error covariance matrix :param z_measured: Measured position value :param R: Measurement noise covariance :param Q: Process noise covariance :return: Updated state estimate and updated error covariance """ # Observation model (only observing position) H = np.array([[1., 0., 0.]]) # Innovation or measurement residual y = z_measured - np.dot(H, x_pred) # Innovation (or residual) covariance S = np.dot(np.dot(H, P_pred), H.T) + R # Optimal Kalman gain K = np.dot(P_pred @ H.T, np.linalg.inv(S)) # Update the state with measurements x_estimated = x_pred + np.dot(K, y).reshape(-1, 1) # Update the estimation error covariance I = np.eye(len(x_pred)) P_updated = np.dot((I - np.dot(K, H)), P_pred) return x_estimated, P_updated # Example usage: Ts = 1.0 # Sampling time interval Q = np.diag([0.1, 0.1, 0.1]) ** 2 # Process noise covariance R = 5.0 ** 2 # Measurement noise variance # Initial estimates for position, velocity, acceleration initial_state_mean = np.zeros((3, 1)) P_initial = np.diag([1000, 1000, 1000]) # Simulated measured positions over time... measured_positions = [...] for pos in measured_positions: initial_state_mean, P_initial = kalman_filter_update( initial_state_mean, P_initial, pos, R=R, Q=Q ) print(f"Estimated Acceleration Variance after filtering: {P_initial[-1,-1]}") ``` 上述代码展示了如何基于一系列位置测量执行卡尔曼滤波算法,并最终输出经过多次迭代后的加速度方差估计结果。需要注意的是,这里的 `measured_positions` 应替换为真实应用场景下的连续位置读数序列[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值