离散KF仿真

前置基础
连续时间状态空间表达式
对于线性定常系统,连续时间状态空间表达式为:
其中为状态向量,为输入向量,为输出向量。描述状态之间的关系,描述输入对状态的影响,将状态转换为输出,为输入到输出的直接传递矩阵。
下标表示连续时间,后面的下标表示离散时间。
离散时间状态空间表达式
令,,离散时间状态空间表达式为:
其中为采样时间,为采样序号。下面介绍由连续时间模型求和的两种方法。
向前欧拉
用相邻两个采样点的差分近似导数:
代入连续时间状态方程得:
整理得:
其中为与同阶的单位矩阵。向前欧拉是近似离散化,采样时间越小,通常越接近连续系统;采样时间过大时,也可能使原本稳定的系统在离散后变得不稳定。
精确离散化
假设每个采样周期内输入保持不变,即,。对连续时间状态方程求解得:
因此:
若可逆,则还可以写成:
其中为矩阵指数。这里的“精确”以采样周期内输入不变为前提,也就是零阶保持。后面的仿真使用向前欧拉离散化。
贝叶斯法则
贝叶斯法则为:
其中:
- 是先验,表示得到当前观测之前,对的认识。
- 是似然,表示状态为时,得到观测的可能性。
- 是后验,表示得到观测后,对更新后的认识。
- 是归一化因子,使后验概率密度的积分为1。
当已经给定时,与无关,因此可以写成:
在KF中,先根据系统数学模型得到先验,再结合传感器的观测得到后验。
方差
对于标量随机变量,方差为:
对于状态向量,对应的是协方差矩阵:
若用估计,令估计误差为,在无偏估计的条件下有:
也就是误差乘以误差的转置,然后取均值。协方差矩阵的对角元素是各个状态的误差方差,非对角元素表示不同状态误差之间的相关性。
一阶马尔可夫性
一阶马尔可夫性(first-order Markov property)常被称为“无后效性”:给定当前状态后,未来的演化只依赖当前状态,而与更早的历史无关。
“一阶”表示记忆长度为 1:只需要记住“现在”,不需要记住“过去”。
对于包含已知输入的状态方程,还需要给定对应的输入:
其中表示从到的全部状态。这里要求状态已经包含描述系统演化所需的信息,并且当前过程噪声与过去的状态、输入无关。
离散KF
核心公式
先统一符号。本文沿用后面Simulink图中的命名,为状态方程中的过程噪声协方差,为量测噪声协方差。部分资料会将这两个字母反过来使用,阅读时需要先看各自的定义。
和分别表示预测得到的状态和误差协方差,也就是先验。和分别表示结合当前观测更新后的状态和误差协方差,也就是后验。
预测
更新
其中是传感器采集结果,是观测矩阵,是卡尔曼增益,就是滤波结果。称为新息,表示实际观测与预测观测之间的差。
每个采样周期先预测,再更新。更新后的和会用于下一个周期的预测。
推导离散KF
离散状态空间表达式:
其中为直接加在状态上的过程噪声,为量测噪声。假设二者都是零均值高斯白噪声,相互独立,并且与初始状态独立:
初始状态服从高斯分布,均值为,协方差为。是已知输入。为便于下面求逆,假设和为正定矩阵。
后面的仿真将干扰加在输入端,此时,需要由输入干扰的协方差换算得到。
由系统数学模型(状态空间表达式)对进行预测
对(1)两侧求期望。这里的期望以已经得到的历史观测和已知输入为条件,由于过程噪声均值为0,有:
由(1) - (3)得预测误差:
有了误差可以得出的预测误差协方差:
将(4)代入(5)得:
由于当前过程噪声与上一时刻的估计误差独立,且均值为0,中间两项为0,因此:
到这里,根据上一时刻的滤波结果,得到了当前时刻的状态预测值和预测误差协方差。
由贝叶斯法则对、、进行更新
计算的概率分布
得到当前观测后,根据贝叶斯法则有:
这里的初始分布由和给定。分母与待估计的无关,将分母拿掉得:
由一阶马尔可夫性,预测分布只需要通过上一时刻的状态分布递推:
上一时刻的后验为高斯分布,状态方程是线性的,过程噪声也是高斯分布,因此预测分布仍然是高斯分布,其均值和协方差就是前面求出的结果:
由(2)和量测噪声的独立性可得,给定后,当前观测与历史观测无关,因此似然为:
将这两个高斯分布代入,并去掉与无关的系数:
其中:
第一项描述当前状态与模型预测之间的差,第二项描述当前状态对应的输出与实际观测之间的差。协方差的逆决定这两项各自的权重。
求使最小的条件,即使概率最大的条件
在离散卡尔曼滤波(KF)中,让后验概率密度更大(即求最大后验估计,MAP),本质上是因为我们希望在获得新的观测数据后,寻找当前状态最有可能的取值。
由于后验概率密度正比于,因此使最小,就是使后验概率密度最大。
对求导:
令导数为0,整理得:
又因为:
满足上式条件时可以使取得唯一的最小值。将这个记为。
将配方得:
与高斯分布的指数部分比较,可得后验协方差:
因此:
利用矩阵求逆引理,可以将改写成:
令卡尔曼增益为:
则有:
由上述定义还可以得到和,代入的表达式:
整理得更新公式:
其中用于分配预测和观测的权重。和是根据贝叶斯法则更新后的值(后验),和是根据数学模型计算的预测值(先验)。
是滤波后的结果。在这里的线性高斯条件下,后验的最大值点也等于后验均值,因此这个结果同时也是最小均方误差估计。
Simulink仿真
背景

