logo资料库

ADS1292-呼吸、心率之卡尔曼滤波.pdf

第1页 / 共21页
第2页 / 共21页
第3页 / 共21页
第4页 / 共21页
第5页 / 共21页
第6页 / 共21页
第7页 / 共21页
第8页 / 共21页
资料共21页,剩余部分请下载后查看
卡尔曼滤波简介及其算法实现代码 卡尔曼滤波算法实现代码 ( C, C++分别实现) 卡尔曼滤波器简介 近来发现有些问题很多人都很感兴趣。所以在这里希望能尽自己能力跟大家讨论一些力所 能及的算法。 现在先讨论一下卡尔曼滤波器,如果时间和能力允许,我还希望能够写写其他的算 法,例如遗传算法,傅立叶变换,数字滤波,神经网络,图像处理等等。 因为这里不能写复杂的数学公式, 所以也只能形象的描述。 卡尔曼滤波器 – Kalman Filter 1 、什么是卡尔曼滤波 器(What is the Kalman Filter? ) 在学习卡尔曼滤波器之前, 首先看看为什么叫“卡尔曼”。 跟其他著名的理论 (例如傅立叶变换, 泰勒级数等等)一样,卡尔曼也是一个人的名字,而跟他们不同的是,他是个现代人! 卡尔曼全名 Rudolf Emil Kalman ,匈牙利数学家, 1930 年出生于匈牙利首都布达佩斯。 1954 年于麻省理工学院分别获得电机工程学士及硕士学位。 1953 , 1957 年于哥伦比亚大学获得博士学 1960 年发表的论文《 A New 位。我们现在要学习的卡尔曼滤波器,正是源于他的博士论文和 Approach to Linear Filtering and Prediction Problems 》(线性滤波与预测问题的新方法)。 如果对这编论文有兴趣,可以到这里的地址下载: http://www.cs.unc.edu/~welch/media/pdf/Kalman1960.pdf 。 简单来说,卡尔曼滤波器是一个“ optimal recursive data processing algorithm (最优化自 回归数据处理算法)”。对于解决很大部分的问题,他是最优,效率最高甚至是最有用的。他的 广泛应用已经超过 30 年,包括机器人导航,控制,传感器数据融合甚至在军事方面的雷达系统 以及导弹追踪等等。近年来更被应用于计算机图像处理,例如头脸识别, 图像分割, 图像边缘检 测等等。 2.卡尔曼滤波器的介绍 (Introduction to the Kalman Filter ) 为了可以更加容易的理解卡尔曼滤波器, 考书那样罗列一大堆的数学公式和数学符号。 这里会应用形象的描述方法来讲解, 而不是像大多数参 但是, 他的 5 条公式是其核心内容。 结合现代的计 算机,其实卡尔曼的程序相当的简单,只要你理解了他的那 5 条公式。 在介绍他的 5 条公式之前,先让我们来根据下面的例子一步一步的探索。 假设我们要研究的对象是一个房间的温度。 根据你的经验判断, 这个房间的温度是恒定的, 也就
(假设我们用一分钟来做时间单位) 是下一分钟的温度等于现在这一分钟的温度 经验不是 100%的相信,可能会有上下偏差几度。我们把这些偏差看成是高斯白噪声( 。假设你对你的 White Gaussian Noise ),也就是这些偏差跟前后时间是没有关系的而且符合高斯分配( Distribution )。另外,我们在房间里放一个温度计,但是这个温度计也不准确的,测量值会比 实际值偏差。我们也把这些偏差看成是高斯白噪声。 Gaussian 好了, 现在对于某一分钟我们有两个有关于该房间的温度值: 你根据经验的预测值 (系统的预测 值)和温度计的值(测量值)。下面我们要用这两个值结合他们各自的噪声来估算出房间的实际 温度值。 假如我们要估算 k 时刻的是实际温度值。 首先你要根据 k-1 时刻的温度值, 来预测 k 时刻的温度。 k 时刻的温度预测值是跟 k-1 时刻一样的,假设是 23 因为你相信温度是恒定的,所以你会得到 度,同时该值的高斯噪声的偏差是 偏差是 3,你对自己预测的不确定度是 计那里得到了 k 时刻的温度值,假设是 25 度,同时该值的偏差是 4 度。 5 度( 5 是这样得到的:如果 k-1 时刻估算出的最优温度值的 5)。然后,你从温度 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 卡尔曼滤波器算法 ) 在这一部分,我们就来描述源于 概念知识, 包括概率 ( Probability ),随即变量 ( Random Variable ),高斯或正态分配 ( Gaussian Dr Kalman 的卡尔曼滤波器。下面的描述,会涉及一些基本的 Distribution )还有 State-space Model 等等。但对于卡尔曼滤波器的详细证明,这里不能一一 描述。 首先,我们先要引入一个离散控制过程的系统。该系统可用一个线性随机微分方程( Stochastic Difference equation )来描述: Linear
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) 分别表示过程和测量的噪声。他们被假设成高斯白噪声 Noise) ,他们的 covariance 分别是 Q, R(这里我们假设他们不随系统状态变化而变化)。 (White Gaussian 对于满足上面的条件 ( 线性随机微分系统, 过程和测量都是高斯白噪声 ) ,卡尔曼滤波器是最优的 信息处理器。下面我们来用他们结合他们的 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。 到现在为止,我们的系统结果已经更新了,可是,对应于 们用 P 表示 covariance : X(k|k-1) 的 covariance 还没更新。我 P(k|k-1)=A P(k-1|k- 式 (2) 中, P(k|k-1) 是 X(k|k-1) 对应的 covariance , P(k-1|k-1) 是 X(k-1|k-1) 对应的 1) A ’+Q ……… (2) 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- 其中 Kg 为卡尔曼增益 (Kalman Gain) : Kg(k)= P(k|k- 1) H ’ / (H P(k|k 1)) ……… (3) - 1) H ’ + R) ……… (4) 到现在为止,我们已经得到了 k 状态下最优的估算值 X(k|k) 。但是为了要另卡尔曼滤波器不断 的运行下去直到系统过程结束,我们还要更新 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) 。这样,算法就可以自回归的运算下去。 k 状态下 X(k|k) 的 covariance : 卡尔曼滤波器的原理基本描述了,式子 式,可以很容易的实现计算机的程序。 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) 因为测量的值是温度计的,跟温度直接对应,所以 X(k|k)= X(k|k-1)+Kg(k) (Z(k)-X(k|k- 1)) ……… (8) H=1。式子 3, 4, 5 可以改成以下: Kg(k)= P(k|k-1) / (P(k|k- 1) + R) ……… (9) P(k|k)= ( 1-Kg(k) ) P(k|k- 1) ……… (10) 现在我们模拟一组测量值作为输入。假设房间的真实温度为 些测量值的平均值为 25 度,但是加入了标准偏差为几度的高斯白噪声(在图中为蓝线)。 25 度,我模拟了 200 个测量值,这 为了令卡尔曼滤波器开始工作, 我们需要告诉卡尔曼两个零时刻的初始值, 是 X(0|0) 和 P(0|0) 。 他们的值不用太在意,随便给一个就可以了,因为随着卡尔曼的工作, X 会逐渐的收敛。但是对 于 P,一般不要取 0,因为这样可能会令卡尔曼完全相信你给定的 算法不能收敛。我选了 X(0|0)=1 度, P(0|0)=10 。 X(0|0) 是系统最优的,从而使 该系统的真实温度为 25 度,图中用黑线表示。图中红线是卡尔曼滤波器输出的最优化结果(该 结果在算法中设置了 Q=1e-6 , R=1e-1 )。 最佳线性滤波理论起源于 40 年代美国科学家 Wiener 和前苏联科学家K олмогоров等人的研 究工作, 后人统称为维纳滤波理论。 从理论上说, 维纳滤波的最大缺点是必须用到无限过去的数 据,不适用于实时处理。为了克服这一缺点, 并导出了一套递推估计算法, 后人称之为卡尔曼滤波理论。 卡尔曼滤波是以最小均方误差为估计 60 年代 Kalman 把状态空间模型引入滤波理论, 的最佳准则,来寻求一套递推估计的算法, 其基本思想是: 采用信号与噪声的状态空间模型, 利 用前一时刻地估计值和现时刻的观测值来更新对状态变量的估计, 于实时处理和计算机运算。 求出现时刻的估计值。 它适合 现设线性时变系统的离散状态防城和观测方程为: X(k) = F(k,k- 1) ·X(k-1)+T(k,k- 1) ·U(k-1) Y(k) = H(k) ·X(k)+N(k) 其中 X(k) 和 Y(k) 分别是 k 时刻的状态矢量和观测矢量 F(k,k-1) 为状态转移矩阵
U(k) 为 k 时刻动态噪声 T(k,k-1) 为系统控制矩阵 H(k) 为 k 时刻观测矩阵 N(k) 为 k 时刻观测噪声 则卡尔曼滤波的算法流程为: 预估计 X(k)^= F(k,k- 1) ·X(k -1) 1. 计算预估计协方差矩阵 C(k)^=F(k,k- 1) ×C(k) ×F(k,k -1)'+T(k,k- Q(k) = U(k) ×U(k)' 2. 计算卡尔曼增益矩阵 1) ×Q(k) ×T(k,k -1)' K(k) = C(k)^ ×H(k)' ×[H(k) ×C(k)^ ×H(k)'+R(k)]^( R(k) = N(k) ×N(k)' -1) 3. 更新估计 X(k)~=X(k)^+K(k) ×[Y(k) - H(k) ×X(k)^] 4. 计算更新后估计协防差矩阵 C(k)~ = [I- K(k) ×H(k)] ×C(k)^ ×[I 5. X(k+1) = X(k)~ C(k+1) = C(k)~ 重复以上步骤 - K(k) ×H(k)]'+K(k) ×R(k) ×K(k)'
Kalman Filter 科技 2010-05-29 21:13:49 阅读 90 评论 0 字号:大中小 订阅 Kalman Filter 是一个高效的递归滤波器,它可以实现从一系列的噪声测量中,估 统的状态。广泛应用于包含 Radar、计算机视觉在内的等工程应用领域,在控制理论和控制 系统工程中也是一个非常重要的课题。连同线性均方规划,卡尔曼滤波器可以用于解决 LQG(Linear-quadratic-Gaussian control) 问题。卡尔曼滤波器,线性均方归化及线性均方高斯 控制器,是大部分控制领域基础难题的主要解决途径。 目录 ■ 1 应用实例 ■ 2 命名和发展历史 ■ 3 基本动态系统模型 ■ 4 卡尔曼滤波器 计动态系 4.1 预测 4.2 更新 4.3 不变量 ■ 5 实例 ■ 6 推导 6.1 后验估计协方差矩阵推导 6.2 Kalman 增益推导 6.3 后验误差协方差矩阵简化 ■ 7 信息滤波 ■ 8 非线性滤波器 8.1 扩展 Kalman 滤波 简要描述如下: 假设我们可以获取一个物体的包 8.2 Unscented Kalman filter ■ 9 Kalman-Bucy 滤波 ■ 10 应用 ■ 11 参见 ■ 12 参考文献 ■ 13 外部链接 ■ 1 应用实例 一个简单的应用是估计物体的位置和速度; 含噪声的一系列位置观测数据,我们可以获得此物体的精确速度和位置连续更新信息。 例如,对于雷达来说,我们关心的是跟踪目标,而目标的位置,速度,加速度的测量值是时 刻含有误差的, 卡尔曼滤波器利用目标的动态信息, 去掉噪声影响, 获取目标此刻好的位置 估计 (滤波 ),将来位置估计 (预测 ),也可以是过去位置估计的 (插值或平滑 ) ■ 2 命名和发展历史 这个滤波器以它的发明者 Rudolf.E.Kalman 而命名, 但是在 Kanlman 之前, Thorvald Nicolai Thiele 和 Peter Swerling 已经提出了类似的算法。 Stanley Schmidt 首次实现了 Kalman 滤波 器。在一次对 NASA Ames Research Center 访问中,卡尔曼发现他的方法对于解决阿波罗计 划的轨迹预测很有用,后来阿波罗飞船导航 电脑就使用了这种滤波器。这个滤波器可以追 溯到 Swerling(1958),Kalman(1960),Kalman 和 Bucy(1961) 发表的论文。 这个滤波器有时叫做 Stratonovich-Kalman-Bucy 滤波器。因为更为一般的非线性滤波器最初 由 Ruslan L.Stratonovich 发明,而 Stratonovich-Kalman-Bucy 滤波器只是非线性滤波器的一个 特例。事实上, 1960 年夏季, Kalman 和 Stratonovich 在一个 Moscow 召开的会议中相遇,
Stratonovich 在此以前发表了。 而作为非线性特例的线性滤波方程,早已经由 在控制领域, Kalman 滤波被称为线性二次型估计, 目前 ,卡尔曼滤波已经有很多不同的实现, Bierman 和 Thornton 发明的平方根滤波器 有施密特扩展滤波器、信息滤波器以及一系列的 等,而卡尔曼最初提出的形式现在称为简单卡尔曼滤波器。 也许最常见的卡尔曼滤波器应用 是锁相环,它在收音机、计算机和几乎全部视频或通讯设备中广泛存在。 ■ 3 基本动态系统模型 Kalman 滤波基于时域描述的线性动态系统,它的模型是 立在一个被高斯噪声干扰的线性算子之上。系统的状态可以用一个元素为实数的向量表示。 随着离散时间的增加, 这个线性算子就会作用到当前状态之上, 带入一定的噪声, 同时一些已知的控制信息也会加入。 同时另外一个受噪声干扰的线性算子 将产生这些隐含状态的可见输出。 Kalman 滤波可以被看作为类似隐马尔科夫模型,它们的 显著不同点在于: 隐状态变量的取值空间是一个连续的空间, 隐马尔科夫模型可以描述下一个状态的一个任意分布,这也与应用于 斯噪声模型相反。 Kalman 滤波器方程和隐马尔科夫方程之间有很大的二重性, 滤波方程和隐马尔科夫方程之间二重性参看 为了从一系列的噪声观测中, 应用 Kalman 滤波估计观测过程的内部状态。 我们必须把这个 过程在 Kalman 滤波器的框架下建立模型, Roweis and Ghahramani(1999)[4] 。 这就意味着,对于 而离散状态空间则不是; 另为, Kalman 滤波器中的高 关于 Kalman Markov Chain ,而 Markov Chain 建 产生一个新的状态, 并且会 每一步 k 我们要定义矩阵 、 、 、 、 如下: Kalman Filter 假 设 k 时 刻 的 真 实 状 态 是 从 k-1 时 刻 演 化 而 来 , 符 合 下 式 这里 ■ 是作用在前一状态的状态转移模型 (状态转移矩阵 ) ■ 是作用在控制向量 上的控制输入模型 (输入输出矩阵 ) ■ 是过程噪声,假设是均值为 0 的白噪声,协方差为 则: 在 k 时刻,假设真实状态 的观测, 满足如下公式: 其中 是观测模型 (观测矩阵 ),它把真实状态映射到观测空间, 是观测噪声,假设它 是均值是 0,方差是 的高斯白噪声: Kalman Filter 基本动态系统模型如图 (1)所示, 圆圈代表向量, 方块代表矩阵, 星号代表高斯 噪声,其协方差在右下方标出。 初始状态以及每一时刻的噪声向量 {x0, w1, ..., wk, v1 ... vk} 都为认为是互相独立的。实际 Kalman 模型是设计在噪声过程工 中,真实世界中动态系统并不是严格的符合此模型。但是 作的, 一个近似的符合已经可以使这个滤波器非常有用了, 模型的变种,将在下述中讨论: 更多复杂模型关于 Kalman Filter
图 (1) ■ 4 卡尔曼滤波器 Kalman Filter 是一个递归的估计,即只要获知上一时刻的状态估计和当前状态的观测就可 以计算出当前状态的估计, 不同于其他的估计技术, Kalman 滤波器不需要观测或 /和估计的 历史记录, Kalman Filter 是一个纯粹的时域滤波器,而不像低通滤波器等频域滤波器那样, 需要在频域中设计,然后转换到时域中应用。 下面, 代表已知从 m 到 n-1 包括 m 时刻的观测在 n 时刻的估计值 卡尔曼滤波器的状态由以下两个变量表示: ■ 已知 k 时刻以前时刻观测值, k 时刻的状态估计值 ■ 误差协方差矩阵,度量状态估计的精度程度 Kalman 滤波包括两个阶段:预测和更新;在估计阶段,滤波器应用上一状态的估计做出对 当前状态的估计。 在更新阶段, 滤波器利用在当前状态的观测值优化预测阶段的预测值, 获的一个更精确的当前状态的估计。 以 4.1 预测 状态预测: ■ 估计协方差预测: ■ 4.2 更新 新息或测量余量 ■
分享到:
收藏