-
Notifications
You must be signed in to change notification settings - Fork 34
/
LMS.m
executable file
·54 lines (39 loc) · 1.23 KB
/
LMS.m
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
49
50
51
52
53
54
%INPUT
%
%
% U= matrice di convoluzione per identificazione
% h_sti= stima iniziale del filtro
% y= osservazioni con rumore
% mu= passo di aggiornamento
% h=filtro vero
%
%
%OUTPUT:
%
%
% fstim=filtro stimato
% MSE=errore quadratico medio della stima ad ogni iterazione
function [fstim,MSE]=LMS(U,h_sti,y,mu,h)
P=length(h_sti);
i=1;
while(i==1 || i==2 || J(i-1)<J(i-2) || (abs(J(i-1)/J(i-2))>(1-1e-2) && abs(J(i-1)-J(i-2))>1e-3))
%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)=(y(i)'*y(i))-2*p*h_sti(:,i)+h_sti(:,i)'*R*h_sti(:,i);
%aggiornamento filtro
err(i)=y(i)-U(i,:)*h_sti(:,i); %errore istantaneo di stima
h_sti(:,i+1)=h_sti(:,i)+mu*(err(i)*U(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