laborator nr:1

7
MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT DIN MOLDOVA Facultatea de Matematică şi Informatică Specialitatea Informatică Lucrare de laborator la disciplina Aplicatii pentru dispozitive mobile Tema: Filtre numerice recursive şi nerecursive. Elaborat : ***.

Upload: radu-rosca

Post on 10-Feb-2016

212 views

Category:

Documents


0 download

DESCRIPTION

Aplicatii pentru dispozitive mobile

TRANSCRIPT

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA DE STAT DIN MOLDOVA

Facultatea de Matematică şi Informatică

Specialitatea Informatică

Lucrare de laboratorla disciplina

Aplicatii pentru dispozitive mobile

Tema: Filtre numerice recursive și nerecursive.

Elaborat : ***.

Verificat: **.

Chișinău, 2015

Un filtru numeric reprezintă un sistem liniar prin care „trece” un semnal. Din punct de vedere al structurii algoritmului filtrele numerice se clasifică în două mari categorii – recursive și nerecursive.

Filtre nerecursiveAceste filtre au specific faptul că iesirea y[n] a filtrului depinde doar de valoarea

ultimelor N eșantioane din secvența de intrare x[n] și de valoarea celor N coeficienți ai filtrului.Acest tip de filtru este definit de algoritmul următor:

Structura unui filtru nerecursiv:

Reprezentarea grafică a unui filtru prezintă foarte intuitiv circulația fluxului de date. Se mai numește și filtru „transversal”. Observații:

• Blocul grafic notat cu z−1 reprezintă „celula de întîrziere”. Dacă la intrarea ei se află eșantionul curent, atunci la ieșirea ei se află eșantionul anterior acestuia. Din punct de vedere fizic acest lucru este ușor de realizat: dacă secvența de date de intrare ocupă cronologic un anumit spațiu de memorie, și dacă eșantionul curent este x[n] , atunci x[n-1] reprezintă eșantionul mai vechi cu o perioadă de eșantionare, și care ocupă locația de memorie învecinată.

• Fiecare eșantion este multiplicat cu unul din cei N coeficienți ai filtrului. Acest lucru este ilustrat grafic de valoarea h[k] trecută în triunghiul aferent fiecărui eșantion. Adesea coeficienții nu se mai desenează în acel „triunghi” ci sunt trecuți alături de linia aferentă eșantionului.

• Valoarea curentă y[n] a ieșirii filtrului rezultă prin însumarea tuturor produselor, conform relației definite de algoritm.

Pentru implementarea unui algoritm de filtru nerecursiv, trebuie:• să existe spațiu de memorie suficient și să fie memorate cronologic, ultimele (N-1)

eșantioane din secvența de intrare, inclusiv eșantionul curent;• să fie cunoscuți cei N coeficienți ai filtrului;• să existe alocat un spațiu de memorare pentru cei N coeficienți ai filtrului;• să se efectueze cele N înmulțiri;• să se efectueze cele (N-1) adunări.

Filtre recursiveLa acest tip de filtre ieșirea y[n] depinde atît de valoarea ultimelor N eșantioane din

secvența de intrare x[n] , cît și de valoarea ultimelor M eșantioane din chiar secvența de ieșire. Acest tip de filtru este definit de algoritmul următor:

Structura unui filtru recursiv:

După cum se observă, atît din relația de definiție, cît și din structura filtrului recursiv, însumarea pentru termenii recursivi (cei ce implică secvența de iesire), nu îl include și pe y[n] , ci doar valori anterioare ale acestuia începand cu y[n-1], deoarece este evident că ieșirea nu poate depinde de ea insăsi, atata vreme cît ea nu este determinată.Structura de bază a filtrului recursiv este cea din figura anterioară, numită forma transversală.

Există și alte forme in care poate fi organizată structura unui filtru recursiv. Spre exemplu, reașezînd forma transversală din figura în felul următor:

și observand că cele două blocuri marcate cu linie punctată sunt comutative, se obține structura ce urmează:

În această figură celulele de întîrziere învecinate au funcții identice, de aceea se pot înlocui cu cîte o singură celulă de întîrziere. Rezultă astfel structura numită forma canonică paralel:

Avantajul acestei forme față de forma transversală este acela că implementarea algoritmului necesită un număr mai mic de celule de întîrziere. Forma canonică paralel obligă în schimb la folosirea unei variabile intermediare.

Implementarea în limbajul de programare Java a unui filtru nerecursiv:

public static void filtruNR() {

for (int i = 0; i < N; i++) { n[i] = i; } for (int i = 0; i < N; i++) { for (int j = 0; j <= M; j++) { if (n[i] - j >= 0) { yn[i] += a[j] * xn[n[i] - j]; } } } }

Rezultatul execuției:

Un filtru recursiv în Java:

public static void filtruR() { for (int i = 0; i < N; i++) { n[i] = i; } for (int i = 0; i < N; i++) { for (int j = 0; j <= M; j++) { if (n[i] - j >= 0) { yn[i] += a[j] * xn[n[i] - j]; } } for (int k = 1; k <= K; k++) { { if (n[i] - k >= 0 && i > 0) { yn[i] += b[k - 1] * yn[n[i] - k]; } } } } }

Rezultatul execuției: