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.
5 % R_root:sensor error covariance matrix where
8 % P_root:covariance matrix from the predict phase 9 % P_predict = P_root*(root')
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
14 % estimate: estimate from predict phase
16 % measurement: measurement picked up by sensor
19 % estimate_next: estimate incorporating measurement
21 % covariance_sqrt: square root of covariance at the
22 % end of update phase. Actual covariance is
23 % covariance_sqrt*(covariance_sqrt
') 25 state_count = length(estimate); 26 sensor_count = length(R_root); 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); 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)); 36 average_measurement = (1/(2*state_count))*sum(measurement_points,2); 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))
'; 44 Z_cov = Z_cov + R_root*R_root';
45 Kalman_gain = cross_covariance*inv(Z_cov);
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)
'; function cubature_update_phase(in R_root, in P_root, in C_func, in estimate, in measurement)