function y = prediceLMS(x,p,u)
% PREDICELMS Implements linear prediction with backward LMS adaptation.
%
% [Y] = PREDICELMS(X,P,U) where X is the input signal that we want
% predict, being P the prediction order and U a parameter.
% Copyright (C) Iván López Espejo 2010
% Version: Id: prediceLMS.m , v 1.0 2010
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% This program is free software; you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 2 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You can obtain a copy of the GNU General Public License from
% ftp://prep.ai.mit.edu/pub/gnu/COPYING-2.0 or by writing to
% Free Software Foundation, Inc.,675 Mass Ave, Cambridge, MA 02139, USA.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Filter coefficients initialization.
ak1 = zeros(1,p);
% Error initialization.
ek1 = 0;
% Filtering.
for k = p+2:length(x)
ak1 = ak1 + 2*u*ek1*x(k-2:-1:k-p-1);
xk = dot(ak1,x(k-1:-1:k-p));
ek1 = x(k) - xk;
end
k = k + 1;
ak1 = ak1 + 2*u*ek1*x(k-2:-1:k-p-1);
xk = dot(ak1,x(k-1:-1:k-p));
% Predicted value.
y = xk;