Primer 2 - Filtriranje šuma

Koristeći MA filter, ukloniti šum signalu iz prvog primera.

Rešenje

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

#define DUZINA 500 // u zadatku se trazi tabela duzine 500 odbiraka

unsigned int signal[DUZINA]; // trazi se da signal bude unipolaran

void generisi_signal(unsigned int s[], int n, int f, int fs, int offset, int ampl ) {
    int i;

    for (i=0; i<n; i++) {
        s[i] = offset + ampl*sin((6.28*f*i)/fs);
    }
}

void dodaj_sum(unsigned int s[], int n, int ampl) {
    int i;

    for (i=0; i<n; i++) {
        s[i] += rand()%ampl;
    }
}

// Funkcija i primeri za koriscenje funkcije se nalaze na adresi:
// https://vlmitrovic.gitbooks.io/pdsp/content/moving-average-filter.html
void MAF (unsigned 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;
    }
}

int main(void) {
    // u bafer koji se zove "signal" i duzine je "DUZINA"
    // smestiti odbirke sinusnog signala frekvencije 70Hz,
    // frekvencija odabiranja je 10kHz
    // posto se trazi da signal bude unipolaran, njegov ofset je 32767
    // posto se trazi da amplituda suma bude 25% amplitude signala
    // formula za racunanje amplituda je sledeca:
    // ampl+(25/100)*ampl = 32768 iz cega sledi da je ampl=26213 sto je amplituda signala
    // a amplituda suma je (25/100)*ampl odnosno 6553
    generisi_signal(signal, DUZINA, 70, 10000, 32767, 26213);
    dodaj_sum(signal, DUZINA, 6553);
    // Primeni MAF
    MAF(signal, DUZINA, 20);

    while(1); // mrtva petlja
}

Rezultat


results matching ""

    No results matching ""