Noninvasive Fetal ECG: The PhysioNet/Computing in Cardiology Challenge 2013 1.0.0
(2,297 bytes)
%UKF_PREDICT1 Nonaugmented (Additive) UKF prediction step
%
% Syntax:
% [M,P] = UKF_PREDICT1(M,P,f,Q,f_param,alpha,beta,kappa,mat)
%
% In:
% M - Nx1 mean state estimate of previous step
% P - NxN state covariance of previous step
% f - Dynamic model function as a matrix A defining
% linear function a(x) = A*x, inline function,
% function handle or name of function in
% form a(x,param) (optional, default eye())
% Q - Process noise of discrete model (optional, default zero)
% f_param - Parameters of f (optional, default empty)
% alpha - Transformation parameter (optional)
% beta - Transformation parameter (optional)
% kappa - Transformation parameter (optional)
% mat - If 1 uses matrix form (optional, default 0)
%
% Out:
% M - Updated state mean
% P - Updated state covariance
%
% Description:
% Perform additive form Unscented Kalman Filter prediction step.
%
% Function a should be such that it can be given
% DxN matrix of N sigma Dx1 points and it returns
% the corresponding predictions for each sigma
% point.
%
% See also:
% UKF_UPDATE1, UKF_PREDICT2, UKF_UPDATE2, UKF_PREDICT3, UKF_UPDATE3,
% UT_TRANSFORM, UT_WEIGHTS, UT_MWEIGHTS, UT_SIGMAS
% Copyright (C) 2003-2006 Simo S�rkk�
%
% $Id: ukf_predict1.m 483 2010-10-18 08:54:19Z jmjharti $
%
% This software is distributed under the GNU General Public
% Licence (version 2 or later); please refer to the file
% Licence.txt, included with the software, for details.
function [M,P,D] = ukf_predict1(M,P,f,Q,f_param,alpha,beta,kappa,mat)
%
% Check which arguments are there
%
if nargin < 2
error('Too few arguments');
end
if nargin < 3
f = [];
end
if nargin < 4
Q = [];
end
if nargin < 5
f_param = [];
end
if nargin < 6
alpha = [];
end
if nargin < 7
beta = [];
end
if nargin < 8
kappa = [];
end
if nargin < 9
mat = [];
end
%
% Apply defaults
%
if isempty(f)
f = eye(size(M,1));
end
if isempty(Q)
Q = zeros(size(M,1));
end
if isempty(mat)
mat = 0;
end
%
% Do transform
% and add process noise
%
tr_param = {alpha beta kappa mat};
[M,P,D] = ut_transform(M,P,f,f_param,tr_param);
P = P + Q;