def test_kalman_filter_update(): kf = KalmanFilter( data.transition_matrix, data.observation_matrix, data.transition_covariance, data.observation_covariance, data.transition_offsets, data.observation_offset, data.initial_state_mean, data.initial_state_covariance) # use Kalman Filter (x_filt, V_filt) = kf.filter(X=data.observations) # use online Kalman Filter n_timesteps = data.observations.shape[0] n_dim_state = data.transition_matrix.shape[0] x_filt2 = np.zeros((n_timesteps, n_dim_state)) V_filt2 = np.zeros((n_timesteps, n_dim_state, n_dim_state)) for t in range(n_timesteps - 1): if t == 0: x_filt2[0] = data.initial_state_mean V_filt2[0] = data.initial_state_covariance (x_filt2[t + 1], V_filt2[t + 1]) = kf.filter_update( x_filt2[t], V_filt2[t], data.observations[t + 1], transition_offset=data.transition_offsets[t] ) assert_array_almost_equal(x_filt, x_filt2) assert_array_almost_equal(V_filt, V_filt2)
def test_kalman_filter(): kf = KalmanFilter( data.transition_matrix, data.observation_matrix, data.transition_covariance, data.observation_covariance, data.transition_offsets, data.observation_offset, data.initial_state_mean, data.initial_state_covariance) (x_filt, V_filt) = kf.filter(X=data.observations) assert_array_almost_equal( x_filt[:500], data.filtered_state_means[:500], decimal=7 ) assert_array_almost_equal( V_filt[:500], data.filtered_state_covariances[:500], decimal=7 )