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:
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.