17.1 Răspuns în frecvență arbitrar

Abordarea folosită pentru a obține filtrul windoed-sinc, în ultimul capitol, poate fi folosită pentru a proiecta filtre cu virtual orice răspuns în frecvență. Singura diferență este modul în care răspunsul dorit este mutat din domeniul frecvență în domeniul timp. În filtrul windowed-sinc, răspunsul în frecvență și kernel-ul filtrului sunt reprezentate prin ecuații, iar conversia între ele se face prin evaluarea matematică a Transformatei Fourier. În metoda prezentată aici, ambele semnale sunt reprezentate prin șiruri de numere, utilizând program de computer (FFT) pentru a găsi unul din celălalt.

Figura 17-1 prezintă un exemplu de cum funcționează. Răspunsul în frecvență dorit să fie produs de filtru este arătat în (a). Pentru a spune ceva, este foarte neregulat și ar fi practic imposibil să se obțină cu ajutorul electronicii analogice. Acest răspuns ideal în frecvență este definit de o serie de numere care au fost selectate, nu de o anumită ecuație matematică. În acest exemplu, există 513 eșantioane distribuite între 0 și 0,5 din rata de eșantionare. Mai multe puncte pot fi folosite pentru a reprezenta mai bine răspunsul dorit în frecvență, în timp ce un număr mai mic poate fi necesar pentru a reduce timpul de calcul pe durata proiectării filtrului. Dar, aceste preocupări sunt de obicei mici, iar 513 este o lungime bună pentru majoritatea aplicațiilor.

Pe lângă șirul de magnitudine dorită prezentată în (a), trebuie să existe un șir de fază corespunzător cu aceeași lungime. În acest exemplu, faza răspunsului în frecvență dorit este în întregime zero (acest șir nu este prezentat în fig. 17-1). La fel ca în șirul de magnitudine, șirul de faze poate fi încărcat cu orice curbă arbitrară pe care doriți să o producă filtrul. Dar, rețineți că primul și ultimul eșantion (adică 0 și 512) ale șirului de fază trebuie să aibă o valoare de zero (sau un multiplu de 2π, care este același lucru). Răspunsul în frecvență poate fi de asemenea specificat în formă dreptunghiulară prin definirea intrărilor de șir pentru părțile reală și imaginară, în locul utilizării magnitudinei și fazei.

Următorul pas este să aplicați DFT Inversă pentru a muta filtrul în domeniul timp. Cea mai rapidă modalitate de a face acest lucru este de a converti domeniul frecvență la formă dreptunghiulară, apoi utilizați FFT inversă. Aceasta are ca rezultat un semnal de 1024 eșantioane care rulează de la 0 la 1023, după cum se arată în (b). Acesta este răspunsul la impuls care corespunde răspunsului în frecvență pe care îl dorim; dar, el nu este potrivit pentru utilizarea ca un kernel de filtru (mai multe despre acest lucru în scurt timp). La fel ca în ultimul capitol, trebuie să fie deplasat, trunchiat și aplicată o fereastră. În acest exemplu, vom proiecta kernelul filtru cu M= 40, adică 41 de puncte care rulează de la eșantionul 0 la eșantionul 40. Tabelul 17-1 prezintă un program de computer care convertește semnalul din (b) în kernelul de filtru prezentat în (c). Ca și în cazul filtrului windowed-sinc, punctele din apropierea capetelor kernelului filtrului sunt atât de mici, încât par să fie zero când sunt reprezentate grafic. Nu faceți greșeala de a gândi că pot fi șterse!

Figura 17-1 Exemplu de proiectare filtru FIR.

