卡爾曼濾波例項

2021-09-03 08:16:54 字數 2447 閱讀 6494

clear;

clc;

n_iter = 100;

t = 1:n_iter;

sz = [n_iter,1];

x = 24;

q = 4e-4;

r = 0.25;

t_start = 23.5;

delta_start = 1;

z = x + sqrt(r)*randn(sz); %100次的測量結果

這個**應該是別的地方拷貝的,具體**,我忘記了,以後找到了,會把鏈結加上。

clc

clear

close all

% 初始化引數

delta_t=0.1; %取樣時間

t=0:delta_t:5;

n = length(t); % 序列的長度

sz = [2,n]; % 訊號需開闢的記憶體空間大小 2行*n列 2:為狀態向量的維數n

g=10; %加速度值

x=1/2*g*t.^2; %實際真實位置

z = x + sqrt(10).*randn(1,n); % 測量時加入測量白雜訊

q =[0 0;0 9e-1]; %假設建立的模型 雜訊方差疊加在速度上 大小為n*n方陣 n=狀態向量的維數

r = 10; % 位置測量方差估計,可以改變它來看不同效果 m*m m=z(i)的維數

a=[1 delta_t;0 1]; % n*n

b=[1/2*delta_t^2;delta_t];

h=[1,0]; % m*n

n=size(q); %n為乙個1*2的向量 q為方陣

m=size(r);

% 分配空間

xhat=zeros(sz); % x的後驗估計

p=zeros(n); % 後驗方差估計 n*n

xhatminus=zeros(sz); % x的先驗估計

pminus=zeros(n); % n*n

k=zeros(n(1),m(1)); % kalman增益 n*m

i=eye(n);

% 估計的初始值都為預設的0,即p=[0 0;0 0],xhat=0

for k = 9:n %假設車子已經運動9個delta_t了,我們才開始估計

% 時間更新過程

xhatminus(:,k) = a*xhat(:,k-1)+b*g;

pminus= a*p*a'+q;

% 測量更新過程

k = pminus*h'*inv( h*pminus*h'+r );

xhat(:,k) = xhatminus(:,k)+k*(z(k)-h*xhatminus(:,k));

p = (i-k*h)*pminus;

end

figure

plot(t,z);

hold on

plot(t,xhat(1,:),'r-')

plot(t,x(1,:),'g-');

legend('含有雜訊的測量', '後驗估計', '真值');

卡爾曼 卡爾曼濾波 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...