卡爾曼濾波

2021-08-30 09:02:23 字數 1799 閱讀 6238

汽車在行駛的時候狀態的轉移

p

tp_t

pt​表示的是t時刻的位置

v

tv_t

vt​表示的是t時刻的速度

u

tu_t

ut​表示的是t時刻的加速度

x ^t

−\hat_t^-

x^t−

​表示的是**的t時刻的狀態

一維情況下的高斯分布

二維包含雜訊的資料在x,y上的投影都是高斯分布,即使兩個維度的資料相關,但在座標軸上的投影與線性無關的資料是一致的

協方差表示兩個維度資料的相關性

協方差矩陣對角上的數是方差,反對角線上的數是協方差

上一時刻的協方差矩陣左乘狀態轉移矩陣右乘狀態轉移矩陣的轉置加上雜訊就是當前時刻的協方差矩陣

該公式表示不確定性在各個時刻間的傳遞關係

h觀測矩陣是本身狀態到觀測狀態的轉換關係

v表示觀測的雜訊

r表示觀測的雜訊的協方差矩陣

在x ^t

−\hat_t^-

x^t−

​上加上殘差就是**值

k是卡爾曼係數,表示更加相信觀測模型還是**模型,由於觀察矩陣和狀態矩陣有個能維數不同,這裡也是通過k來進行轉換

更新最佳估計值的雜訊分布,這個是給下一輪迭代用的

在選一輪迭代中由於傳遞雜訊的引入,不確定性又會增大

卡爾曼濾波的完整過程

前面兩個公式通過上一時刻的狀態**當前時刻的狀態,並不是最佳的估計值

後面的公式通過當前的觀測值更新x和p,經過更新後的值就是最佳的觀測值

python實現過程

import numpy as np

import matplotlib.pyplot as plt

#觀測值

z=[i for i in

range(1

,101)]

noise=np.random.normal(size=

100)

z=z+noise

#狀態x=np.matrix([[

0],[

0]])

#狀態協方差矩陣,在經過迭代後x和p就會趨近於真實狀態

p=np.matrix([[

1,0]

,[0,

1]])

#狀態轉移矩陣

f=np.matrix([[

1,1]

,[0,

1]])

#狀態轉移寫法差矩陣

q=np.matrix([[

0.00001,0

],[0

,0.0001]]

)#觀測矩陣

h=np.matrix([1

,0])

#觀測雜訊方差r=1

figure=plt.figure(

)result=

for i in

range

(100):

x_=f*x

p_=f*p*f.t+q

k=p_*h.t/

(h*p_*h.t+r)

x=x_+k*

(z[i]

-h*x_)

p=(np.eye(2)

-k*h)

*p_ plt.plot(x[0,

0],x[1,0

],'b.'

)

卡爾曼 卡爾曼濾波 1

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

卡爾曼 基礎卡爾曼濾波

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

卡爾曼濾波

卡爾曼濾波演算法 首先引入乙個離散控制過程的系統,用乙個線性隨機微分方程來描述 x k a x k 1 b u k w k 系統的測量值 z k h x k v k x k 是k時刻的系統狀態,u k 是k時刻對系統的控制量。a和b是系統引數,對於多模型系統,他們為矩陣。z k 是k時刻的測量值,h...