Primer 1 - Generisanje signala
Generisati lookup tabelu za sinusni signal frekvencije 70Hz. Dužina tabele je 500 odbiraka, a učestanost odabiranja je 10kHz. Odbirci signala treba da budu u Q15 formatu spremni za izbacivanje na 16 bitni unipolarni DA. Signalu dodati šum amplitude 25% od amplitude signala.
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;
}
}
int main(void) {
// u bafer koji se zove "signal" i duzine je "DUZINA"
// smestiti odbirke sinusnog signala frekvencije 70Hz,
// frekvencija odabiranja je 10kHz odnosno 10000Hz
// 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);
while(1); // mrtva petlja
}