Це дійсний спосіб введення оцінок швидкості в процес?
Якщо ви обрали свій стан належним чином, то оцінки швидкості виходять "безкоштовно". Дивіться виведення моделі сигналу нижче (для простого 1-D випадку, який ми розглянули).
Модель сигналу, візьміть 2
Отже, нам дійсно потрібно узгодити модель сигналу, перш ніж ми зможемо рухатись вперед. З вашого редагування виглядає, що ваша модель позиції, , це:xk
xk+1x˙k+1==xk+x˙kΔt+12a(Δt)2x˙k+aΔt
Якщо наш стан як і раніше:
тоді рівняння оновлення стану просто:
де тепер наш - це нормально розподілене прискорення. xk+1=(
xk=(xkx˙k)
xk+1=(1 Δt0 1)xk+⎛⎝(Δt)22Δt⎞⎠ak
ak
Це дає різні матриці від попередньої версії, але матриці і повинні бути однаковими.GFH
Якщо я реалізую це в scilab
(вибачте, немає доступу до matlab), це виглядає так:
// Signal Model
DeltaT = 0.1;
F = [1 DeltaT; 0 1];
G = [DeltaT^2/2; DeltaT];
H = [1 0];
x0 = [0;0];
sigma_a = 0.1;
Q = sigma_a^2;
R = 0.1;
N = 1000;
a = rand(1,N,"normal")*sigma_a;
x_truth(:,1) = x0;
for t=1:N,
x_truth(:,t+1) = F*x_truth(:,t) + G*a(t);
y(t) = H*x_truth(:,t) + rand(1,1,"normal")*sqrt(R);
end
Тоді я можу застосувати рівняння фільтра Калмана до цього (галасливі вимірювання).y
// Kalman Filter
p0 = 100*eye(2,2);
xx(:,1) = x0;
pp = p0;
pp_norm(1) = norm(pp);
for t=1:N,
[x1,p1,x,p] = kalm(y(t),xx(:,t),pp,F,G,H,Q,R);
xx(:,t+1) = x1;
pp = p1;
pp_norm(t+1) = norm(pp);
end
Таким чином, у нас є шумні вимірювання , і ми застосували до них фільтр Калмана і використовували ту саму модель сигналу, щоб генерувати як і ми, щоб застосувати фільтр Калмана (іноді досить велике припущення!).yy
Потім наступні графіки показують результат.
Сюжет 1 : та порівняно з часом.yxk
Сюжет 2 : Збільшене зображення перших кількох зразків:
Сюжет 3 : Щось, чого ви ніколи не отримуєте в реальному житті, справжня позиція порівняно з оцінкою стану.
Сюжет 4 : Щось ви також ніколи не отримуєте в реальному житті, справжня швидкість порівняно з оцінкою стану швидкості.
Сюжет 5 : Норма матриці коваріації стану (те, що завжди слід контролювати в реальному житті!). Зауважте, що він дуже швидко переходить від початкового дуже великого значення до чогось дуже маленького, тому я показав лише перші кілька зразків.
Сюжет 6 : Діаграми помилки між справжнім положенням та швидкістю та їх оцінками.
Якщо ви вивчаєте випадок, коли вимірювання положення точні, то ви виявите, що рівняння калманського уппату дають точні результати для положення БОТУ і швидкості. Математично зрозуміти, чому просто. Використовуючи те саме позначення, що і у статті вікіпедії , точні вимірювання означають, що . Якщо припустити, що початкове положення і швидкість відомі так, що , то і матриця посилення Кальмана задаєтьсяP k =0zk+1=xk+1Pk=0P−k+1=QKk+1
Kk+1=(12/dt)
Це означає, що процедура оновлення Kalman виробляє
x^k+1=Fk+1xk+Kk+1(zk+1−Hk+1Fk+1xk)=(xk+x˙kdtx˙k)+(12/dt)(xk+1−(xk+x˙kdt))=(xk+12(xk+1−xk)/dt−x˙k)
Як бачите, значення для швидкості визначається саме тією формулою, яку ви пропонували використовувати для оцінки швидкості. Тож хоча ви не могли бачити будь-якого виду обчислення для швидкості, насправді він там захований.(xk−xk−1)/dt