1. 程式人生 > >時間序列八: 以NASA之名: 卡爾曼濾波器

時間序列八: 以NASA之名: 卡爾曼濾波器

以NASA之名: 卡爾曼濾波器

'That's one small step for man,one giant leap for mankind.'Neil Alden Armstron

[TOC]

引言

二十世紀的阿波羅登月計劃在人類歷史上是濃墨重彩的一筆, 是人類科學發展極其重要的里程碑. 在此計劃中, 阿姆斯特朗在月球上說出了上面的一句話,是對此計劃最最恰當的註釋. 說起來這個計劃很''簡單'': 送人到月球轉一圈,然後再回來. 這麼一個'簡單'的計劃實施起來得有多困難大家心中早有尺度.而卡爾曼濾波器(Kalman filter)就是其中的功臣.

榮耀騎士

卡爾曼濾波(器)是以其主要貢獻者 Rudolf Emil Kalman

命名的. 這個濾波器做什麼的呢?

現在,時間閃回到 1969年 七月, 當時 Armstrong 正坐在阿波羅11號中,飛向月球. 在此期間掌握飛船的位置及其速度是非常重要的.因為只要偏差超過一定閾值, 飛船的超高速就會將這偏差迅速放大,進而飛船就會偏離預定軌道,最終,極有可能飛向太空就再也回不來了.

那要如何得到飛船在某個時間點的位置與速度呢?

我們知道地面上的科學家在將阿波羅11號發射升空之前肯定會預先計算飛船每個點的位置,或者一定有一個計算精確的計算公式.但, 無論多麼精確的公式都無法包含所有因素,不確定性是無法避免的. 而阿波羅上面肯定會有一套複雜的感測系統來測算飛船的位置與速度, 然而, 感測覺器必然地會有偏差. 也就是說我們會從兩種不同的途徑獲得兩套引數(位置與速度), 這兩套引數一般是不同的,卻又都是不準確的.

我們當然會想到:能不能綜合地考慮這兩套引數,從而獲得一套靠譜的引數,來指導飛船航行? 那這兩個引數如何綜合考慮呢? 在此關鍵時刻,榮耀騎士 — 卡爾曼濾波器登場了.它的出現就是解決此等棘手問題的.

卡爾曼濾波器是如何工作的呢? 我們知道科學家的公式是不會錯的,只不過外界因素干擾,才使其失準的.因此我們以其為基準,用感測器的引數來對基校準. 感測器的引數也有不確定性. 我們的目的是獲得更精準的引數, 故需要在感測引數校正公式引數時,首要任務即是在當前所有資訊面前最小化不確定性.這就是卡爾曼濾波器的作用. 至於它是如何最小化不確定性的,就要涉及公式了, 你確定要上嗎? 如果是,請繼續~

卡爾曼濾波器*

卡爾曼濾波(器)基於線性動態系統,是建立線上性模型上的帶有白噪聲的馬氏鏈. 其與隱馬爾可夫模型(HMM)很相像,最主要的不同點在其隱狀態是連續的,而HMM是離散的.

模型:

