添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

卡尔曼 滤波 建立在 线性代数 隐马尔可夫模型 (hidden Markov model)上。其基本动态系统可以用一个 马尔可夫链 表示,该马尔可夫链建立在一个被高斯 噪声 (即正态分布的噪声)干扰的 线性算子 上的。系统的 状态 可以用一个元素为实数的 向量 表示。随着 离散时间 的每一个增加,这个 线性算子 就会作用在当前 状态 上,产生一个新的状态,并也会带入一些噪声,同时系统的一些已知的控制器的控制信息也会被加入。同时,另一个受噪声干扰的线性算子产生出这些隐含状态的可见输出。

为了从一系列有噪声的观察数据中用卡尔曼 滤波 器估计出被观察过程的内部状态,我们必须把这个过程在卡尔曼 滤波 的框架下建立模型。也就是说对于每一步 k ,定义 矩阵 F k , H k , Q k , R k ,有时也需要定义 B k ,如下。

初始状态以及每一时刻的噪声{ x 0 , w 1 , ..., w k , v 1 ... v k }都认为是互相 独立 的。

实际上,很多真实世界的动态系统都并不确切的符合这个模型;但是由于卡尔曼 滤波 器被设计在有噪声的情况下工作,一个近似的符合已经可以使这个 滤波 器非常有用了。更多其它更复杂的卡尔曼 滤波 器的变种,在下边讨论中有描述。

卡尔曼滤波器

卡尔曼 滤波 是一种 递归 的估计,即只要获知上一时刻状态的估计值以及当前状态的观测值就可以计算出当前状态的估计值,因此不需要记录观测或者估计的历史信息。卡尔曼 滤波 器与大多数 滤波 器不同之處,在於它是一种纯粹的 时域 滤波 器,它不需要像 低通滤波器 频域 滤波 器那样,需要在频域设计再转换到时域实现。

卡尔曼 滤波 器的状态由以下两个变量表示:

  • \hat{\textbf{x}}_{k|k} ,在时刻 k 的状态的估计;
  • \textbf{P}_{k|k} ,误差相关矩阵,度量估计值的精确程度。

卡尔曼 滤波 器的操作包括两个阶段: 预测 更新 。在预测阶段, 滤波 器使用上一状态的估计,做出对当前状态的估计。在更新阶段, 滤波 器利用对当前状态的观测值优化在预测阶段获得的预测值,以获得一个更精确的新估计值。

\hat{\textbf{x}}_{k|k-1} = \textbf{F}_{k}\hat{\textbf{x}}_{k-1|k-1} + \textbf{B}_{k} \textbf{u}_{k} (预测状态) \textbf{P}_{k|k-1} =  \textbf{F}_{k} \textbf{P}_{k-1|k-1} \textbf{F}_{k}^{T} + \textbf{Q}_{k} (预测估计协方差矩阵)

使用上述公式计算 \textbf{P}_{k|k} 仅在最优卡尔曼增益的时候有效。使用其他增益的话,公式要复杂一些,请参见 推导

不变量(Invariant)

如果模型准确,而且 \hat{\textbf{x}}_{0|0}\textbf{P}_{0|0} 的值准确的反映了最初状态的分布,那么以下不变量就保持不变:所有估计的误差均值为零

协方差矩阵 准确的反映了估计的协方差:

请注意,其中 \textrm{E}[\textbf{a}] 表示 {a} 的期望值, \textrm{cov}(\textbf{a}) = \textrm{E}[\textbf{a}\textbf{a}^T]

考虑在无摩擦的、无限长的直轨道上的一辆车。该车最初停在位置0处,但时不时受到随机的冲击。我们 每隔 △t秒即测量车的位置,但是这个测量是非精确的;我们想建立一个关于其位置以及 速度 的模型。我们来看如何推导出这个模型以及如何从这个模型得到卡尔曼 滤波 器。

因为车上无动力,所以我们可以忽略掉 B k u k 。由于 F H R Q 是常数,所以时间下标可以去掉。

车的位置以及速度(或者更加一般的,一个粒子的运动状态)可以被线性状态空间描述如下:

