卡尔曼滤波器

合集下载

卡尔曼滤波伪代码

卡尔曼滤波伪代码

卡尔曼滤波伪代码卡尔曼滤波是一种在许多领域都有广泛应用的方法,它主要用于处理具有不确定性和噪声的数据,特别是对于那些被估计量具有状态转移属性的系统非常有效。

本文将为读者提供一个基本的卡尔曼滤波器的伪代码。

一、背景介绍卡尔曼滤波器是一种递归滤波器,它利用了过去的和未来的信息来估计一个系统的状态。

它基于一个简单的观察:一个系统的状态,在受到噪声的影响下,其估计值会随着时间的推移而逐渐变差。

卡尔曼滤波器通过最小化这种变差,来提供最优的估计值。

二、伪代码以下是一个基本的卡尔曼滤波器的伪代码:```scss初始化:设定系统状态向量 X(k) = [x, y, z] (其中 x, y, z 是系统的状态)设定系统过程噪声协方差矩阵 P_n设定系统测量噪声协方差矩阵 Q设定卡尔曼增益 K_k设定预测值向量 Y_pred = [x_pred, y_pred, z_pred] (其中x_pred, y_pred, z_pred 是对系统状态的预测)步骤:1. 预测阶段:a. 根据过去的系统状态和过程噪声,计算预测值 Y_pred = F_k*X(k-1) + V_k (其中 F_k 是系统转移矩阵,V_k 是过程噪声)b. 计算预测协方差 P_pred = F_k*P_n*F_k' + Q (P_n 是过程噪声协方差)2. 更新阶段:a. 根据卡尔曼增益 K_k 和测量值 H,计算预测误差协方差R = H'*P_pred*H (R 是测量噪声协方差)b. 使用 K_k = P_pred*H'/(H'*P_pred*H + R),计算卡尔曼增益 K_kc. 根据预测值 Y_pred 和更新后的状态向量 X(k),计算新的估计值 X(k+1) = X_pred + K_k*(Z - H*X_pred) (Z 是测量值)d. 更新协方差 P = (I - K_k*H)*P_pred (I 是单位矩阵)3. 返回新的估计值 X(k+1) 和协方差 P。

卡尔曼滤波 参数

卡尔曼滤波 参数

卡尔曼滤波参数卡尔曼滤波(Kalman Filter)是一种利用系统的动态模型、观测数据和概率统计方法进行状态估计的算法。

它由美国科学家Rudolf E. Kálmán于1960年提出,被广泛应用于航天、航空、导航、机器人等领域。

卡尔曼滤波是一种最优的线性滤波器,它通过考虑系统模型和测量数据的不确定性来估计系统的最优状态。

卡尔曼滤波的基本思想是利用历史数据和本次观测数据,并结合系统模型进行状态估计,并通过不确定性的协方差矩阵来表示估计值的精确度。

卡尔曼滤波的基本公式如下:1. 预测阶段:状态预测:$\hat{x}_{k|k-1} = F\hat{x}_{k-1|k-1} + Bu_{k-1}$协方差预测:$P_{k|k-1} = FP_{k-1|k-1}F^T + Q$2. 更新阶段:测量残差:$y_k = z_k - H\hat{x}_{k|k-1}$协方差残差:$S_k = HP_{k|k-1}H^T + R$卡尔曼增益:$K_k = P_{k|k-1}H^TS_k^{-1}$状态修正:$\hat{x}_{k|k} = \hat{x}_{k|k-1} + K_ky_k$协方差修正:$P_{k|k} = (I - K_kH)P_{k|k-1}$其中,$F$为状态转移矩阵,描述系统状态从上一个时刻到当前时刻的演变关系;$\hat{x}_{k|k-1}$为对状态的先验估计;$B$为控制输入矩阵,描述外部控制对状态的影响;$u_{k-1}$为上一个时刻的控制输入;$P_{k|k-1}$为对状态估计的先验协方差矩阵;$Q$为过程噪声的协方差矩阵,描述系统模型的不确定性;$H$为观测矩阵,描述观测数据和状态之间的关系;$z_k$为当前时刻的观测数据;$R$为观测噪声的协方差矩阵,描述观测数据的不确定性;$S_k$为协方差残差;$K_k$为卡尔曼增益;$y_k$为测量残差,表示观测数据和状态估计之间的差异;$\hat{x}_{k|k}$为对状态的后验估计,是基于观测数据进行修正后的状态估计;$P_{k|k}$为对状态估计的后验协方差矩阵。

倾角卡尔曼滤波-概述说明以及解释

倾角卡尔曼滤波-概述说明以及解释

倾角卡尔曼滤波-概述说明以及解释1.引言1.1 概述倾角卡尔曼滤波是一种用于测量倾角的方法,它结合了倾角测量与卡尔曼滤波原理。

倾角的测量在许多领域中都是非常重要的,例如航空航天、导航系统以及工业自动化等。

倾角的准确测量可以帮助我们判断物体的姿态、稳定性以及对周围环境做出合适的调整。

然而,由于当前倾角传感器本身存在一定的误差和干扰,因此需要采用合适的滤波算法来对倾角进行精确估计和校正。

在这方面,倾角卡尔曼滤波是一种被广泛应用的方法。

倾角卡尔曼滤波算法基于卡尔曼滤波原理,通过对倾角的测量数据进行预测和更新,以得到更加准确、稳定的倾角估计值。

它利用了传感器测量数据的统计特性和系统模型的动态特性,通过权衡预测值和测量值的不确定性来对倾角进行优化估计。

相比其他滤波算法,倾角卡尔曼滤波具有以下优势:首先,它能够有效地抑制传感器数据中的噪声和干扰,并能够适应不同程度的噪声;其次,它具有较高的估计精度和稳定性,能够准确地跟踪目标物体的倾角变化;最后,倾角卡尔曼滤波算法具有较快的收敛速度和较低的计算复杂度,适用于实时应用场景。

未来,倾角卡尔曼滤波在自动化控制、导航系统等领域具有广阔的应用前景。

随着技术的不断进步和创新,倾角卡尔曼滤波算法将更加成熟和精确,为各行各业提供更加可靠和准确的倾角测量方法。

同时,倾角卡尔曼滤波的应用也将得到进一步的拓展,为我们创造更多便利和可能性。

1.2 文章结构文章结构部分的内容如下:文章结构部分的目的是为了向读者介绍本文的大致结构和内容安排。

本文将按照以下方式进行组织和撰写:第一部分是引言,主要包括概述、文章结构和目的三个小节。

在概述部分,会简要介绍倾角卡尔曼滤波的背景和重要性,引起读者的兴趣。

在文章结构部分,将详细说明本文的结构安排,以便读者能够清楚地了解整篇文章的内容。

在目的部分,将明确本文的目标和意义,为读者提供一个阅读的导向。

第二部分是正文,主要包括倾角测量方法和卡尔曼滤波原理两个小节。

非线性卡尔曼滤波器

非线性卡尔曼滤波器
● UT变换的特点是对非线性函数的概率密度分布进行近似,而不是对非线性函数进行近似,即使系统模 型复杂,也不增加算法实现的难度;而且所得到的非线性函数的统计量的准确性可以达到三阶;除此 之外,它不需要计算雅可比矩阵,可以处理不可导非线性函数。
UKF计算步骤:
PF
PF
● 粒子滤波(PF: Particle Filter)的思想基于蒙特卡洛方法(Monte Carlo methods),它是 利用粒子集来表示概率,可以用在任何形式的状态空间模型上。其核心思想是通过从后 验概率中抽取的随机状态粒子来表达其分布,是一种顺序重要性采样法(Sequential Importance Sampling)。简单来说,粒子滤波法是指通过寻找一组在状态空间传播的随 机样本对概率密度函数进行近似,以样本均值代替积分运算,从而获得状态最小方差分 布的过程。这里的样本即指粒子,当样本数量N→∝时可以逼近任何形式的概率密度分布。
EKF
首先围绕滤波值 xˆk 将非线性函数 f , g 展开Taylor级数并
略去二阶及以上项,得到一个近似的线性化模型,然后应用 Kalman滤波完成对其目标的滤波估计等处理。
1.对状态模型的一阶Taylor展示:
xk f
xˆk 1
f xˆk 1
xk 1 xˆk 1 k

f
F
xˆk 1
f1 f1
xˆ1
xˆ2
f xˆk 1
F
f2 xˆ1
f2 xˆ2
fn fn
xˆ1 xˆ2
f1
xˆn
f2 xˆn
fn
xˆn
g1 g1
xˆ1
xˆ2
g xˆk
H
g2 xˆ1
g2 xˆ2

卡尔曼滤波器

卡尔曼滤波器

Ak (xk1 xˆk1 H kCk Ak (xˆk1 xk1) k1 H kCk Akk1 H k vk
(I H kCk ) Ak (xk1 xˆk1) (I H kCk )k1 H k vk
(I H kCk ) Ak (xk1 xˆk1) k1 H kvk
(2.5.17)
精品文档
第二章 维纳滤波和卡尔曼滤波
所以(xˆskuǒ1yǐ) 仅依赖于xk-1,vk-1,而与vk不相关,即 E[(xk1 xˆk1)vkT ] E[vk (xk1 xˆk1)T ] 0 (2.5.18)
E[(xk1 xˆk1)kT1] E[k1(xk1 xˆk1)T ] 0 (2.5.19)
(2.5.24)

U T (Pk'CkT )T Ck Pk'T Ck Pk'
(2.5.25)
精品文档
第二章 维纳滤波和卡尔曼滤波
定义:设A∈Cn×n是Hermite矩阵,如果对任意0≠x∈Cn,都有 xHAx>0,则A是Hermite正定阵; 若xHAx≥0,则A是Hermite半正定阵.
定理(dìnglǐ):设A∈ Cn×n 是Hermite矩阵,则下列条件等价 (1)A是Hermite矩阵,AH=A (2)A的特征值全为正实数 (3)存在矩阵P ∈Cn×n,使得A=PHP
(3) 卡尔曼滤波采取的误差准则仍为估计误差的均方值最小。
精品文档
第二章 维纳滤波和卡尔曼滤波 2.5.1 卡尔曼滤波的状态方程(fāngchéng)和量测方程(fāngchéng)
假设某系统k时刻的状态变量为xk,状态方程(fāngchéng)和量 测方程(fāngchéng)(也称为输出方程(fāngchéng))表示为

simulink中卡尔曼滤波

simulink中卡尔曼滤波

simulink中卡尔曼滤波卡尔曼滤波(Kalman Filter)是一种用于处理线性动态系统的滤波器,通过观测数据和系统模型的融合,可以估计系统的状态。

在Simulink中,我们可以方便地使用卡尔曼滤波器来处理各种实际问题。

卡尔曼滤波的基本原理是通过融合系统模型的预测和观测数据的更新来估计系统的状态。

在卡尔曼滤波中,系统的状态被表示为一个向量,包含了系统的各个变量。

卡尔曼滤波的核心是状态估计,通过观测数据对状态进行修正和更新,从而提高状态的精确度。

在Simulink中使用卡尔曼滤波器可以分为两个主要步骤:建立模型和设置滤波参数。

首先,我们需要建立系统的数学模型,即状态转移方程和观测方程。

状态转移方程描述了系统状态随时间的演变规律,而观测方程描述了观测数据与系统状态之间的关系。

建立好系统模型之后,我们需要设置滤波参数,包括系统的初始状态、系统噪声的方差和观测噪声的方差等。

这些参数的设置对于滤波结果的准确性和稳定性非常重要,需要根据具体的应用场景进行调整。

在Simulink中,我们可以通过Kalman Filter模块来实现卡尔曼滤波器。

该模块需要输入系统的状态转移矩阵、观测矩阵、系统噪声方差、观测噪声方差等参数,并输出滤波后的状态估计值。

在实际应用中,卡尔曼滤波器广泛应用于各个领域,如导航、控制、信号处理等。

例如,在导航系统中,卡尔曼滤波器可以用于融合GPS、惯性测量单元(IMU)等多种传感器数据,提高位置和姿态的精确度。

另一个常见的应用是目标跟踪。

在目标跟踪中,我们需要根据传感器数据来估计目标的状态,如位置、速度等。

卡尔曼滤波器可以通过融合雷达、摄像头等多种传感器数据,提供更准确的目标状态估计结果。

除了基本的卡尔曼滤波器,Simulink还提供了一些变种滤波器,如扩展卡尔曼滤波器(Extended Kalman Filter)和无迹卡尔曼滤波器(Unscented Kalman Filter)。

卡尔曼滤波 振动抑制

卡尔曼滤波 振动抑制

卡尔曼滤波振动抑制
卡尔曼滤波是一种用于估计系统状态的滤波器,可以根据系统的动态模型和测量数据,提供对系统状态的最优估计。

卡尔曼滤波器通过将先验估计与测量数据进行加权处理,得到更准确的后验估计。

在振动抑制方面,卡尔曼滤波可以用于对振动信号进行滤波和抑制,以提高传感器测量的准确性。

通过将振动信号的先验估计与传感器测量进行加权处理,可以抑制振动信号的影响,得到更准确的测量结果。

具体而言,卡尔曼滤波器可以根据振动信号的动态模型和传感器测量的误差特性,对振动信号进行有效的滤波和抑制。

通过适当调整卡尔曼滤波器的参数和权重,可以实现不同程度的振动抑制效果。

卡尔曼滤波在振动抑制领域的应用非常广泛,包括物体定位与导航、声音信号处理、图像处理等。

通过结合传感器测量和卡尔曼滤波技术,可以提高系统对振动信号的鲁棒性和准确性,从而改善系统的性能和可靠性。

卡尔曼滤波 正弦函数 matlab

卡尔曼滤波 正弦函数 matlab

一、介绍卡尔曼滤波卡尔曼滤波是一种用于估计系统状态的线性动态系统的方法。

它是由朗迪·卡尔曼在1960年提出的。

卡尔曼滤波是一种递归滤波器,通过使用过去时刻的状态和测量,以及系统动态的模型,来预测当前时刻的状态。

二、卡尔曼滤波原理1. 状态更新步骤:在状态更新步骤中,卡尔曼滤波使用系统的动态方程来预测下一个时刻的状态。

这一步骤包括预测状态、预测状态协方差和计算卡尔曼增益。

2. 测量更新步骤:在测量更新步骤中,卡尔曼滤波使用最新的测量值来修正之前的预测。

这一步骤包括计算测量预测、计算残差、计算卡尔曼增益和更新状态估计。

三、正弦函数及其在卡尔曼滤波中的应用正弦函数是一种周期性变化的函数,具有良好的数学性质和广泛的应用。

在卡尔曼滤波中,正弦函数可以用于模拟系统的动态特性,对系统的状态进行预测和更新。

四、matlab中的卡尔曼滤波实现matlab是一种用于科学计算和工程应用的高级技术计算语言和交互环境。

在matlab中,可以很方便地实现和应用卡尔曼滤波算法。

1. 使用matlab进行线性动态系统建模在matlab中,可以使用state-space模型来表示线性动态系统的状态空间方程。

通过定义系统的状态方程、测量方程、过程噪声和观测噪声,可以建立系统的状态空间模型。

2. 使用matlab实现卡尔曼滤波算法在matlab中,可以使用kalman滤波器函数来实现卡尔曼滤波算法。

首先需要定义系统的状态转移矩阵、测量矩阵、过程噪声协方差矩阵和观测噪声协方差矩阵。

然后利用kalman滤波器函数,输入系统模型和测量值,即可得到卡尔曼滤波器的输出。

3. 使用matlab对正弦函数进行卡尔曼滤波在matlab中,可以构建一个包含正弦函数的模拟系统,并对其进行卡尔曼滤波。

通过比较卡尔曼滤波的结果和真实正弦函数的值,可以评估卡尔曼滤波算法的性能。

五、结论卡尔曼滤波是一种用于估计系统状态的有效方法,在很多领域都有广泛的应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

卡尔曼滤波器来这里几个月,发现有些问题很多人都很感兴趣。

所以在这里希望能尽自己能力跟大家讨论一些力所能及的算法。

现在先讨论一下卡尔曼滤波器,如果时间和能力允许,我还希望能够写写其他的算法,例如遗传算法,傅立叶变换,数字滤波,神经网络,图像处理等等。

因为这里不能写复杂的数学公式,所以也只能形象的描述。

希望如果哪位是这方面的专家,欢迎讨论更正。

卡尔曼滤波器– Kalman Filter1.什么是卡尔曼滤波器(What is the Kalman Filter?)在学习卡尔曼滤波器之前,首先看看为什么叫“卡尔曼”。

跟其他著名的理论(例如傅立叶变换,泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人!卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,1930年出生于匈牙利首都布达佩斯。

1953,1954年于麻省理工学院分别获得电机工程学士及硕士学位。

1957年于哥伦比亚大学获得博士学位。

我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和1960年发表的论文《A New Approach to Linear Filtering and Prediction Problems》(线性滤波与预测问题的新方法)。

如果对这编论文有兴趣,可以到这里的地址下载:/~welch/media/pdf/Kalman1960.pdf。

简单来说,卡尔曼滤波器是一个“optimal recursive data processing algorithm(最优化自回归数据处理算法)”。

对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。

他的广泛应用已经超过30年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统以及导弹追踪等等。

近年来更被应用于计算机图像处理,例如头脸识别,图像分割,图像边缘检测等等。

2.卡尔曼滤波器的介绍(Introduction to the Kalman Filter)为了可以更加容易的理解卡尔曼滤波器,这里会应用形象的描述方法来讲解,而不是像大多数参考书那样罗列一大堆的数学公式和数学符号。

但是,他的5条公式是其核心内容。

结合现代的计算机,其实卡尔曼的程序相当的简单,只要你理解了他的那5条公式。

在介绍他的5条公式之前,先让我们来根据下面的例子一步一步的探索。

假设我们要研究的对象是一个房间的温度。

根据你的经验判断,这个房间的温度是恒定的,也就是下一分钟的温度等于现在这一分钟的温度(假设我们用一分钟来做时间单位)。

假设你对你的经验不是100%的相信,可能会有上下偏差几度。

我们把这些偏差看成是高斯白噪声(White Gaussian Noise),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配(Gaussian Distribution)。

另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比实际值偏差。

我们也把这些偏差看成是高斯白噪声。

好了,现在对于某一分钟我们有两个有关于该房间的温度值:你根据经验的预测值(系统的预测值)和温度计的值(测量值)。

下面我们要用这两个值结合他们各自的噪声来估算出房间的实际温度值。

假如我们要估算k时刻的是实际温度值。

首先你要根据k-1时刻的温度值,来预测k时刻的温度。

因为你相信温度是恒定的,所以你会得到k时刻的温度预测值是跟k-1时刻一样的,假设是23度,同时该值的高斯噪声的偏差是5度(5是这样得到的:如果k-1时刻估算出的最优温度值的偏差是3,你对自己预测的不确定度是4度,他们平方相加再开方,就是5)。

然后,你从温度计那里得到了k 时刻的温度值,假设是25度,同时该值的偏差是4度。

由于我们用于估算k时刻的实际温度有两个温度值,分别是23度和25度。

究竟实际温度是多少呢?相信自己还是相信温度计呢?究竟相信谁多一点,我们可以用他们的covariance来判断。

因为Kg^2=5^2/(5^2+4^2),所以Kg=0.78,我们可以估算出k时刻的实际温度值是:23+0.78*(25-23)=24.56度。

可以看出,因为温度计的covariance比较小(比较相信温度计),所以估算出的最优温度值偏向温度计的值。

现在我们已经得到k时刻的最优温度值了,下一步就是要进入k+1时刻,进行新的最优估算。

到现在为止,好像还没看到什么自回归的东西出现。

对了,在进入k+1时刻之前,我们还要算出k时刻那个最优值(24.56度)的偏差。

算法如下:((1-Kg)*5^2)^0.5=2.35。

这里的5就是上面的k时刻你预测的那个23度温度值的偏差,得出的2.35就是进入k+1时刻以后k时刻估算出的最优温度值的偏差(对应于上面的3)。

就是这样,卡尔曼滤波器就不断的把covariance递归,从而估算出最优的温度值。

他运行的很快,而且它只保留了上一时刻的covariance。

上面的Kg,就是卡尔曼增益(Kalman Gain)。

他可以随不同的时刻而改变他自己的值,是不是很神奇!下面就要言归正传,讨论真正工程系统上的卡尔曼。

3.卡尔曼滤波器算法(The Kalman Filter Algorithm)在这一部分,我们就来描述源于Dr Kalman 的卡尔曼滤波器。

下面的描述,会涉及一些基本的概念知识,包括概率(Probability),随即变量(Random Variable),高斯或正态分配(Gaussian Distribution)还有State-space Model等等。

但对于卡尔曼滤波器的详细证明,这里不能一一描述。

首先,我们先要引入一个离散控制过程的系统。

该系统可用一个线性随机微分方程(Linear Stochastic Difference equation)来描述:X(k)=A X(k-1)+B U(k)+W(k)再加上系统的测量值:Z(k)=H X(k)+V(k)上两式子中,X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。

A和B 是系统参数,对于多模型系统,他们为矩阵。

Z(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。

W(k)和V(k)分别表示过程和测量的噪声。

他们被假设成高斯白噪声(White Gaussian Noise),他们的covariance 分别是Q,R(这里我们假设他们不随系统状态变化而变化)。

对于满足上面的条件(线性随机微分系统,过程和测量都是高斯白噪声),卡尔曼滤波器是最优的信息处理器。

下面我们来用他们结合他们的covariances 来估算系统的最优化输出(类似上一节那个温度的例子)。

首先我们要利用系统的过程模型,来预测下一状态的系统。

假设现在的系统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态:X(k|k-1)=A X(k-1|k-1)+B U(k) (1)式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。

到现在为止,我们的系统结果已经更新了,可是,对应于X(k|k-1)的covariance 还没更新。

我们用P表示covariance:P(k|k-1)=A P(k-1|k-1) A’+Q (2)式(2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的covariance,A’表示A的转置矩阵,Q是系统过程的covariance。

式子1,2就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。

现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。

结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) (3)其中Kg为卡尔曼增益(Kalman Gain):Kg(k)= P(k|k-1) H’ / (H P(k|k-1) H’ + R) (4)到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。

但是为了要另卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的covariance:P(k|k)=(I-Kg(k) H)P(k|k-1) (5)其中I 为1的矩阵,对于单模型单测量,I=1。

当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。

这样,算法就可以自回归的运算下去。

卡尔曼滤波器的原理基本描述了,式子1,2,3,4和5就是他的5 个基本公式。

根据这5个公式,可以很容易的实现计算机的程序。

下面,我会用程序举一个实际运行的例子。

4.简单例子(A Simple Example)这里我们结合第二第三节,举一个非常简单的例子来说明卡尔曼滤波器的工作过程。

所举的例子是进一步描述第二节的例子,而且还会配以程序模拟结果。

根据第二节的描述,把房间看成一个系统,然后对这个系统建模。

当然,我们见的模型不需要非常地精确。

我们所知道的这个房间的温度是跟前一时刻的温度相同的,所以A=1。

没有控制量,所以U(k)=0。

因此得出:X(k|k-1)=X(k-1|k-1) (6)式子(2)可以改成:P(k|k-1)=P(k-1|k-1) +Q (7)因为测量的值是温度计的,跟温度直接对应,所以H=1。

式子3,4,5可以改成以下:X(k|k)= X(k|k-1)+Kg(k) (Z(k)-X(k|k-1)) (8)Kg(k)= P(k|k-1) / (P(k|k-1) + R) (9)P(k|k)=(1-Kg(k))P(k|k-1) (10)现在我们模拟一组测量值作为输入。

假设房间的真实温度为25度,我模拟了200个测量值,这些测量值的平均值为25度,但是加入了标准偏差为几度的高斯白噪声(在图中为蓝线)。

为了令卡尔曼滤波器开始工作,我们需要告诉卡尔曼两个零时刻的初始值,是X(0|0)和P(0|0)。

他们的值不用太在意,随便给一个就可以了,因为随着卡尔曼的工作,X会逐渐的收敛。

但是对于P,一般不要取0,因为这样可能会令卡尔曼完全相信你给定的X(0|0)是系统最优的,从而使算法不能收敛。

我选了X(0|0)=1度,P(0|0)=10。

该系统的真实温度为25度,图中用黑线表示。

图中红线是卡尔曼滤波器输出的最优化结果(该结果在算法中设置了Q=1e-6,R=1e-1)。

附matlab下面的kalman滤波程序:clearN=200;w(1)=0;w=randn(1,N)x(1)=0;a=1;for k=2:N;x(k)=a*x(k-1)+w(k-1);endV=randn(1,N);q1=std(V);Rvv=q1.^2;q2=std(x);Rxx=q2.^2;q3=std(w);Rww=q3.^2;c=0.2;Y=c*x+V;p(1)=0;s(1)=0;for t=2:N;p1(t)=a.^2*p(t-1)+Rww;b(t)=c*p1(t)/(c.^2*p1(t)+Rvv);s(t)=a*s(t-1)+b(t)*(Y(t)-a*c*s(t-1));p(t)=p1(t)-c*b(t)*p1(t);endt=1:N;plot(t,s,'r',t,Y,'g',t,x,'b');About Wiener Filter and Kalman Filter1. 过滤或滤波- 从当前的和过去的观察值x(n),x(n-1),x(n-2),…估计当前的信号值称为过滤或滤波;2. 预测或外推- 从过去的观察值,估计当前的或将来的信号值称为预测或外推;3. 平滑或内插- 从过去的观察值,估计过去的信号值称为平滑或内插;因此,维纳过滤与卡尔曼过滤又常常被称为最佳线性过滤与预测或线性最优估计。

相关文档
最新文档