Het moving average filter (voortschrijdend gemiddelde filter) is een van de meest gebruikte FIR filters vanwaar zijn conceptuele eenvoud en omdat deze gemakkelijk te implementeren is. Het onderstaande diagram laat zien dat er geen vermenigvuldigingen nodig zijn, alleen toevoegingen en een vertragingslijn. Hierdoor is het zeer geschikt voor extreem laag vermogen embedded devices met capaciteit voor basisberekeningen.
Ondanks zijn eenvoud is het moving average filter echter optimaal voor het reduceren van willekeurige ruis met behoud van een scherpe stapreactie. Hierdoor is het een veelzijdige bouwsteen is voor signaalverwerking voor slimme sensor toepassingen.
Een moving average filter met lengte \(L\) voor input signaal \(x(n)\) kan als volgt worden gedefinieerd:
\(y(n)=\large{\frac{1}{L}}\normalsize{\sum\limits_{k=0}^{L-1}x(n-k)}\) for \(\normalsize{n=0,1,2,3….}\)
Hierbij stelt een eenvoudige vuistregel dat de mate van ruisreductie gelijk is aan de vierkantswortel van het aantal punten in het gemiddelde. Een voortschrijdend gemiddelde van lengte 9 zal bijvoorbeeld resulteren in een factor 3 ruisreductie.
Frequentierespons van een Moving Average-filter van lengte 9. Let op de slechte demping van de stopband bij ongeveer -20dB.
Voordelen
- Meest gebruikte digitale laagdoorlaatfilter
- Optimaal voor het verminderen van willekeurige ruis met behoud van een scherpe stapreactie
- Goede smoother (tijdsdomein)
- Eenheidsgewaardeerde filtercoëfficiënten, geen MAC-bewerkingen (vermenigvuldigen en accumuleren) nodig
- Conceptueel simpel te implementeren
Nadelen
- Inflexibele frequentierespons: het aanzetten van een geconjugeerd nulpaar resulteert in niet-communautaire coëfficiënten
- Slecht laagdoorlaatfilter (frequentiedomein): langzame roll-off en slechte stopband-dempingseigenschappen
Implementatie
Het moving average filter kan in ASN FilterScript als volgt worden geimplementeerd:
ClearH1; // clear primary filter from cascade Main(); Hd=movaver(8,"symbolic"); // design an 8th order MA Num = getnum(Hd); // define numerator coefficients Den = {1}; // define denominator coefficients Gain = getgain(Hd); // define gain
Een meer computationeel efficiënte implementatie van het MA-filter wordt hier besproken.
Verder lezen
- Understanding Digital Signal Processing, Chapter 5, R. G. Lyons
- The Scientist and Engineer’s Guide to Digital Signal Processing, Chapter 15, Steven W. Smith
Leave a Reply
Want to join the discussion?Feel free to contribute!