使用不变量 P k | k -1 以及 R k 的定义这一项可以写作 : \textbf{P}_{k|k}=(I - \textbf{K}_k \textbf{H}_{k}) \textbf{P}_{k|k-1}(I - \textbf{K}_k \textbf{H}_{k})^T +\textbf{K}_k \textbf{R}_k \textbf{K}_k^T 这一公式对于任何卡尔曼增益 K k 都成立。如果 K k 是最优卡尔曼增益,则进一步简化,請見下文。

最优卡尔曼增益的推导

卡尔曼 滤波 器是一个 最小均方误差 估计器,后验状态误差估计(英文: a posteriori state estimate)是

  1. # -*- coding=utf-8 -*-
  2. # Kalman filter example demo in Python
  3. # A Python implementation of the example given in pages 11-15 of "An
  4. # Introduction to the Kalman Filter" by Greg Welch and Gary Bishop,
  5. # University of North Carolina at Chapel Hill, Department of Computer
  6. # Science, TR 95-041,
  7. # http://www.cs.unc.edu/~welch/kalman/kalmanIntro.html
  8. # by Andrew D. Straw
  9. #coding:utf-8
  10. import numpy
  11. import pylab
  12. #这里是假设A=1,H=1的情况
  13. # 参数初始化
  14. n_iter = 50
  15. sz = (n_iter,) # size of array
  16. x = - 0.37727 # truth value (typo in example at top of p. 13 calls this z)真实值
  17. z = numpy.random.normal(x, 0.1 ,size=sz) # observations (normal about x, sigma=0.1)观测值
  18. Q = 1e - 5 # process variance
  19. # 分配数组空间
  20. xhat=numpy.zeros(sz) # a posteri estimate of x 滤波估计值
  21. P=numpy.zeros(sz) # a posteri error estimate滤波估计协方差矩阵
  22. xhatminus=numpy.zeros(sz) # a priori estimate of x 估计值
  23. Pminus=numpy.zeros(sz) # a priori error estimate估计协方差矩阵
  24. K=numpy.zeros(sz) # gain or blending factor卡尔曼增益
  25. R = 0.1 ** 2 # estimate of measurement variance, change to see effect
  26. # intial guesses
  27. xhat[ 0 ] = 0.0
  28. P[ 0 ] = 1.0
  29. for k in range( 1 ,n_iter):
  30. # 预测
  31. xhatminus[k] = xhat[k- 1 ] #X(k|k-1) = AX(k-1|k-1) + BU(k) + W(k),A=1,BU(k) = 0
  32. Pminus[k] = P[k- 1 ]+Q #P(k|k-1) = AP(k-1|k-1)A' + Q(k) ,A=1
  33. # 更新
  34. K[k] = Pminus[k]/( Pminus[k]+R ) #Kg(k)=P(k|k-1)H'/[HP(k|k-1)H' + R],H=1
  35. xhat[k] = xhatminus[k]+K[k]*(z[k]-xhatminus[k]) #X(k|k) = X(k|k-1) + Kg(k)[Z(k) - HX(k|k-1)], H=1
  36. P[k] = ( 1 -K[k])*Pminus[k] #P(k|k) = (1 - Kg(k)H)P(k|k-1), H=1
  37. pylab.figure()
  38. pylab.plot(z, 'k+' ,label= 'noisy measurements' ) #观测值
  39. pylab.plot(xhat, 'b-' ,label= 'a posteri estimate' ) #滤波估计值
  40. pylab.axhline(x,color= 'g' ,label= 'truth value' ) #真实值
  41. pylab.legend()
  42. pylab.xlabel( 'Iteration' )
  43. pylab.ylabel( 'Voltage' )
  44. pylab.figure()
  45. valid_iter = range( 1 ,n_iter) # Pminus not valid at step 0
  46. pylab.plot(valid_iter,Pminus[valid_iter],label= 'a priori error estimate' )
  47. pylab.xlabel( 'Iteration' )
  48. pylab.ylabel( '$(Voltage)^2$' )
  49. pylab.setp(pylab.gca(), 'ylim' ,[ 0 ,. 01 ])
  50. pylab.show()
文章来源维基百科卡尔曼滤波是一种高效率的递归滤波器(自回归滤波器),它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,通过对物体位置的观察序列(可能有偏差)预测出物体的位置的坐标及速度。在很多工程应用(如雷达、计算机视觉)中都可以找到它的身影。同时,卡尔曼滤波也是控制理论以及控制系统工程中的一个重要课题。例如,对于雷达来说,人们感兴趣...
无论再深奥的数学理论,数学建模最终产物是:数学公式和流程步骤。这是程序能理解和执行的数学模型。 我们在数学建模的生产活动中,数学模型经常需要修改和调参,甚至推到重新建模,面对修改代码繁琐代价,痛点是:如何将数学建模活动独立在代码之外。 本文将以前述的机车系统经验为基础并加以提炼,阐述可配置化数学建模。
1.预备概念 (1) 滤波 我们在模电数电中学的 滤波 滤波 器(Filter)等概念和这里的 滤波 可以说本质概念是统一的,都是去除或者减少信号(状态)中的干扰量,最大可能得得到想要的部分,逼近真实值。 滤波 器是为了筛选出来希望得到的频率信号,这里的 滤波 也是为了减少噪声的干扰,是测量信号更接近实际信号。 (2)噪声 无用信号也叫作噪声,在通信领域中,某些频段的信号我们不想要,对于我们就是噪声;在传感器测量数据时候,无用信号表现为幅度上的干扰。 噪声的种类取决于其功率谱密度,相关知 P^{\prime}=F P F^{T}+Q P′=FPFT+Q 其中,x′x^{\prime}x′ 表示;FFF 表示;xxx 表示;BBB 表示;UUU 表示;P′P^{\prime}P′ 表示;PPP 表示;QQQ 表示。更新公式如下: K=P′HT(HP′HT+R)−1 K=P^{\prime} H^{T}\left(H P^{\prime} H^{T}+
引用知乎中的一段话:“PID和 滤波 乃是控制工程师的两大法宝。几十年过去了 滤波 在理论研究上仍然保持着活跃,研究方向包括各种非线性的,噪声统计参数未知的自适应和鲁棒 滤波 。更重要的是现在计算机的发展将其推向了实用化,包括各种位姿估计,多传感器信息融合,车辆导航等。” 这足以看出 滤波 在控制领域中的重要性,而本篇博客就来简要地分析一下 滤波 器的基本 原理 滤波 器 首先,我们可以用...
滤波 工作 原理 详解 网上看到有不少的博客翻译 How a Kalman filter works, in pictures, 这篇文章中非常有趣的解释了 滤波 ,. 但是目前很多翻译的文章中公式显示凌乱, 因此我决定重新整理一下格式. 我必须告诉你关于 滤波 器的事情,因为它的功能非常惊人。 令人意外的是,几乎没有软件工程师和科学家真正理解 滤波 器,这让我很难过,因为它是一个在存在不确定性的情况下组合信息的通用而强大的工具。有时,它提取准确信息的能力似乎很神奇——如果听起来我说得太多了,那么
滤波 算法 是一种线性,递归的估值方法,在多领域,尤其在导航领域得到了非常广泛的应用.本文利用MATLAB仿真软件实现 滤波 器.通过 实例 来验证基于MATLAB设计的 滤波 器的 滤波 效果良好,观察噪声越小,系统噪声越大,递推次数越多, 滤波 器校正作用越好.​ 3 仿真结果 [1]张宪, and 崔岩. " 滤波 与维纳 滤波 在运动模糊图像恢复中的应用." 电脑开发与应用 08(2008):19-20.部分理论引用网络文献,若有侵权联系博主删除。...
滤波 是一种常用的估计和 滤波 算法 ,被广泛应用于信号处理、控制系统和自动化等领域。语音增强是一项旨在改善语音信号质量的技术,其中 滤波 也被用作语音增强的一个重要工具。 Matlab作为一种广泛使用的高级数学软件,提供了许多实用的工具箱,包括用于语音分析的信号处理工具箱和用于 滤波 的控制系统工具箱。可以使用intitle: 滤波 语音增强matlab等关键词来搜索与此相关的教程、代码实现和研究论文。 语音增强的目标是消除噪声并提高语音信号的可听性和清晰度。 滤波 算法 可以对语音信号进行预测和估计,根据噪声模型进行 滤波 处理,以消除背景噪声和增强语音信号的质量。在Matlab中使用 滤波 实现语音增强需要了解语音信号处理和 滤波 算法 原理 ,以及如何使用Matlab编写并执行相关的程序。 总之,使用intitle: 滤波 语音增强matlab等关键词来搜索相关的资源,可以获得更深入的了解和实践指导,进一步提高语音增强的技术水平和应用能力。