function yhat = predicts(z,th,m)
%PREDICTS Auxiliary function to PREDICT.
%	yhat = predicts(Z,TH,M)

%	L. Ljung 10-2-90,11-22-93
%	Copyright (c) 1986-95 by the MathWorks, Inc.
%	$Revision: 1.3 $  $Date: 1995/05/10 21:36:59 $

[Ncap,nc]=size(z);
nu=th(1,3);ny=th(1,4);
if m==inf, yhat=idsimss(z(:,ny+1:ny+nu),th);return,end
[nr,nc]=size(th);
nd=th(1,5);
sspmod=getmfth(th);

[etapar,P,lambda]=th2par(th);
if length(etapar)==0,etapar=0;end
arg=getargth(th);
T=th(1,2);
if any(th(2,8)==[2 3]),Tmod=-1;else Tmod=abs(T);end
[A,B,C,D,K,X0]=feval(sspmod,etapar,Tmod,arg);
x=ltitr(A-K*C,[K B-K*D],z,X0);
if m==1, yhat=(C*x')'; if ~isempty(D),yhat=yhat + (D*z(:,ny+1:ny+nu)')';end
else

F=D;Mm=eye(length(A));
for km=1:m-1
F=[F C*Mm*B];
Mm=A*Mm;
end
yhat=zeros(Ncap,ny);%corr 911111
for ky=1:ny
for ku=1:nu
yhat(:,ky)=yhat(:,ky)+filter(F(ky,ku:nu:m*nu),1,z(:,ny+ku));
end
end
if isempty(yhat),yhat=zeros(Ncap,ny);end
yhat(m:Ncap,:)=yhat(m:Ncap,:)+(C*Mm*x(1:Ncap-m+1,:)')';
if nu>0
    x=ltitr(A,B,z(1:m,ny+1:ny+nu),X0);
    yhat(1:m,:)=(C*x')';
end
if ~isempty(D),yhat(1:m,:)=yhat(1:m,:) + (D*z(1:m,ny+1:ny+nu)')';end
end


