1. 程式人生 > >卡爾曼濾波總結——KF、EFK、UKF

卡爾曼濾波總結——KF、EFK、UKF

1.用途

現實是我們的處理和測量模型都是非線性的,結果就是一個不規則分佈,KF能夠使用的前提就是所處理的狀態是滿足高斯分佈的,為了解決這個問題,EKF是尋找一個線性函式來近似這個非線性函式,而UKF就是去找一個與真實分佈近似的高斯分佈。

  • KF處理線性模型:

  • EKF 通過雅克比和偏導數近似非線性模型,但是忽略了高階導數:(強非線性系統下誤差大,另一方面Jacobian矩陣的計算複雜)

  • UKF 通過去點的方式近似非線性模型,因為沒有用雅克比和偏導數,讓計算變得更加簡單,同時也沒有忽略高階導數項。

 

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是該函式的所有分量( m 個)對向量 x 的所有分量( n 個)的一階偏導陣列成的矩陣。

函式有 f_1,...,f_m 個分量,於是有 m 行。向量 x 有 x_1,...,x_n 個分量,於是有 n 列。

而最終,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.更新最終值: