Primer 3 - Zbir dve sinusoide
Generisati lookup tabelu za signal koji je nastao zbirom dva sinusna signala frekvencija 70Hz i 1500Hz. Dužina tabele je 500 odbiraka, a učestanost odabiranja je 6kHz. Odbirci signala treba da budu u Q15 formatu spremni za izbacivanje na 16 bitni unipolarni DA.
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
// Obratiti paznju na razliku ove funkcije i iste funkcije iz prethodnog zadatka
void generisi_signal(unsigned int s[], int n, int f1, int f2, int fs, int offset, int ampl ) {
int i;
for (i=0; i<n; i++) {
s[i] = offset + (ampl>>1)*sin((6.28*f1*i)/fs) + (ampl>>1)*sin((6.28*f2*i)/fs);
// Siftovanje za jedno mesto udesno (ampl>>1) je jednako deljenju sa 2
}
}
int main(void) {
// u bafer koji se zove "signal" i duzine je "DUZINA"
// smestiti odbirke zbira sinusnih signala frekvencija 70Hz i 1500Hz
// frekvencija odabiranja je 6kHz
// posto se trazi da signal bude unipolaran, njegov ofset je 32767
// i amplituda je 32767
generisi_signal(signal, DUZINA, 70, 1500, 6000, 32767, 32767);
while(1); // mrtva petlja
}