www.pudn.com > adaptivefiltering.rar > rls_AR_pred.m
function [Wo, xp, alpha, e] = rls_AR_pred(Xi, Y, verbose, lambda, delta) % function [Wo, xp, alpha, e] = rls_AR_pred(Xi, Y, verbose, lambda, delta) % % rls_AR_pred.m - use basic RLS algorithm to predict real-valued AR process % written for MATLAB 4.0 % % Reference: Haykin, _Adaptive Filter Theory_, 2nd (corr.) ed., 1991 % % Note that we use the algorithm in Table 13.2, i.e., % we do not exploit the Hermitian property of P(n), to % minimize the possibility of numerical instability. % % % Input parameters: % Xi : matrix of training/test points - each row is % considered a datum % y : vector of corresponding desired outputs for % predictor % verbose: set to 1 for interactive processing % lambda : the initial value of the forgetting factor % delta : the initial value for the diagonal P matrix % % Output parameters: % Wo : column-wise matrix of weights at each iteration % xp : row vector of predicted outputs % alpha : row vector of a priori prediction errors % e : row vector of a posteriori prediction errors Y - xp Nout = size(Xi, 2); % length of maximum number of timesteps that can be predicted N = size(Xi, 1); % order of predictor d = size(Xi, 2); % initialize weight matrix and associated parameters for RLS predictor W = zeros(Nout, 1); Wo = []; P = eye(d) / delta; for n = 1:N, % save weights Wo = [Wo W]; % adapt weight matrix u = Xi(n, :)'; p = u' * P; kappa = lambda + p * u; k = P * u / kappa; alpha(n) = Y(n) - W' * u; W = W + k * alpha(n); Pp = k * p; P = (P - Pp) / lambda; % predict next sample and compute error xp(n) = W' * u; e(n) = Y(n) - xp(n); if (verbose ~= 0) disp(['time step ', int2str(n), ': mag. pred. err. = ', num2str(abs(e(n)))]); end; end % for n