小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

卡爾曼濾波的原理、理解與仿真

 goandlove 2019-08-12

卡爾曼濾波器是一種利用線性系統(tǒng)狀態(tài)方程,通過系統(tǒng)輸入輸出觀測數(shù)據(jù),對系統(tǒng)狀態(tài)進行最優(yōu)估計的算法。而且由于觀測包含系統(tǒng)的噪聲和干擾的影響,所以最優(yōu)估計也可看做是濾波過程。

1 卡爾曼濾波的原理與理解

1.1 預(yù)測

假設(shè)有一輛小車,其在t時刻的位置為??(假設(shè)其在一維直線上運動,則位置可以用數(shù)軸上的點表示),速度為??。

因此在t時刻小車的狀態(tài)可用向量表示為??。

但是我們并沒有捕捉到一切信息,可能存在外部因素會對系統(tǒng)進行控制,帶來一些與系統(tǒng)自身狀態(tài)沒有相關(guān)性的改變。如汽車司機可能會操縱油門,讓汽車加速。

假設(shè)由于油門的設(shè)置或控制命令,我們知道了期望的加速度為??(加速度理解為外部的控制量),則可由運動學(xué)公式從t-1時刻推出其在t時刻的速度與位置如下:

進一步的可以將其寫成向量形式:

即:

則通過變量代換可以得到狀態(tài)轉(zhuǎn)移公式:

其中:

矩陣??為狀態(tài)轉(zhuǎn)移矩陣,表示如何從上一狀態(tài)來推測當(dāng)前時刻的狀態(tài);

?為控制矩陣,表示控制量??如何作用于當(dāng)前矩陣;

?有頂帽子,表示只是估計值,并不是最優(yōu)的。

到這里,我們已經(jīng)得到了t時刻的狀態(tài)預(yù)測,但這里只有狀態(tài)預(yù)測的均值(即)。我們是基于高斯分布來建立狀態(tài)變量的,因此還需要協(xié)方差。(即一個多維高斯分布由均值和協(xié)方差決定)

假設(shè)我們用 P 來表示狀態(tài)協(xié)方差,即

那么加入狀態(tài)轉(zhuǎn)換矩陣F后有

協(xié)方差矩陣的性質(zhì)有:cov(Ax,Bx)=A*cov(x,x)*B'

如果這些狀態(tài)量是基于系統(tǒng)自身的屬性或者已知的外部控制作用來變化的,則不會出現(xiàn)什么問題。但是,如果存在外部未知的干擾呢?

例如,輪子可能會打滑,或者路面上的坡會讓車減速。這樣的話我們就不能繼續(xù)對這些狀態(tài)進行跟蹤,如果沒有把這些外部干擾考慮在內(nèi),我們的預(yù)測就會出現(xiàn)偏差。

  在每次預(yù)測之后,我們可以添加一些新的不確定性來建立這種與“外界”(即我們沒有跟蹤的干擾)之間的不確定性模型。我們將這些沒有被跟蹤的干擾當(dāng)作協(xié)方差為??的噪聲來處理。

狀態(tài)協(xié)方差的預(yù)測為:

從而,我們得到了狀態(tài)均值和協(xié)方差的預(yù)測,即

現(xiàn)在我們得到上面的兩個公式,運用這兩個公式能夠?qū)ΜF(xiàn)在狀態(tài)進行預(yù)測。但是預(yù)測結(jié)果不可能完全正確嘛,肯定有誤差。而恰好,我們可能會有多個傳感器(如測距雷達)來測量系統(tǒng)當(dāng)前的狀態(tài),哪個傳感器具體測量的是哪個狀態(tài)變量并不重要,也許一個是測量位置,一個是測量速度,每個傳感器間接地告訴了我們一些狀態(tài)信息,因此我們可以用測量來修正(更新)預(yù)測。

1.2 更新

傳感器讀取的數(shù)據(jù)的單位和尺度有可能與我們要跟蹤的狀態(tài)的單位和尺度不一樣,我們用H來表示傳感器的數(shù)據(jù)。

我們可以計算出傳感器讀數(shù)的分布,用之前的表示方法如下式所示

其中H為觀測矩陣,v為觀測噪聲。

卡爾曼濾波的一大優(yōu)點就是能處理傳感器噪聲,換句話說,我們的傳感器或多或少都有點不可靠,并且原始估計中的每個狀態(tài)可以和一定范圍內(nèi)的傳感器讀數(shù)對應(yīng)起來。

從測量到的傳感器數(shù)據(jù)中,我們大致能猜到系統(tǒng)當(dāng)前處于什么狀態(tài)。但是由于存在不確定性,某些狀態(tài)可能比我們得到的讀數(shù)更接近真實狀態(tài)。

我們將這種不確定性(例如:傳感器噪聲)用協(xié)方差??表示,該分布的均值就是我們讀取到的傳感器數(shù)據(jù),稱之為??。

現(xiàn)在我們有了兩個高斯分布,一個是在預(yù)測值附近,一個是在傳感器讀數(shù)附近。我們必須在'預(yù)測值'和'傳感器測量值'之間找到最優(yōu)解。我們只需將這兩個高斯分布(前一狀態(tài)的預(yù)測以及傳感器的測量)相乘就可以了。

