1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| function signal_out = Methode1(signal)
global compteur compteurabs
persistent sign signal_filtre
if compteurabs<2
signal_filtre=zeros(1,300);
end
compteurabs=compteurabs+1;
compteur=compteur+1;
sign(compteur)=signal;
if compteur > 300
X = zeros(300,3);
t = 1:1:300;
nb_t = length(t);
u = 1:1:300;
u = u';
x0 = ones(300,1);
x1 = u;
x2 = u.*x1;
X = [x0 x1 x2];
teta = [0;0;0];
P = [1000 0 0;0 1000 0;0 0 1000];
i = 1;
while(i<301)
x = [x0(i);x1(i);x2(i)];
K = P*x*inv(1+x'*P*x);
teta = teta+K*(sign(i)-x'*teta);
P = P-K*x'*P;
i = i+1;
end
compteur=0;compteurabs=compteurabs-1;
signal_filtre = X*teta;
dt=compteurabs-300+1:compteurabs;
plot(dt,signal_filtre(1:300),'r','Linewidth',4)
hold on
plot(dt,sign(1:300),'b','Linewidth',1)
axis([0 1800 -1.5 1.5])
%signal_filtre=signal;
signal_out=signal_filtre(compteur+1);
sign=zeros(1,300);
else
signal_out=signal_filtre(compteur);
end; |