% esempio di utilizzo della funzione predict

% Modello 

close all
clear all

H = tf(2*[1 0.9],[1 -0.9],1);

% in forma di stato

H = ss(H);


% che corrisponde al modello di stato:
% x(t+1) = A x(t) + Kb eps(t)
%y(t)  = C x(t) + Jb eps(t)
% dove 
 A = H.a
 Kb = H.b;
 C = H.c;
 Jb = H.d;
% Si noti che Jb e' invertibile per l'ipotesi che H e H^{-1} sono BIBO
% stabili e causali

% si deve normalizare il modello

% e(t):= Jb^(-1) eps(t)
% x(t+1) = A x(t) + K e(t)
% y(t)  = C x(t) +  e(t)
% dove 
% A = H.a
 K = Kb*Jb^(-1);
% C = H.c;

% a questo punto mi costruisco il modello ``idmodel'' per usare predict:
% (non ci sono le matrici B e D perche, per il momento, non avete un
% ingresso misurato

B=[];
D=[];
Hm = idss(A,B,C,D,K);

% genero i dati

N=1000; % prendo 1000 dati

e = randn(N,1);
y = lsim(H,e);

% dati in formato ``iddata''

dati = iddata(y);

% predizione a k passi
% calcola tutti i predittori da 1 a kmax passi

kmax = 10;
for k=1:kmax,
    
    yhk = predict(Hm,dati,k);
    
    figure
    plot(y)
    hold on
    plot(yhk,':r')
    legend('y vero',['predizione a ',num2str(k),' passi'])
    drawnow
    pause
end;