系统由两个质量块和三个弹簧—阻尼支路组成。两个质量块分别受到外力、,其中、为已知输入,、为未知干扰。传感器分别测量两个质量块的位移、。
三个连接支路中的弹簧和阻尼器均为并联。位移相对无外力时的平衡位置定义,位移、速度和外力均以向右为正。忽略摩擦非线性、限位和弹簧非线性。
图中参数为:
求连续时间状态空间表达式
根据牛顿第二定律,两个质量块分别有:
令,,输入和干扰分别为:
取 ,代入上述参数:
求向前欧拉离散时间表达式
由、得:
将离散后的输入干扰记为,并在输出端加入量测误差:
其中和分别是输入干扰和量测误差,均为向量。状态中的、表示速度,这里的表示量测噪声。
令输入干扰的协方差为,则加在状态上的过程噪声为,因此预测公式中的应为:
量测噪声协方差为:
是矩阵,是矩阵。输入噪声经过后才影响状态,所以不能直接将的接到预测的端口。
搭建原系统模型
- 设置仿真步长为
1e-6。

这里令采样时间。原系统、KF以及噪声源均按这个周期更新,所有Unit Delay块的采样时间也设为,保证图中的表示一个采样周期的延迟。
- 求。

- 求。

- 求。

这个子系统只负责状态递推,输入干扰会在外部与相加后一起送入。
- 求。

- 将上面4个模型分别创建子系统,然后搭建系统模型。

其中是噪声/干扰。将接入状态递推子系统,得到,再通过Unit Delay反馈,作为下一次计算时的。Unit Delay的初始值设为的初始状态,本例取零向量。
矩阵相乘的Product块需要设置为矩阵乘法,乘法顺序与公式一致。
- 将第5步的系统创建为子系统。

保留、、和四个输出。用于查看实际输出,和送入KF,用于仿真中生成传感器观测。
搭建KF滤波器
观测
- 观测器观测、两个量。因此直接取:
则有:

这一步用原系统的模拟传感器。实际使用时,直接将传感器采集到的送入滤波器即可。滤波器的预测和更新只使用已知输入与观测。
预测
- 估计。

其中是上一时刻更新后的状态,是上一采样周期作用于系统的已知输入。输入端需要延迟一个周期,和状态递推的时序对应。
- 估计。

这里的也是上一时刻更新后的值。注意右侧乘的是的转置。
更新
- 更新。

先求,再求逆,最后按公式顺序相乘。图中的Inverse块对整个矩阵求逆。
- 更新。

先计算预测输出,用观测减去预测输出,再乘以,最后加回预测状态。
- 更新。

其中是单位矩阵,更新后的需要反馈到下一时刻的预测部分。
- 滤波器输出。

虽然只观测两个位移,KF估计的状态仍然有四个分量,两个速度也包含在中。
滤波器
前7个系统打包成子系统,然后搭建滤波器。

和分别经过一个Unit Delay,得到下一次预测所需的和。也经过一个Unit Delay,得到。
状态反馈延时块的初值设为,协方差反馈延时块的初值设为,输入延时块的初值可设为零向量。表示对初始状态的估计,表示这个估计的不确定程度。
前面的公式从开始递推。若模型在启动,可用Switch在首个采样点输出和,之后再输出更新结果,使、和在时间上对应。
最后将滤波器打包成子系统,再将原系统模型和滤波器的相关端口连接起来。

原系统和滤波器使用同一个,但只加在原系统的输入端。滤波器通过描述未知干扰带来的不确定性,不将实际的送入预测公式。
最后整体打包,然后输入相关矩阵和参数

、和使用前面求出的矩阵。其余参数可以先取:
下面给出一组示例噪声参数:
则:
代入后,的第2、4个对角元素均为。这里的描述每个采样点上离散输入干扰的方差,已经包含了中的采样时间,不能在预测公式中再乘一次。
噪声可以用Random Number块生成。的均值设为[0;0]、方差设为[0.01;0.01];的均值设为[0;0]、方差设为[1e-4;1e-4]。采样时间均设为,各通道使用不同的随机种子,并将输出设置为列向量。块中的Variance填写的是方差。
噪声源的实际方差要与、对应。改变输入噪声方差或采样时间后,也需要重新计算。
运行
建议将Scope的采样时间改为0.1s,系统仿真总时间设置为30s。这里的0.1s只用于示波器显示,原系统和KF的采样时间仍然为。

按图中的窗口位置,左侧的示波器是模型的实际输出,包含输入干扰对运动的影响,但没有加入传感器的量测误差。右侧的示波器是观测和滤波结果的输出,每个信号分别包含两个位移通道。
实际上,是从传感器得到的数据,其中包含量测误差。将和与比较,可以查看滤波后是否更接近实际输出。图中的噪声大小以原仿真设置为准,使用上面的示例参数时,具体曲线会有所不同。
不考虑噪声时,恒定输入对应的稳态满足:
解得,,可以用来核对输出最终趋向的位置。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