以兩個一維高斯分布為例,其融合高斯分布為:

其中的K稱為卡爾曼增益。

帶入狀態(tài)預(yù)測和傳感器測量協(xié)方差可得到:

K的作用:

(1)K權(quán)衡預(yù)測協(xié)方差P和觀察協(xié)方差矩陣R那個更加重要。相信預(yù)測,則殘差的權(quán)重?。幌嘈庞^察,則殘差權(quán)重大(由 K 的表達式可推出這個結(jié)論)。

(2)將殘差的表現(xiàn)形式從觀察域轉(zhuǎn)換到狀態(tài)域(殘差與一個標(biāo)量,通過K轉(zhuǎn)換為向量),由狀態(tài) X的更新公式可得到該結(jié)論

利用卡爾曼增益,我們可以進行更新操作,即在預(yù)測的基礎(chǔ)上,把測量也考慮進去,可以得到:

綜上,我們就得到了卡爾曼濾波的全部方程,重述如下:

2 示例仿真

(1)假設(shè):

傳感器從t=0時刻開始,每秒采集一個位置數(shù)據(jù),共采集到100個數(shù)據(jù)。且傳感器的測量伴隨著均值為0方差為1的高斯噪聲 Z=(1:2:200)+randn(1,100);

傳感器提供的觀測矩陣為 H=[1,0]

傳感器的觀測噪聲協(xié)方差矩陣為 R=1

初始狀態(tài)為 X=[0;0] 即 [位置;速度]=[0;0]

狀態(tài)協(xié)方差矩陣為 P=[1 0;0 1]

狀態(tài)轉(zhuǎn)移矩陣為 F=[1 delta(t);0 1]=[1 1;0 1]

外部干擾用狀態(tài)轉(zhuǎn)移協(xié)方差矩陣為 Q=[0.0001, 0 ; 0, 0.0001]

(2)問題:

這100內(nèi)汽車的速度和位置估計。

(3)求解釋路:

利用卡爾曼濾波綜合運動學(xué)方程計算與傳感器測量。

(4)計算結(jié)果:

其中橫坐標(biāo)表示位置,縱坐標(biāo)表示速度。

(5)MATLAB代碼:

%卡爾曼濾波(小車[速度,位置]例子)觀測數(shù)據(jù)多
clc,clear,close all
%% 傳感器觀測
%--------------------------------------------------------------------------
%Z = H * X + v
%X為t-1時刻實際狀態(tài)
%Z為t-1時刻實際觀測數(shù)據(jù)
%H為測量系統(tǒng)的參數(shù),即觀察矩陣
%v為觀測噪聲,其協(xié)方差矩陣為R
%--------------------------------------------------------------------------
Z=(1:2:200); %理想觀測值 (汽車的位置,也就是我們要修改的量),設(shè)定變化是1:2:200,則速度就是2
noise=randn(1,100); %在理想觀測值上疊加方差為1的高斯噪聲
Z=Z+noise;%模擬的實際觀測值
H=[1,0];%傳感器提供的觀測矩陣
R=1;%傳感器的觀測噪聲協(xié)方差矩陣
%% 初始狀態(tài)(均值)和狀態(tài)協(xié)方差
%基于高斯分布建立狀態(tài)變量需要均值和協(xié)方差(即X和P)
X=[0;0]; %初始狀態(tài) X=[位置;速度]
P=[1 0;0 1]; %狀態(tài)協(xié)方差矩陣
%% 狀態(tài)轉(zhuǎn)移矩陣(表示如何由上一狀態(tài)推測當(dāng)前狀態(tài)),它同時作用與X和P來預(yù)測下一時刻的X和P
F=[1 1;0 1]; %在速度例題中為[1 delta(t);0 1]
%% 外部干擾用狀態(tài)轉(zhuǎn)移協(xié)方差矩陣Q表示
Q=[0.0001,0;0 , 0.0001];
%% 卡爾曼濾波
figure;
hold on;
for i = 1:length(Z) %迭代次數(shù)
%% 預(yù)測
X_ = F*X;%基于上一狀態(tài)預(yù)測當(dāng)前狀態(tài) X_為t時刻狀態(tài)預(yù)測(這里沒有控制)
P_ = F*P*F'+Q;%更新協(xié)方差 Q系統(tǒng)過程的協(xié)方差
%% 計算卡爾曼增益
K = P_*H'/(H*P_*H'+R);
%% 更新
X = X_+K*(Z(i)-H*X_);% 得到當(dāng)前狀態(tài)的最優(yōu)化估算值 增益乘以殘差
P = (eye(2)-K*H)*P_;%更新K狀態(tài)的協(xié)方差
%% 繪圖
set(0,'defaultfigurecolor','w')
scatter(X(1),X(2));
xlabel('位置'),ylabel('速度')
grid on
%在代碼中,我們設(shè)定x的變化是1:2:200,則速度就是2
%由上圖看到,值經(jīng)過幾次迭代,速度就基本上在 2 附近擺動,擺動的原因是我們加入了噪聲。
end

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多