KalmanFilter
cubature_update_phase.m
Go to the documentation of this file.
1 function [estimate_next, covariance_sqrt] = cubature_update_phase(R_root,P_root,C_func,estimate,measurement)
2 %runs update portion of the dd-ekf.
3 %[estimate_next,covariance_sqrt] = cubature_update_phase(R_root,P_root,C,estimate,measurement)
4 %INPUT:
5 % R_root:sensor error covariance matrix where
6 % R=R_root*(R_root')
7 %
8 % P_root:covariance matrix from the predict phase
9 % P_predict = P_root*(root')
10 %
11 % C_func: observation matrix function that converts single argument vector
12 % of dimension of 'state_count' by 1 to system measurement of size 'sensor_count' by 1
13 %
14 % estimate: estimate from predict phase
15 %
16 % measurement: measurement picked up by sensor
17 %
18 %OUTPUT:
19 % estimate_next: estimate incorporating measurement
20 %
21 % covariance_sqrt: square root of covariance at the
22 % end of update phase. Actual covariance is
23 % covariance_sqrt*(covariance_sqrt')
24 
25  state_count = length(estimate);
26  sensor_count = length(R_root);
27 
28  sigma_points = zeros(state_count,state_count*2);
29  sigma_points(:,1:state_count) = estimate + P_root*sqrt(state_count).*eye(state_count,state_count);
30  sigma_points(:,(state_count+1):end) = estimate - P_root*sqrt(state_count).*eye(state_count,state_count);
31 
32  measurement_points = zeros(sensor_count,state_count*2);
33  for i=1:(2*state_count)
34  measurement_points(:,i) = C_func(sigma_points(:,i));
35  end
36  average_measurement = (1/(2*state_count))*sum(measurement_points,2);
37 
38  Z_cov = 0;
39  cross_covariance = 0;
40  for i=1:(state_count*2)
41  Z_cov = (average_measurement - measurement_points(:,i))*(average_measurement - measurement_points(:,i))';
42  cross_covariance = (estimate - sigma_points(:,i))*(average_measurement - measurement_points(:,i))';
43  end
44  Z_cov = Z_cov + R_root*R_root';
45  Kalman_gain = cross_covariance*inv(Z_cov);
46 
47  estimate_next = estimate + Kalman_gain*(measurement - average_measurement);
48  covariance = P_root*P_root' - Kalman_gain*Z_cov*(Kalman_gain');
49  covariance_sqrt = chol(covariance)';
50 end
function cubature_update_phase(in R_root, in P_root, in C_func, in estimate, in measurement)