1.用途
現實是我們的處理和測量模型都是非線性的,結果就是一個不規則分布,KF能夠使用的前提就是所處理的狀態是滿足高斯分布的,為了解決這個問題,EKF是尋找一個線性函數來近似這個非線性函數,而UKF就是去找一個與真實分布近似的高斯分布。
- KF處理線性模型:
- EKF 通過雅克比和偏導數近似非線性模型,但是忽略了高階導數:(強非線性系統下誤差大,另一方面Jacobian矩陣的計算復雜)
- UKF 通過去點的方式近似非線性模型,因為沒有用雅克比和偏導數,讓計算變得更加簡單,同時也沒有忽略高階導數項。
- PF不一定限於高斯分布
2.KF
卡爾曼濾波是一種高效率的遞歸濾波器(自回歸濾波器), 它能夠從一系列的不完全包含噪聲的測量(英文:measurement)中,估計動態系統的狀態,然而簡單的卡爾曼濾波必須應用在符合高斯分布的系統中。
百度百科是這樣說的,也就是說卡爾曼濾波第一是遞歸濾波,其次KF用於線性系統。
但經過研究和改進,出現了很多卡爾曼,如EKF(extended kalman filter)擴展卡爾曼,UKF(Unscented Kalman Filter)無跡卡爾曼等等。
而我們就來研究EKF,而EKF的中心思想就是將非線性系統線形化后再做KF處理。
狀態方程
當我們從最簡單的系統開始,我們假定k時刻的系統狀態與k-1時刻有關,於是我們可以得到方程:
其中a為常量,但是當系統內部有噪聲,我們稱為過程噪聲 ,計為w。所以方程可以寫成:
而我們實際觀測的時候會出現觀測噪聲,於是我們將觀測值計為Z,觀測噪聲為v,那我們可以把k時刻的觀測值與系統狀態值寫成方程:
於是最簡單的系統狀態方程就有啦。
卡爾曼濾波算法核心思想在於預測+測量反饋,它由兩部分組成,第一部分是 線性系統狀態預測方程,第二部分是 線性系統觀測方程。
這里系統的預測時候,我們要將通過系統狀態方程計算的預測值作為先驗信息,之后在觀測部分在重新更新這個信息。
回頭說狀態的預測,我們引入一個符號 ^在相應的變量上表示該變量是預計值。再說一個新概念:新息。一個時間序列{X(t)}里,根據歷史數據的預測值,新息是真實值減去預測值。
注:上有波浪線表示新息,也有用字母e表示的;上面尖的是預測值;無標注為真實值
我們給出一個優化過的預測值,新預測值 = 上一輪預測值(先驗) + 權重 × 新息,即:
那下一個問題就是權重g是怎么計算得出的呢?答案是間接的從噪聲里求得的。當我們將估計協方差叫做p,而傳感器的協方差為r,我們通過這兩個值計算權重。
既然獲得了g,我們下一步將先驗信息輸入到上面的兩個方程中獲得后驗預測值,也就是我們的輸出值。
那整個計算步驟和過程就應該是這樣的:
先預測后更新。具體計算過程和曲線生成可以參考levys教程的Part7。
之后我們再說更復雜一點的系統,系統地狀態方程引入了輸入量U。換句話說有一個U會時刻影響系統狀態量。
而觀測到的觀測值為
那我們新的計算方法就需要引入這兩個新的變量,
同樣是預測,更新,預測下一時刻,更新的計算方式。
而當系統用矩陣的方式寫的狀態方程,就需要以矩陣的方式計算。相同的數學公式及計算方法。如P的計算,
又如G,
還有P的更新,
這樣的話,我們的系統方程及計算步驟方式如下
需要注意的是我們使用的R是對測量誤差v的協方差,當我們在引入一個Q代表過程噪聲引起的誤差時,可以使系統表現更好,即使Q很小,
2.1 非線性系統之EKF
那如果系統是非線性的呢?我們如果將觀測值Z計做X的非線性函數組成的,我們的模型可以改成。
而我們的中心思想是將其線性化,如果我們使用函數一階導為C來計算G和P。
最后系統復雜到這樣的程度,
那我們就引入雅科比矩陣,雅各比矩陣就是方程矩陣對每一個變量的偏導數。
則在向量分析中,雅可比矩陣Jacobian matrix是該函數的所有分量( 個)對向量
的所有分量(
個)的一階偏導數組成的矩陣。
函數有 個分量,於是有
行。向量
有
個分量,於是有
列。
而最終,F為f方程的雅可比,H為h方程的雅可比。最終計算如下:
到這里簡單的EKF就已經完成基本介紹啦。
3.UKF
3.1 模型
z(k+1)=h(x(k+1))
3.2 預測
1.預測sigma point(k+1步的分布點)
2.預測均值(Xpred)和方差(Ppred)
其中:
3.預測測量值
z(k+1)i=h(x(k+1)i)
從而zpred:
3.3更新
1.更新卡爾曼系數
其中:
2.更新最終值: