Skip to content

Commit 8602a42

Browse files
committed
with simulation and class seperated
1 parent a748533 commit 8602a42

File tree

12 files changed

+1587
-1040
lines changed

12 files changed

+1587
-1040
lines changed

ExtendedKF.m

Lines changed: 11 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,3 @@
1-
% function [xhat_optimal,P_optimal] = KalmanFilter(y_k, Q_k, R_k, xhat_last, P_last, vk, wk, T)
2-
% %Predicts the state xk and covariance matrix pk given k-1 information
3-
%
4-
% %compute jacobian of system:
5-
% F_k = F_jacobian(T, vk, xhat_last);
6-
%
7-
% %compute predicted mean and covariance
8-
% [xhat_predict, P_k_predict] = state_predict(xhat_last,F_k, P_last, Q_k, vk, wk, T);
9-
%
10-
% %compute jacobian of sensor:
11-
% H_k = H_jacobian(xhat_predict);
12-
%
13-
% %predict the measured value
14-
% [yhat_predict,K_k] = measurement_predict(xhat_predict, H_k, P_k_predict, R_k);
15-
%
16-
% %Estimate:
17-
% xhat_optimal = xhat_predict + K_k*(y_k-yhat_predict);
18-
% P_optimal = P_k_predict-K_k*H_k*P_k_predict;
19-
%
20-
%
21-
% end
22-
23-
241
classdef ExtendedKF < handle
252
properties
263

@@ -58,32 +35,33 @@
5835
self.measurementcovariance = measurement_covariance;
5936
self.T = sampling_time;
6037

61-
self.state_dim = size(intial_x);
38+
self.state_dim = size(self.statecovariance(:, 1));
39+
self.measurement_dim = size(self.measurementcovariance(:, 1));
6240
self.Xtrue(:, 1) = initial_x;
63-
self.Xhistory = zeros(state_dim);
41+
self.Xhistory = zeros(self.state_dim);
6442
self.k = 1;
6543
self.hasadditivenoise = true;
66-
self.Xtrue = zeros(state_dim);
44+
self.Plast = eye(self.state_dim(1));
6745
end
6846

6947
end
7048

7149

7250
function [Xpred, Ppred] = predict(self)
7351
%create plant noise
74-
self.vk = sqrt(self.statecovariance)*randn(self.state_dim, 1);
52+
self.vk = sqrt(self.statecovariance)*randn(self.state_dim(1), 1);
7553
%create noisy plant state: REFERENCE VALUE
7654
xtrue_last = self.Xtrue(:, end);
7755
self.xk = self.statetransitionfcn(xtrue_last, self.T) + self.vk;
7856

7957
xhat_last = self.Xhistory(:, end);
80-
F = self.statej(self.T, self.vk, xhat_last);
58+
F = self.statej(xhat_last, self.T);
8159
Xpred = self.statetransitionfcn(xhat_last, self.T);
82-
Ppred = F*self.Plast*F' + self.statecovariance;
60+
Ppred = F*(self.Plast)*F' + self.statecovariance;
8361

8462
%save the new values:
8563
self.k = self.k+1;
86-
self.Plast = Ppred;
64+
self.Plast = Ppred;
8765
self.Xhistory(:, self.k) = Xpred;
8866
self.Xtrue(:, self.k) = self.xk;
8967

@@ -92,13 +70,13 @@
9270

9371
function [Xcorr, Pcorr] = correct(self)
9472
%create measurement noise
95-
self.wk = sqrt(self.measurementcovariance)*randn(self.state_dim, 1);
73+
self.wk = sqrt(self.measurementcovariance)*randn(self.measurement_dim(1), 1);
9674
%create true measurement
97-
yk = self.measurementfcn(self.xk) + self.wk;
75+
yk = self.measurementfcn(self.xk, self.T) + self.wk;
9876

9977
%correcting measurement
10078
Xpred = self.Xhistory(:, self.k);
101-
H = self.measurementj(Xpred);
79+
H = self.measurementj(Xpred, self.T);
10280
Ypred = self.measurementfcn(Xpred);
10381
Sk = H*self.Plast*H' + self.measurementcovariance;
10482
Kk = self.Plast*H'*inv(Sk);

measurement_predict.m

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)