Figura (a) prezintă răspunsul în frecvență dorit, cu 513 eșantioane rulând între 0 și 0,5 din rata de eșantionare. Aplicând DFT inversă rezultă în (b) un răspuns la impuls dedublat (alias) compus din 2014 eșantioane. Pentru a forma nucleul filtrului, (c), răspunsul la impuls dedublat este trunchiat la M-1 eșantioane, deplasat la dreapta cu M/2 eșantioane și multiplicat cu o fereastră Hamming sau Blackman. În acest exemplu, M este 40. Programul din Tabelul 17-1 arată cum se face aceasta. Nucleu filtrului este testat prin umplerea cu zerouri și aplicarea DFT, realizând răspunsul în frecvență actual al filtrului, (d).

Ultimul pas este testarea kernelului de filtru. Acest lucru se face aplicând DFT (folosind FFT) pentru a găsi răspunsul real în frecvență, așa cum se arată în (d). Pentru a obține o rezoluție mai bună în domeniul frecvență, umpleți kernelul filtrului cu zerouri înainte de FFT. De exemplu, utilizând un total de 1024 eșantioane (41 în kernelul filtrului plus 983 zerouri), rezultă 513 eșantioane între 0 și 0,5.

După cum se arată în figura 17-2, lungimea kernelului filtrului determină cât de bine răspunsul în frecvență real corespunde răspunsului dorit în frecvență. Performanța excepțională a filtrelor digitale FIR este evidentă; practic orice răspuns în frecvență poate fi obținut dacă se utilizează un kernel de filtru suficient de lung.

Aceasta este întreaga metodă de proiectare; totuși, există o problemă teoretică subtilă care trebuie clarificată. De ce nu este posibil să se folosească direct răspunsul la impuls prezentat în 17-1b ca nucleu de filtru? La urma urmei, dacă (a) este Transformata Fourier a lui (b), convoluția unui semnal de intrare cu (b) nu ar produce răspunsul exact în frecvență dorit? Răspunsul este nu, și iată de ce.

La proiectarea unui filtru personalizat, răspunsul în frecvență dorit este definit de valorile dintr-o matrice. Acum, considerați acest lucru: ce face răspunsul în frecvență între punctele specificate? Pentru simplitate, două cazuri pot fi imaginate, unul "bun" și unul "rău". În cazul "bun", răspunsul în frecvență este o curbă uniformă între eșantioanele definite. În cazul "rău", există fluctuații sălbatice între. Din nefericire, răspunsul la impuls din (b) corespunde răspunsului în frecvență "rău". Acest lucru poate fi arătat prin umplerea cu un număr mare de zerouri și apoi aplicând DFT. Răspunsul în frecvență obținut prin această metodă va arăta comportamentul haotic între eșantioanele definite inițial și ar părea îngrozitor.

Pentru a înțelege acest lucru, imaginați-vă că forțăm răspunsul în frecvență să fie ceea ce dorim definindu-l la un număr infinit de puncte între 0 și 0,5. Adică, creăm o curbă continuă. DTFT inversă este apoi folosită pentru a găsi răspunsul la impuls, care va fi infinit în lungime. Cu alte cuvinte, răspunsul "bun" în frecvență corespunde unui lucru care nu poate fi reprezentat într-un computer, un răspuns la impuls infinit de lung. Atunci când reprezentăm spectrul de frecvență cu N/2 eșantioane, în domeniu timp sunt furnizate numai N puncte, ceea ce face ca el să nu poată conține corect semnalul. Rezultatul este că răspunsul la impuls infinit de lung se dedublează (alias-uri) în cele N puncte. Când apare această aliasing, răspunsul în frecvență se schimbă de la "bun" la "rău". Din fericire, aplicarea unei ferestre răspunsului la impuls de N puncte reduce foarte mult această aliasing, oferind o curbă netedă între eșantioanele domeniului frecvență.

Proiectarea unui filtru digital pentru a produce un răspuns dat în frecvență este destul de simplă. Partea dificilă constă în găsirea răspunsului în frecvență de folosit. Să ne uităm la unele strategii utilizate în DSP pentru a proiecta filtre personalizate.

Secțiunea următoare: Deconvoluția