前面我們分析了粒子濾波的基本原理,在這裡我給出乙個比較經典的例子用matlab**,並給出**。
概率表示p(
xn|x
n−1)
=n(x
k;f(
xk−1
,k),
qk−1
) p(
zk|x
k)=n
(zk,
x2k20
,rk)
狀態空間等價表示xk
=f(x
k−1,
k)+v
k−1
zk=x
2k20+
nk其中狀態轉移方程為 f(
xk−1
,k)=
xk−1
2+25x
k−11
+x2k
−1+8
cos(
1.2k)
vk 和n
k 是零均值高斯分布,方差qk
−1=10
,rk=
1
close all
clear all
clcn=1000; %粒子數目
q=10; %過程雜訊方差
r=1; %量測雜訊方差
t=100; %**時間
x=zeros(1,n); %儲存粒子
xtemp=zeros(1,n); %用於臨時存放粒子
w=zeros(1,n); %權重
x_e=zeros(1,t); %每個時刻的狀態估計值
%初始狀態
x=0;
m=x(1)^2/20+r^2*randn;
x_true_state=x;
x_e_state=x;
%初始化粒子,此時為0時刻
fori=1:n
x(i)=x+sqrt(q)*randn;
end%開始**
for t=1:t
%狀態方程和量測方程
x=x/2+25*x/(1+x^2)+8*cos(1.2*t)+sqrt(q) * randn;
m=x^2/20+sqrt(r) * randn;
fori=1:n
%重要取樣
xtemp(i)=x(i)/2+25*x(i)/(1+x(i)^2)+8*cos(1.2*t)+sqrt(q) * randn;
%計算權重
w(i)=normpdf(m,xtemp(i)^2/20,r^2);
end%歸一化權重
w=w/sum(w);
%重取樣
temp = zeros(1, n);
temp1=0;
fori = 1 : n
temp1=temp1+w(i);
temp(i) = temp1;
endforj = 1 : n
u = rand;
if u1)
x(j)=xtemp(1);
else
fori = 2 : n
if u<=temp(i)&&u>=temp(i-1)
x(j)=xtemp(i);
break;
endendend
end%狀態估計
x_e=mean(x);
x_e_state=[x_e_state,x_e];
x_true_state=[x_true_state,x];
endfigure;
t1=1:t+1;
plot(t1,x_true_state, 'b.',t1,x_e_state, 'g'); %此圖對應x_true_state為真值,x_e_state為粒子濾波
xlabel('時間')
ylabel('狀態')
legend('真實狀態','粒子濾波')
在這裡我給出了q=
1 和q=
10 的**結果,其中第一幅圖是前者,第二幅圖是後者,從中可以看出其他條件相同的情況下,當過程雜訊越大,濾波的誤差也就越大,這個時候就需要增大粒子數目或是選用更好的重要分布或者採取其他辦法來降低誤差。
粒子濾波學習總結
粒子濾波是在貝葉斯濾波的基礎上,結合蒙特卡洛方法實現遞推後驗概率。對於一般的線性高斯系統有比較好的效果,但是對於一般的非線性非高斯系統,貝葉斯濾波效果並不好。所以引入蒙特卡洛方法,蒙特卡洛方法簡單來說就是通過大量的隨機樣本,去了解乙個系統,進而得到所要計算的值。再引入蒙特卡洛方法後相應也伴隨著一些問...
粒子濾波(PF Particle Filter)
粒子濾波 pf particle filter 與卡爾曼濾波 kalman filter 相比較 粒子濾波 pf particle filter 的思想基於蒙特卡洛方法 monte carlo methods 它是利用粒子集來表示概率,可以用在任何形式的狀態空間模型上。其核心思想是通過從後驗概率中抽...
粒子濾波概述
粒子濾波器是貝葉斯濾波器的一種非引數執 況,且經常用於估計乙個動態系統的狀態。粒子濾波器的關鍵思想是採用一套假設 即粒子 來表示後驗概率,其中每乙個假設代表了這個系統可能存在的一種潛在狀態。狀態假設表示為乙個有 n 個加權隨機樣本的集合 s s left w i 1,2,n right 式中 s 是...