Bazele filtrelor FIR
1.1 Ce sunt „filtrele FIR?”
Filtrele FIR sunt unul dintre cele două tipuri primare de filtre digitale utilizate în aplicațiile de procesare digitală a semnalelor (DSP), celălalt tip fiind IIR.
1.2 Ce înseamnă „FIR”?
„FIR” înseamnă „răspuns finit la impulsuri”. Dacă introduceți un impuls, adică un singur eșantion „1” urmat de mai multe eșantioane „0”, vor ieși zerouri după ce eșantionul „1” și-a făcut drumul prin linia de întârziere a filtrului.
1.3 De ce este răspunsul la impuls „finit”?”
În cazul obișnuit, răspunsul la impuls este finit deoarece nu există reacție în FIR. Lipsa feedback-ului garantează că răspunsul la impuls va fi finit. Prin urmare, termenul „răspuns finit la impuls” este aproape sinonim cu „fără reacție”.
Cu toate acestea, dacă se utilizează reacție și totuși răspunsul la impuls este finit, filtrul este totuși un FIR. Un exemplu este filtrul cu medie mobilă, în care al N-lea eșantion anterior este sustras (realimentat) de fiecare dată când intră un nou eșantion. Acest filtru are un răspuns finit la impuls chiar dacă folosește feedback: după N eșantioane de impuls, ieșirea va fi întotdeauna zero.
1.4 Cum se pronunță „FIR?”
Cei care pronunță „FIR”, unii spun literele F-I-R; alții pronunță ca și cum ar fi un tip de copac. Noi preferăm copacul. (Diferența este dacă vorbești despre un filtru F-I-R sau despre un filtru FIR.)
1.5 Care este alternativa la filtrele FIR?
Filtrele DSP pot fi, de asemenea, „Infinite Impulse Response” (IIR). (Vezi dspGuru’s IIR FAQ.) Filtrele IIR folosesc feedback, astfel că atunci când introduceți un impuls, ieșirea sună teoretic la infinit.
1.6 Cum se compară filtrele FIR cu filtrele IIR?
Care dintre ele are avantaje și dezavantaje. În general, însă, avantajele filtrelor FIR depășesc dezavantajele, astfel că sunt folosite mult mai mult decât filtrele IIR.
1.6.1 Care sunt avantajele filtrelor FIR (în comparație cu filtrele IIR)?
În comparație cu filtrele IIR, filtrele FIR oferă următoarele avantaje:
- Pot fi proiectate cu ușurință pentru a fi „în fază liniară” (și de obicei sunt). Mai simplu spus, filtrele cu fază liniară întârzie semnalul de intrare, dar nu-i distorsionează faza.
- Sunt simplu de implementat. Pe majoritatea microprocesoarelor DSP, calculul FIR poate fi realizat prin buclarea unei singure instrucțiuni.
- Sunt potrivite pentru aplicații cu mai multe rate. Prin multi-rata, ne referim fie la „decimare” (reducerea ratei de eșantionare), fie la „interpolare” (creșterea ratei de eșantionare), fie la ambele. Fie că este vorba de decimare sau de interpolare, utilizarea filtrelor FIR permite omiterea unora dintre calcule, oferind astfel o importantă eficiență computațională. În schimb, dacă se folosesc filtre IIR, fiecare ieșire trebuie calculată individual, chiar dacă acea ieșire va fi eliminată (astfel încât feedback-ul va fi încorporat în filtru).
- Acestea au proprietăți numerice dezirabile. În practică, toate filtrele DSP trebuie să fie implementate folosind aritmetica de precizie finită, adică un număr limitat de biți. Utilizarea aritmeticii de precizie finită în filtrele IIR poate cauza probleme semnificative din cauza utilizării retroacțiunii, dar filtrele FIR fără retroacțiune pot fi de obicei implementate utilizând mai puțini biți, iar proiectantul are de rezolvat mai puține probleme practice legate de aritmetica neideală.
- Pot fi implementate utilizând aritmetica fracționară. Spre deosebire de filtrele IIR, este întotdeauna posibil să se implementeze un filtru FIR folosind coeficienți cu magnitudinea mai mică de 1,0. (Dacă se dorește, câștigul global al filtrului FIR poate fi ajustat la ieșirea acestuia). Acesta este un considerent important atunci când se utilizează DSP-uri cu virgulă fixă, deoarece face ca implementarea să fie mult mai simplă.
1.6.2 Care sunt dezavantajele filtrelor FIR (în comparație cu filtrele IIR)?
În comparație cu filtrele IIR, filtrele FIR au uneori dezavantajul că necesită mai multă memorie și/sau calcul pentru a obține o anumită caracteristică de răspuns a filtrului. De asemenea, anumite răspunsuri nu sunt practic de implementat cu filtre FIR.
1.7 Ce termeni sunt utilizați în descrierea filtrelor FIR?
- Răspunsul la impuls – „Răspunsul la impuls” al unui filtru FIR este de fapt doar setul de coeficienți FIR. (Dacă introduceți un „impuls” într-un filtru FIR care constă într-un eșantion „1” urmat de mai multe eșantioane „0”, ieșirea filtrului va fi setul de coeficienți, deoarece eșantionul 1 trece pe lângă fiecare coeficient în parte pentru a forma ieșirea.)
- Tap – Un „tap” FIR este pur și simplu o pereche coeficient/întârziere. Numărul de „taps” FIR, (adesea desemnat ca „N”) este o indicație a 1) cantității de memorie necesară pentru a implementa filtrul, 2) numărului de calcule necesare și 3) cantității de „filtrare” pe care o poate face filtrul; de fapt, mai multe taps înseamnă mai multă atenuare a benzii de oprire, mai puțină ondulație, filtre mai înguste etc.
- Multiply-Accumulate (MAC) – Într-un context FIR, un „MAC” este operația de multiplicare a unui coeficient cu eșantionul de date întârziat corespunzător și de acumulare a rezultatului. FIR-urile necesită, de obicei, un MAC pentru fiecare robinet. Majoritatea microprocesoarelor DSP implementează operația MAC într-un singur ciclu de instrucțiuni.
- Bandă de tranziție – Banda de frecvențe dintre marginile benzii de trecere și ale benzii de oprire. Cu cât banda de tranziție este mai îngustă, cu atât sunt necesare mai multe robinete pentru a implementa filtrul. (O bandă de tranziție „mică” are ca rezultat un filtru „ascuțit”.)
- Linie de întârziere – Setul de elemente de memorie care implementează elementele de întârziere „Z^-1” ale calculului FIR.
- Buffer circular – Un buffer special care este „circular” deoarece incrementarea de la capăt face ca acesta să se înfășoare la început, sau deoarece decrementarea de la început face ca acesta să se înfășoare la sfârșit. Tampoanele circulare sunt adesea furnizate de microprocesoarele DSP pentru a implementa „mișcarea” eșantioanelor prin linia de întârziere FIR fără a fi nevoie să mute literalmente datele în memorie. Atunci când un nou eșantion este adăugat în buffer, acesta îl înlocuiește automat pe cel mai vechi.