laborator1,2

Upload: radu-rosca

Post on 05-Jan-2016

213 views

Category:

Documents


0 download

TRANSCRIPT

MINISTERUL EDUCAIEI AL REPUBLICII MOLDOVA UNIVERSITATEA DE STAT DIN MOLDOVA Facultatea de Matematic i InformaticSpecialitatea Informatic

Lucrare de laboratorla disciplinaAplicatii pentru dispozitive mobileTema: Filtre numerice recursive i nerecursive.

Elaborat: Roca Radu.Verificat: Objelean N.

Chiinu, 2015Un 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 eantioane din secvena de intrare x[n] i de valoarea celor N coeficieni ai filtrului.Acest tip de filtru este definit de algoritmul urmtor:

Structura unui filtru nerecursiv:

Reprezentarea grafic a unui filtru prezint foarte intuitiv circulaia fluxului de date. Se mai numete i filtru transversal. Observaii:

Blocul grafic notat cu z1 reprezint celula de ntrziere. Dac la intrarea ei se afl eantionul curent, atunci la ieirea ei se afl eantionul anterior acestuia. Din punct de vedere fizic acest lucru este uor de realizat: dac secvena de date de intrare ocup cronologic un anumit spaiu de memorie, i dac eantionul curent este x[n] , atunci x[n-1] reprezint eantionul mai vechi cu o perioad de eantionare, i care ocup locaia de memorie nvecinat. Fiecare eantion este multiplicat cu unul din cei N coeficieni ai filtrului. Acest lucru este ilustrat grafic de valoarea h[k] trecut n triunghiul aferent fiecrui eantion. Adesea coeficienii nu se mai deseneaz n acel triunghi ci sunt trecui alturi de linia aferent eantionului. Valoarea curent y[n] a ieirii filtrului rezult prin nsumarea tuturor produselor, conform relaiei definite de algoritm.

Pentru implementarea unui algoritm de filtru nerecursiv, trebuie: s existe spaiu de memorie suficient i s fie memorate cronologic, ultimele (N-1) eantioane din secvena de intrare, inclusiv eantionul curent; s fie cunoscui cei N coeficieni ai filtrului; s existe alocat un spaiu de memorare pentru cei N coeficieni ai filtrului; s se efectueze cele N nmuliri; s se efectueze cele (N-1) adunri.

Filtre recursiveLa acest tip de filtre ieirea y[n] depinde att de valoarea ultimelor N eantioane din secvena de intrare x[n] , ct i de valoarea ultimelor M eantioane din chiar secvena de ieire. Acest tip de filtru este definit de algoritmul urmtor:

Structura unui filtru recursiv:

Dup cum se observ, att din relaia de definiie, ct i din structura filtrului recursiv, nsumarea pentru termenii recursivi (cei ce implic secvena de iesire), nu l include i pe y[n] , ci doar valori anterioare ale acestuia ncepand cu y[n-1], deoarece este evident c ieirea nu poate depinde de ea inssi, atata vreme ct 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, reaeznd forma transversal din figura n felul urmtor:

i observand c cele dou blocuri marcate cu linie punctat sunt comutative, se obine structura ce urmeaz:

n aceast figur celulele de ntrziere nvecinate au funcii identice, de aceea se pot nlocui cu cte o singur celul de ntrziere. Rezult astfel structura numit forma canonic paralel:

Avantajul acestei forme fa de forma transversal este acela c implementarea algoritmului necesit un numr mai mic de celule de ntrziere. 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 = 0) { yn[i] += a[j] * xn[n[i] - j]; } } } }

Rezultatul execuiei:

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 = 0) { yn[i] += a[j] * xn[n[i] - j]; } } for (int k = 1; k = 0 && i > 0) { yn[i] += b[k - 1] * yn[n[i] - k]; } } } } }

Rezultatul execuiei: