MOVING AVERAGE FILTER

Moving Average Filter ili MA filter je jednostavni oblik Low Pass FIR filtera. Najčešće se koristi za otklanjanje šuma iz signala. On računa srednju vrednost izabranog broja (M) odbiraka ulaznog signala. Kako broj M raste, filter (uslovno) bolje radi, odnosno sve bolje usporava brze promene u signalu. Zbog ne tako sjajnog frekventnog odziva, ako se pretera u broju odbiraka (M) filtera, filter može, mimo naše želje, pojačati ili neadekvatno filtrirati određene frekvencije.

Jednačina MA filtera je:

y[i]=1Mj=0M1x[i+j] y[i] = \frac{1}{M}\sum_{j=0}^{M-1}x[i+j]

gde je:

  • x[] ulazni signal,
  • y[] izlazni signal,
  • M je broj tačaka koje će se usrednjavati.

Primer C koda za implementaciju MA filtera dat je u listingu.

void MAF (int x[], int duz, int M) {
    int i,j,y;
    long suma;
    for (j=0; j<duz-M; j++) {
        suma = 0;
        for (i=j; i<j+M; i++) {
            suma+=x[i];
        }
        y=suma/M;
        x[j]=y;
    }
}

Frekventni odziv filtera prikazan je na slici.


Zadaci

Zadatak 1

Implementirati program koji u vektor bafer smešta 500 odbirka sinusnog signala frekvencije 100Hz, pripremljenog za izbacivanje na 12 bitni unipolarni konvertor. Učestanost odabiranja je 20KHz. Provera rada se vrši u simulatoru.

Signalu dodati šum proizvoljne amplitude.

Primenom Moving Average Filtera ukloniti šum iz signala.

Rešenje

#include <math.h>
#include <stdlib.h>

#define BRODB 500
#define _2PI 6.28

unsigned int bafer[BRODB];

void MAF (int x[], int duz, int M);

int main(void) {
    int i;

    // Generisi signal
    int offset = 2048;  // dc offset
    int ampl = 1023;  // amplituda
    int freq = 100;  // frekvencija
    int fs = 20000; // sample rate
    for (i=0; i<BRODB; i++) {
        bafer[i] = offset + ampl*sin(_2PI*freq*i/fs);
    }

    // Dodaj sum amplitude 100
    ampl=100;
    for (i=0; i<BRODB; i++) {
        bafer[i] += rand()%ampl;
    }

    // Primeni MAF
    MAF(bafer, BRODB, 10);

    while(1);
}

Zadatak 2

Implementirati program koji u vektor bafer smešta 500 odbirka složenog signala pripremljenog za izbacivanje na 12 bitni unipolarni konvertor. Učestanost odabiranja je 20KHz, a signal se sastoji od dve sinusoide učestanosti f1=50Hz i f2=1170Hz istih amplituda. Amplitude izabrati tako da ne dođe do izobličenja složenog signala. Provera rada se vrši u simulatoru.

Primenom MA filtera ukloniti signal frekvencija 1170Hz. Probati filter sa 51 tačkom i 55 tačaka. Objasniti zašto je rezultat lošiji za veći broj odbiraka?


Zadatak 3*

Optimizovati MAF algoritam, tako da ima manji broj prolaza odnosno da se brže izvršava.

results matching ""

    No results matching ""