Sunteți pe pagina 1din 6

LABORATOR 3 – TaPDS

Filtre adaptive

%Exemplul 3.1
%Filtrul adaptiv in configuratia de PREDICTIE
%Utilizarea algoritmului nLMS in separarea adaptiva a unor semnale:
%semnal util de banda ingusta + zgomot de banda larga

close all
clear all

%a) Se genereaza un semnal sinusoidal, s, de amplitudine 2, faza 0


%si frecventa 50 Hz, folosind o frecventa de esantionare fe = 1 kHz,
%pe un interval de timp intre 0 si 500 ms, cu pasul de 1/fe.
%Se genereaza un zgomot alb Gaussian standard (medie zero si
%varianţă 1), v, care se suprapune aditiv peste semnalul s, rezultand
%semnalul "dorit" d.
%Se reprezinta grafic semnalele s si d folosind functia plot.

A = 2; F = 50; fe = 1000; Te = 1/fe;


t_n = 0:Te:0.5;
s = A*sin(2*pi*F*t_n);
v = randn(size(t_n));
d = s + v;

plot(t_n,s), grid %Fig. 1


title('Semnalul util, s(n)')
xlabel('Timp (s)')
ylabel('s(n)')
figure
plot(t_n,d) %Fig. 2
title('Semnalul dorit, d(n)')
xlabel('Timp (s)')
ylabel('d(n)')

N = length(t_n);
x = [0 d(1:N-1)]; %Semnalul la intrarea filtrului adaptiv
%Comentariu: deoarece zgomotul suprapus peste semnal este de tip
%zgomot alb, este suficienta o intarziere unitara (delta = 1) pentru
%a decorela componentele de zgomot din semnalele d si x!

%b) Pentru implementarea sistemului se va utiliza functia 'nlms.m' din


%directorul curent. Dupa apelul funcţiei, se vizualizează semnalul la
%ieşirea filtrului, y , folosind plot.
%Sa se reprezinte grafic raspunsul in frecventa al filtrului (după
%realizarea convergentei); axa Ox se va calibra in Hz.
%Observatie 1 - semnificatia notatiilor din functia nlms:
%L - ordinul filtrului adaptiv (FIR!); L + 1 - numarul de coeficienti
%ai filtrului; N - numarul de esantioane ale semnalului de intrare
%pe fereastra de analiza (egal cu numarul de iteratii!); y - semnalul
%la iesirea filtrului; x, d - semnalul de intrare si semnalul dorit;
%b - coeficientii filtrului(vector); mu - pasul de adaptare,
%0 < mu < 1 (controleaza stabilitatea si viteza de &convergenta a
%algoritmului); sigma = puterea estimata a semnalului de intrare;
%px - un vector folosit de functie pentru a retine valori anterioare
%ale semnalului de intrare; alpha - factor de corectie
%(0 < alpha << 1). Pentru simplificare, vom lucra cu alpha = 0.

%Observatie 2 - calculul puterii semnalului x (un sinus + zgomot alb):


%(sigma_x)^2 = A^2/2 + (sigma_v)^2 = 2 + 1 = 3 (notatie nlms: "sigma")

%Observatie 3: atat vectorul de coeficienţi b cât şi vectorul px


%trebuie iniţializaţi (cu 0, sau cu orice alta conditie initiala
%aleasa), la fiecare apel al funcţiei nlms!

%Valori de parametri alese si calculate, initializari inainte de


%apelul functiei nlms:
mu = 0.1; sigma = 3; alpha = 0; L = 20;
b = zeros(1,L+1); px=0;

[y,b,px] = nlms(x,d,b,mu,sigma,alpha,px);
figure
plot(t_n,y), grid %Fig. 3
title('Semnalul la iesirea filtrului, y(n); mu = 0.1')
xlabel('Timp (s)')
ylabel('y(n)')

%Intrebare: care este semnalul de eroare in cazul problemei de fata?


%Este obligatoriu ca intr-un sistem adaptiv eroarea sa tinda catre 0?

[H,w]=freqz(b,1,256,fe);
figure
plot(w,abs(H)), grid %Fig. 4
title('Modulul raspunsului in frecventa al filtrului; mu = 0.1')
xlabel('Frecventa (Hz)')
ylabel('Modulul raspunsului in frecventa')

%c) Se reia procesul de adaptare modificând (doar) pasul la valoarea


%mu = 0.01; numarul de coeficienti ramane acelasi; semnalele
% d si x rămân cel generate/obtinute anterior.
%Se vizualizraza din nou semnalul la iesire si modulul raspunsului
%in frecventa al filtrului.

mu = 0.01; b = zeros(1,L+1); px=0;


[y,b,px] = nlms(x,d,b,mu,sigma,alpha,px);
figure
plot(t_n,y), grid %Fig. 5
title('Semnalul la iesirea filtrului, y(n); mu = 0.01')
xlabel('Timp (s)')
ylabel('y(n)')

2
[H,w]=freqz(b,1,256,fe);
figure
plot(w,abs(H)), grid %Fig. 6
title('Modulul raspunsului in frecventa al filtrului; mu = 0.01')
xlabel('Frecventa (Hz)')
ylabel('Modulul raspunsului in frecventa')

%d) Se va relua programul pentru alte doua valori ale ordinului


%filtrului, de exemplu L = 8 si L = 40, apoi si pentru o alta valoare
%a pasului de adapatare, de exemplu mu = 0.002 (cu L = 20).
%Interpretati rezultatele obtinute!
======================================================================

%Exemplul 3.2
%Filtrul adaptiv in configuratia de SUPRIMARE A INTERFERENTELOR

%Utilizarea algoritmului nLMS in "suprimarea" (reducerea) adaptiva


%a zgomotului ("Adaptive Noise Canceling")

%Vom considera urmatorul caz: semnalul util, s, este un semnal de


%banda (foarte) larga, la limita un zgomot alb, corupt de o
%interferenta reprezentata de un semnal sinusoidal, v0, cu
%amplitudinea crescatoare in timp; semnalul rezultat reprezinta
%semnalul primar, d. Semnalul de referinta, v1, este un semnal
%sinusoidal de aceeasi frecventa cu v0, dar defazat
%fata de acesta cu pi (situatie probabila intr-un caz real, deoarece
%sursa de zgomot este uzual situata la distanta fata de cea de semnal.

close all
clear all

%a) Se genereaza un semnal sinusoidal, v0, cu amplitudinea crescatoare


%dupa legea 1 + 6n, faza 0 si frecventa 50 Hz, folosind o frecventa de
%esantionare fe = 1 kHz, pe un interval de timp intre 0 si 300 ms, cu
%pasul de 1/fe. Se genereaza un zgomot alb Gaussian standard (medie
%zero si varianţă 1), s (considerat in aceasta aplicatie semnal util),
%care se suprapune aditiv peste semnalul v0, rezultand semnalul
%"dorit" d. Se reprezinta grafic semnalul d folosind functia plot.
%Se genereaza un al doilea semnal sinusoidal, v1, de amplitudine 0.5,
%faza pi si frecventa 50 Hz (fe = 1 kHz), care se va aplica la
%intrarea filtrului adaptiv. Se vizualizeaza v0 si v1 in aceeasi
%fereastra grafica.

F = 50; fe = 1000; Te = 1/fe;


t_n = 0:Te:0.3;
v0 = (1 + 6*t_n).*sin(2*pi*50*t_n);
s = randn(size(t_n));
d = v0+s;

3
plot(t_n,d), grid %Fig. 1
title('Semnalul dorit, d(n)')
xlabel('Timp (s)')
ylabel('d(n)')

v1 = 0.5*sin(2*pi*50*t_n + pi);
figure
plot(t_n,v0,'b',t_n,v1,'g'), grid %Fig. 2
title('Semnalele de zgomot, v0(n) si v1(n)')
xlabel('Timp (s)')
ylabel('v0(n), v1(n)')

x = v1;

%b) Pentru implementarea sistemului se va utiliza functia 'nlms.m' din


%directorul curent. Se aleg parametrii: mu = 0.1, L = 6, alpha = 0.
%Observatie - calculul puterii semnalului de intrare, x (un sinus):
%sigma = A^2/2 = (0.5)^2/2 = 0.125
%Dupa apelul funcţiei, se vizualizează semnalul la ieşirea filtrului,
%y, impreuna cu semnalele v0 si v1, in aceeasi fereastra grafica; se
%vor indica semnalele prin utilizarea unei legende corespunzatoare.
%Intrebare: care este semnalul de eroare in cazul problemei de fata?

mu = 0.1; sigma = 0.125; alpha = 0; L = 6;


b = zeros(1,L+1); px=0;

[y,b,px] = nlms(x,d,b,mu,sigma,alpha,px);

figure
plot(t_n,v0,'b','linewidth',1.5), grid %Fig. 3
hold on
title ('Filtru adaptiv: mu = 0.1')
axis([0 0.3 -3 3])
plot(t_n,v1,'g','linewidth',1.5)
xlabel('Timp (s)')
plot(t_n,y,'r','linewidth',1.5)
legend('v0(n)','v1(n)','y(n)')
legend('Location','NorthWest')
hold off

%c) Se reia procesul de adaptare modificând (doar) pasul la valoarea


%mu = 0.5; ordinul filtrului ramane acelasi.
%Se vizualizraza din nou semnalele y, v0 si v1, in aceleasi conditii
%ca la punctul anterior.
%Cum interpretati rezultatul obtinut?

mu = 0.5; b = zeros(1,L+1); px=0;


[y,b,px] = nlms(x,d,b,mu,sigma,alpha,px);

figure
plot(t_n,v0,'b','linewidth',1.5), grid %Fig. 4
hold on
axis([0 0.3 -3 3])
plot(t_n,v1,'g','linewidth',1.5)
title ('Filtru adaptiv: mu = 0.5')
xlabel('Timp (s)')

4
plot(t_n,y,'r','linewidth',1.5)
legend('v0(n)','v1(n)','y(n)')
legend('Location','NorthWest')
hold off

%d) Reluati programul, inlocuind la punctul c) mu = 0.005.


%Se vor reface apoi (toate) punctele anterioare, pentru L > 6 (de
%exemplu L = 30).
%Interpretati rezultatele obtinute!
%Gasiti o pereche de valori optime pentru mu si L.
======================================================================

%Exemplul 3.3
%Filtrul adaptiv in configuratia de IDENTIFICARE A SISTEMELOR

%Utilizarea unui filtru adaptiv si a algoritmului nLMS pentru


%identificarea unui sistem necunoscut (functia sa de transfer), daca
%se cunosc semnalele la intrarea si iesirea acestuia.
%(A se vedea, pentru comparatie, Exemplul 2.1-d, Laboratorul 2, ca
%alternativa de rezolvare folosind tehnici neparametrice de analiza
%spectrala.)

%a) Se va proiecta mai intai (sinteza si analiza) un filtru digital de


%mediere (filtru FIR de tip trece-jos), de ordin 20 (21 coeficienti
%egali), la intrarea caruia se va aplica un zgomot alb Gaussian
%standard (medie zero si varianţă 1), x; semnalul de iesire se va nota
%cu y, si va reprezenta practic semnalul "dorit" pentru sistemul
%adaptiv. Acelasi semnal x se aplica si la intrarea filtrului adaptiv.
%Apoi, considerand sistemul "necunoscut" si fiind cunoscute doar
%semnalele de intrare si iesire, se estimeaza raspunsul in frecventa
%al sistemului, prin intermediul filtrului adaptiv.
%Sa se reprezinte grafic raspunsul in frecventa al filtrului adaptiv
%(dupa realizarea convergentei), in aceeasi fereastra grafica cu cel
%original, ca si eroarea patratica, SE (semnalul de eroare este
%e = d - y).

close all
clear all

fe = 1000; Te = 1/fe;
t_n = 0:Te:0.5;
x = randn(size(t_n));
plot(t_n,x), grid %Fig. 1

b1 = ones(1,21)/21;
[H1,w1] = freqz(b1,1,256,fe);
figure
plot(w1,abs(H1)), grid %Fig. 2

y1 = filter(b1,1,x);
d = y1;

5
mu = 0.1; sigma = 1; alpha = 0; L = 30;
%Alegem, deocamdata, ordinul filtrului adaptiv L = 30 (reamintim ca
%sistemul proiectat initial este acum "necunoscut"!)

b = zeros(1,L+1); px=0;

[y,b,px] = nlms(x,d,b,mu,sigma,alpha,px);

SE = (d-y).^2; %eroarea patratica


figure
plot([0:(length(t_n)-1)],SE), grid %Fig. 3
title ('Eroarea patratica')
xlabel('n')
ylabel('SE')

[H,w] = freqz(b,1,256,fe);
figure
plot(w1,abs(H1),':b','linewidth',2), grid %Fig. 4
hold on
title ('Identificare de sistem: mu = 0.1')
xlabel('Frecventa (Hz)')
ylabel('Modulul raspunsului in frecventa')
plot(w1,abs(H),'r','linewidth',1.5)
legend('Sistem necunoscut','Filtru adaptiv')
legend('Location','NorthEast')
hold off

%b) Se va relua programul pentru mu = 0.01 si apoi pentru perechile de


%valori mu = 0.1, L = 6; mu = 0.1, L = 60.
%Interpretare!

S-ar putea să vă placă și