15.5 Implementarea recursivă

Un avantaj extraordinar al filtrului medie mobilă este acela că poate fi implementat cu un algoritm care este foarte rapid.

Figura 15-4 Răspunsul în frecvență al nucleelor ferestrei Blackman și filtrului Gaussian.

Ambele aceste filtre realizează atenuare mai bună în stopband decât filtrul medie mobilă. Aceasta nu are avantaj în eliminarea zgomotului aleator din semnalele codificate în domeniul timp, dar poate fi utilă în probleme de domeniu mixat. Dezavantajul acestor filtre este că ele trebuie să utilizeze convoluția, un algoritm teribil de lent.

Pentru a înțelege acest algoritm, imaginați trecerea unui semnal de intrare, x[ ], printr-un filtru medie mobilă de 7 puncte pentru a forma un semnal de ieșire, y[ ]. Acum, uitați-vă la modul în care se calculează două puncte de ieșire adiacente, y[50] și y[51]:

Acestea sunt aproape aceleași calcule; punctele x[48] ​​până la x[53] trebuie adunate pentru y[50] și din nou pentru y[51]. Dacă y[50] a fost deja calculat, cel mai eficient mod de a calcula y[51] este:

Odată ce y[51] a fost găsit utilizând y[50], atunci y[52] poate fi calculat din eșantionul y[51] și așa mai departe. După ce primul punct este calculat în y[ ], toate celelalte puncte pot fi găsite doar cu o singură adunare și scădere per punct. Acest lucru poate fi exprimat în ecuația:

Ecuația 15-3 Implementarea recursivă a filtrului medie mobilă.
În această ecuație, x[ ] este semnalul de intrare, y[ ] este semnalul de ieșire, M este numărul de puncte în media mobilă (un număr impar). Înainte ca această ecuație să poată fi utilizată, primul punct din semnal trebuie să fie calculat utilizând o însumare standard.

Observați că această ecuație utilizează două surse de date pentru a calcula fiecare punct din ieșire: puncte de la intrare și punctele calculate anterior de la ieșire. Aceasta se numește o ecuație recursivă, ceea ce înseamnă că rezultatul unui calcul este utilizat în calcule viitoare. (Termenul "recursiv" are și alte semnificații, în special în domeniul științei calculatoarelor). Capitolul 19 discută mai multe detalii despre o varietate de filtre recursive. Rețineți că filtrul recursiv medie mobilă este foarte diferit de filtrele recursive tipice. În special, cele mai multe filtre recursive au un răspuns la impuls infinit de lung (IIR), compus din sinusoide și exponențiale. Răspunsul la impuls al mediei mobile este un impuls dreptunghiular (răspuns la impuls finit, sau FIR).

Acest algoritm este mai rapid decât alte filtre digitale din mai multe motive. Mai întâi, există doar două calcule pe punct, indiferent de lungimea kernelului filtru. În al doilea rând, adunarea și scăderea sunt singurele operații matematice cerute, în timp ce majoritatea filtrelor digitale necesită multiplicare, consumatoare de timp. În al treilea rând, schema de indexare este foarte simplă. Fiecare index din Ec. 15-3 se găsește prin adunarea sau scăderea constantelor întregi care pot fi calculate înainte de începerea filtrării (adică p și q). În al patrulea rând, întregul algoritm poate fi realizat cu reprezentare de întregi. În funcție de hardware-ul utilizat, numerele întregi pot fi mai mult decât un ordin de mărime mai rapide decât virgula mobilă.

În mod surprinzător, reprezentarea cu numere întregi funcționează mai bine decât virgula mobilă cu acest algoritm, pe lângă faptul că este mai rapid. Eroarea de rotunjire de la aritmetica virgulei mobile poate produce rezultate neașteptate dacă nu sunteți atent. De exemplu, imaginați-vă un semnal de 10000 eșantioane care este filtrat prin această metodă. Ultimul eșantion din semnalul filtrat conține eroarea acumulată de 10.000 de adăugiri și 10.000 de scăderi. Acest lucru apare în semnalul de ieșire ca o decalare în derivă. Intregii nu au această problemă deoarece nu există o eroare de rotunjire în aritmetică. Dacă trebuie să utilizați virgula mobilă cu acest algoritm, programul din Tabelul 15-2 arată cum se folosește un acumulator cu dublă precizie pentru a elimina această deviere.