-
Notifications
You must be signed in to change notification settings - Fork 35
/
Copy pathLMS.asv
executable file
·48 lines (36 loc) · 1.25 KB
/
LMS.asv
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
43
44
45
46
47
48
%INPUT
%
%
% U= matrice di convoluzione per identificazione
% h_sti= stima iniziale del filtro
% y= osservazioni con rumore
% mu= passo di aggiornamento
%
%OUTPUT:
%
%
% fstim=filtro stimato
% MSE=errore quadratico medio della stima ad ogni iterazione
function [fstim,MSE]=LMS(U,h_sti,y,mu)
i=1;
while(i==1 || i==2 || J(i-1)<J(i-2) || (abs(J(i-1)/J(i-2))>(1-1e-6) && abs(J(i-1)-J(i-2))>1e-6))
%stima dell'out
the(i)=U(i,:)*h_sti(:,i); %scalare, stima dell'OUT al passo i
%calcolo del funzionale di costo
%stima campionaria della crosscorrelaz istantanea
p=(y(i)'*U(i,:)); %riga
%stima campionaria della matrice di covarianza istantanea
R=zeros(P);
R=(U(i,:)'*U(i,:));
J(i)=(1/i)*(y(1:i)'*y(1:i))-2*p*h_sti(:,i)+h_sti(:,i)'*R*h_sti(:,i);
%aggiornamento filtro
mu=(1/trace(R)); %scelta conservativa, non stimo gli autovalori di R --> convergenza più lenta ma garantita
h_sti(:,i+1)=h_sti(:,i)+mu*(p'-R*h_sti(:,i));
i=i+1;
end
fstim=h_sti(:,end); %stima del filtro a convergenza
%errore quadratico medio di stima ad ogni iterazione
err=h_sti-repmat(h',1,size(h_sti,2));
for i=1:size(err,2)
MSE(i)=err(:,i)'*err(:,i); %calcolo MSE tra filtro vero e filtro stimato alle varie iterazioni
end