{xk=Akxk1+Bkuk+wkyk=Ckxk+vk
其中所有變數均為矩陣(或向量), xk: k 時刻的狀態向量; Ak: 狀態轉移矩陣; Bk: 控制矩陣,uk: 控制向量; 一般,將此控制部分當作確定部分而不包含在模型中,因此上式可簡化為:
{xk=Akxk1+wkyk=Ckxk+vk
yk : k時刻的觀測向量; Ck : 觀測矩陣; wk,vk均為零均值白噪聲,方差分別為 Qk,Rk, 其互不相關,並與初始狀態亦不相關:
wk:E[wk]=0,σ2k=Qk;vk:E[vk]=0,σ2k=Rk;cov[x0,wk]=0;cov(x0,vk)=0;E[wkvTk]=0.
卡爾曼濾波器即是利用遞推方法及狀態方程(式1或式2) 尋找最小均方誤差狀態變數 xk 的估計值 x^k:
x~k=xkx^kminE[x~kx~Tk]x^k
當不考慮白噪聲時:
x^k=Akx^k1y^k=Ckx^k=CkAkx^k1
其中 x^k 為 k 時刻狀態的估計值(由上一時刻狀態經轉移矩陣得到), y^k 為測量值的估計值(由狀態估計值推出), 而 x^k

現在稱為狀態校正後的估計值.

觀測向量的誤差(也即新息):

y~k=yky^k
用觀測值來校正狀態變數:
x^k==Akx^k1+Hk(yky^k)Akx^k1+Hk(ykCkAkx^k1)
其中, Hk

稱為增益矩陣,即為一新息加權矩陣.

新息(Innovation)y~k

即是在 k 時刻之前沒有但在 t 時刻產生的新的新資訊. 用代數的語言即是 新息與過去的資訊是正交的:
E[y~kyTj]=O,1j<k
而且可以容易的推論出, 新息之間也是正交的:
E[y~iy~Tj]=O,ij,and1i,jk
從而可知, 新息y~k

是一個與k 之前時刻的資料不相關,且有白噪聲性質的隨機過程.

校正後的狀態變數估計誤差及其均方值 (Pk

) 還有未經校正的狀態變數估計誤差的均方值 (Pk):
x~kPkPk===xkx^kE[x~kx~Tk]=E[(xkx^k)(xkx^k)T]E[(xkx^k)(xkx^k)T]
卡爾曼濾波器即是最小化 Pk(不確定性) 的方式來得到 Hk ,最終得到 x^k :
minPkHkx^kx~k====xkx^kAkxk1+wk(Akx^k1+Hk(ykCkAkx^k1))Akxk1+wk(Akx^k1+

相關推薦

時間序列: NASA: 濾波器

以NASA之名: 卡爾曼濾波器'That's one small step for man,one giant leap for mankind.' — Neil Alden Armstron[TOC]引言二十世紀的阿波羅登月計劃在人類歷史上是濃墨重彩的一筆, 是人類科學發展

【dataframe】增加時間序列、填充內容、笛積、差分、去除無效值、排序

import pandas as pd import time data = pd.read_csv("Airpassengers.csv") 快速增加時間序列軸 df = pd.DataFrame() df['value'] = data['value'] df['se

對Kalman()濾波器的理解@@zz

參數 http 人的 讓我 noise 發現 實現 程序實現 溫度計 1.簡介(Brief Introduction) 在學習卡爾曼濾波器之前,首先看看為什麽叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的

[Math]理解濾波器 (Understanding Kalman Filter)

想要 文章 開始 and 結果 update tla 多少 play 1. 卡爾曼濾波器介紹 卡爾曼濾波器的介紹, 見 Wiki 這篇文章主要是翻譯了 Understanding the Basis of the Kalman Filter Via a Simple

理解濾波器

核心要點 假設系統噪聲和測量噪聲符合高斯分佈,協方差代表不確定度。 兩個高斯分佈的乘積依然是高斯分佈,代表了兩個分佈的融合 所以kalman的核心思想即:綜合通過前一時刻得到的預測資訊(第一個高斯分佈)和當期感測器測量的資訊(第二個高斯分佈),融合兩個高斯分佈得到當

詳解濾波器

詳解卡爾曼濾波原理   在網上看了不少與卡爾曼濾波相關的部落格、論文,要麼是隻談理論、缺乏感性,或者有感性認識,缺乏理論推導。能兼顧二者的少之又少,直到我看到了國外的一篇博文,真的驚豔到我了,不得不佩服作者這種細緻入微的精神,翻譯過來跟大家分享一下,原文連結:http:

濾波器和優化的本質理解

假設我們有兩個未知量想要知道他們的值。最直接的方法是找到兩個和這兩個未知量相關的方程,求解方程組就能得到他們的值。 但如果我們只能得到一個方程呢?也許你會說這個問題無解。但是換個角度想,雖然只有一個方程,但也不沒有好,至少我們還是多了一些關於這兩個位置量的資訊。 很多情況

濾波器的兩種python實現方法:(1)opencv自帶的cv2.KalmanFilter (2)pykalman演算法庫

預備知識: 卡爾曼濾波的理論知識: 具體的理論知識可參考以下博文,非常感謝相關博主的貢獻: 以一個滑鼠追蹤的任務分析兩種卡爾曼濾波的實現方式: (一)opencv自帶的cv2.KalmanFilter 該卡爾曼濾波器演算法分為兩個階段: 預測

濾波器 Matlab實現

卡爾曼濾波器是一個 ”optimal recursive data processing algorithm”(最優化自迴歸資料處理演算法) 先說一個例子: 假設我們要研究的物件是一個房間的溫度。 1.根據經驗,溫度是恆定的,即上一分鐘的溫度等於現在這一分鐘的

濾波器的理解,C程式碼實現,和opencv裡面KalmanFilter 的使用

背景: 卡爾曼濾波是一種高效率的遞迴濾波器(自迴歸濾波器), 它能夠從一系列的不完全及包含噪聲的測量中,估計動態系統的狀態。卡爾曼濾波的一個典型例項是從一組有限的,包含噪聲的,對物體位置的觀察序列(可能有偏差)預測出物體的位置的座標及速度。 這種濾波方法以它的發明者

濾波器、擴充套件濾波器、無向濾波器的詳細推導

這段時間做軸承故障診斷和預測的時候,需要一個針對已經獲取了特徵向量的工具來對軸承故障狀態進行估計和預測。卡爾曼濾波器可以實現對過去、當前和未來目標位置的估計,所以想通過卡爾曼濾波器的設計思路找到一些靈感。雖然最後發現:卡爾曼濾波器中的狀態量是有具體的物理含義的物

無人駕駛工程師第二期——P1擴充套件濾波器

這次記錄的是優達學城的無人駕駛工程師第二期的第一個專案,Extended Kalman Filters,這個專案和之前第一期的P3專案比較像,也是需要程式碼和一個程式之間連結,所以一開始的安裝步驟就會比較麻煩,文中也有說在linux上執行會比較容易,所以這篇文章就是介紹我是如

濾波器推導與解析 - 案例與圖片

卡爾曼濾波器推導與解析 - 案例與圖片 - 李小銘 - 部落格園 李小銘

濾波器(Kalman Filter) 理解

卡爾曼濾波器 1 簡介(Brief Introduction) 在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人! 卡爾曼全名Rudolf

濾波器跟蹤

1. 什麼是卡爾曼濾波器(What is the Kalman Filter?)在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人!卡爾曼全名Rudolf Emil

機器學習演算法原理與實踐(三)、濾波器演算法淺析及matlab實戰

卡爾曼濾波器是一種利用線性系統狀態方程,通過系統輸入輸出觀測資料,對系統狀態進行最優估計的演算法。而且由於觀測包含系統的噪聲和干擾的影響,所以最優估計也可看做是濾波過程。 卡爾曼濾波器的核心

濾波器KALMAN,附C程式碼

1.簡介(Brief Introduction)在學習卡爾曼濾波器之前,首先看看為什麼叫“卡爾曼”。跟其他著名的理論(例如傅立葉變換,泰勒級數等等)一樣,卡爾曼也是一個人的名字,而跟他們不同的是,他是個現代人!卡爾曼全名Rudolf Emil Kalman,匈牙利數學家,1930年出生於匈牙利首都布達佩斯。1

濾波器通俗解釋 – Kalman Filter

很精妙的一篇關於卡爾曼濾波的文章。我無法找到原始出處,如果你知道就q我知吧。我看到的連結多半是源自cdsn,而csdn的引用者又把來源指向了。可惜我打不開vchelp演算法論壇的網站。接下來轉貼過來。 1. 什麼是卡爾曼濾波器(What is the Kalman Fil

Python (kalmanFilter)濾波器

卡爾曼濾波簡介 卡爾曼在利用觀測資料估計系統狀態時,可以濾除觀測時存在的噪聲,因此這一過程也被看作是一個濾波過程。 跟蹤滑鼠 綠色為測量到的滑鼠座標(位置) 紅色為卡爾曼濾波器預測的滑鼠座標(位置) # -*- coding: UTF-8 -*- # ! /usr/

濾波器(1)

一般我們程式設計中,常用的數學模型都是離散的,首先看一下離散的狀態空間表示式:上面這張表格來自百度百科“狀態空間”下面看一個實際問題:《卡爾曼濾波器的原理以及在matlab中的實現》https://www.bilibili.com/video/av10788247?from=