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.

fir direct form

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.

Het moving average filter (voortschrijdend gemiddelde filter)

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
ASN Filter Designer box

Download demo now

Licencing information

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *