無跡卡爾曼濾波 1

2022-04-09 02:52:18 字數 1984 閱讀 9609

無跡卡爾曼濾波(unscented kalman filter)中需要用到無跡變換。維基百科中對unscented transform的描述如下:

為了理解unsecnted transform首先考慮乙個問題:x為服從正態分佈的一維隨機變數,y是隨機變數x的函式分布,那麼隨機變數y的期望和方差是多少呢?

x ∼ n(µ, σ^2 ) , y = sin(x)

根據數理統計中的理論,設連續隨機變數x的概率密度為f(x),則隨機變數y=g(x)的數學期望定義為:

為此需要計算反常積分。也可以先求出y的分布函式,求導計算概率密度,然後再根據數學期望定義計算y的數學期望。

方差計算公式如下,可以看出要求方差需要先算出期望。

有時候反常積分比較難算或者不收斂,那麼求解該問題就變得困難。下面考慮將函式y=sin(x)在x=µ處進行一階泰勒展開,忽略高階項,則有:

那麼這個近似計算的效果怎麼樣呢?可以比較一下:

1

from numpy import

sin,cos,exp,inf,pi

2import

scipy.integrate as integrate

34 mu = 1 #

期望5 sigma = 1 #

標準差67#

y = sin(x)8#

按公式計算e[y]和d[y]

9 f1 = lambda x: sin(x) * exp(-(x-mu)**2/(2*sigma**2)) / ((2*pi)**0.5*sigma)

10 f2 = lambda x: sin(x)**2 * exp(-(x-mu)**2/(2*sigma**2)) / ((2*pi)**0.5*sigma)

11 f_mu, err = integrate.quad( f1, -inf, inf)

12 temp, err = integrate.quad( f2, -inf, inf)

13 f_cov = temp - f_mu**2

1415

print

f_mu, f_cov

1617

#按一階泰勒展開近似計算

18print sin(mu), cos(mu)**2 * sigma**2

期望和方差的計算結果如下:

0.510377951545   0.267674021573

0.841470984808   0.291926581726

第一行為根據公式進行數值積分運算得到的結果,第二行為通過一階泰勒展開近似計算得到的結果,可以看出與理論計算值相比存在一定誤差。

一階泰勒展開實際上是在區域性用乙個線性函式去逼近非線性函式,由此可以聯想到,當該處的函式呈高度非線性時按照一階泰勒展開計算的結果會存在較大的誤差。下圖在某種程度上可以說明這個問題:對函式f(x)=sinx和g(x)=sin2x來說,在µ=pi/4處曲線g(x)明顯比f(x)的非線性程度要大,因此同樣在x=pi/4處進行一階泰勒展開計算隨機變數y=sin(x)和y=sin(2x)的期望,期望誤差的絕對值 g(x)比f(x)要大。

可以看出對非線性問題採用一階泰勒展開存在著一些問題,比如:當高階項無法忽略時會產生較大誤差;函式求導困難;計算結果的精度與函式非線性程度相關等。對於這樣的問題有沒有其它解決辦法呢?(既不用進行泰勒展開,還能保證計算精度). 

聯想到擴充套件卡爾曼濾波(extended kamlan filter)也是採用類似的方法,求取雅可比矩陣,對非線性問題進行近似,因此ekf方法也存在一定缺陷,後面將逐步引出無跡卡爾曼濾波(ukf)法,並於ekf法進行對比。

參考:

卡爾曼 卡爾曼濾波 1

今天主要介紹一下卡爾曼濾波器,所謂卡爾曼濾波器其實是一種最優化遞迴數字處理演算法 optimal recursive data processing algorithm 卡爾曼濾波器應用 既然我們有了測量儀器,這些測量儀器可以目標給出準確測量值。還需要卡爾曼濾波器進行估計嗎?下面解釋一下為什麼需要卡...

對無跡卡爾曼濾波 UKF 和粒子濾波 PF 的理解

對無跡卡爾曼濾波 ukf 的總結 ekf通過在工作點附近進行一階泰勒展開來線性化非線性的運動方程和觀測方程。這樣的線性近似在高度非線性的情況下存在較大誤差。而ukf換了乙個線性化的思路。1 選取2n 1個點 sigma點 n為狀態向量的維度。為每個sigma點分配權重。2 用取樣的點計算出下一狀態的...

卡爾曼 基礎卡爾曼濾波

卡爾曼濾波器是一種基礎 定位演算法。原理非常簡單易懂。核心過程可以用乙個圖說明 本質上就是這兩個狀態過程的迭代,來逐步的準確定位。更新 更具感測器獲取到比較準確的位置資訊後來更新當前的 問位置,也就是糾正 的錯誤。你可能要問為什麼有感測器的資料了還要進行更新?因為在現實世界中感測器是存在很多雜訊干擾...