Zadaci
Zadatak 1
Napraviti funkciju koja će bafer dužine 128 odbiraka napuniti jednom periodom signala rampe.
Uputstvo
Prototip funkcije treba da bude:
void ramp_sig(int signal[], int start, int duzina, int amplituda, int smer);
// int signal[] - bafer koji ce biti napunjem odbircima signala
// int start - pozicija bafera odakle ce poceti punjenje
// int duzina - broj odbiraka koji ce biti smesten u bafer
// int amplituda - amplituda signala u Q15 formatu
// int smer - smer rampe
Rešenje
/*
* Signal rampe
* smer = 0 - rampa opadajuca
* smer = 1 - rampa rastuca
*/
void ramp_sig(int signal[], int start, int duzina, int amplituda, int smer) {
int i;
float delta, tmp;
delta = (float)amplituda/(float)duzina;
if (smer) tmp = 0;
else tmp = amplituda;
for (i=start; i<start+duzina; i++) {
signal[i] = (int)tmp;
if (smer) tmp += delta;
else tmp -= delta;
}
}
Zadatak 2
Napraviti funkcije koja će bafer dužine 128 odbiraka napuniti jednom periodom signala:
- kvadrata,
- trougla i
- trapeza.
Uputstvo
Prototipovi funkcija treba da budu:
void kvad_sig(int signal[], int start, int duzina, int amplituda, int duty);
void trou_sig(int signal[], int start, int duzina, int amplituda);
void trap_sig(int signal[], int start, int duzina, int amplituda);
// int signal[] - bafer koji ce biti napunjem odbircima signala
// int start - pozicija bafera odakle ce poceti punjenje
// int duzina - broj odbiraka koji ce biti smesten u bafer
// int amplituda - amplituda signala u Q15 formatu
// int duty - Duty Cicle, odnos signala i pauze u procentima od 0-100
Cilj
Cilj zadatka je da se studenti uopznaju sa karakterističnim oblicima nesinusoidalnih signala.
Zadatak 3*
Napraviti funkcije koja će bafer dužine 128 odbiraka napuniti jednom periodom signala:
- trougla i
- kvadrata.
Funkcije trebaju da koriste obrasce za dobijanje ovih signala, kao zbir sinusoida, koji se nalaze u ovom poglavlju.
Uputstvo
Prvo je potrebno napraviti pomoćnu funkciju koja će generisati sinusni signal.
Prototip funkcije treba da bude:
void sin_sig(int signal[], int duzina, int amplituda, int brPerioda);
// int signal[] - bafer koji ce biti napunjem odbircima signala
// int duzina - broj odbiraka koji ce biti smesten u bafer
// int amplituda - amplituda signala u Q15 formatu
// int brPerioda - broj perioda signala koji ce biti smesten u bafer
Primer funkcije koja generiše rampu prikazuje način na koji se koristi funkcija sig_sin().
/*
* Rampa
* https://en.wikipedia.org/wiki/Sawtooth_wave
*/
void ramp_sin(int signal[], int duzina, int amplituda, int brHarmonika, int smer) {
int i, znak;
int tmp_sig[DUZ];
dcSignal(signal, duzina, 0); // obrisem bafer za svaki slucaj
znak = -1;
for (i=0; i<brHarmonika; i++) {
sin_sig (tmp_sig, duzina, (znak*amplituda)/(i+1), i+1);
dodajSignal (signal, duzina, tmp_sig);
znak *= -1;
}
if (smer) pojacaj(signal, duzina, (-2./_PI));
else pojacaj(signal, duzina, 2./_PI);
}
Koristeći ovu i funkcije iz PDSPlib biblioteke napraviti i funkcije za generisanje trougla i kvadrata.
Prototipovi funkcija treba da bude:
void trou_sin(int signal[], int duzina, int amplituda, int brHarmonika);
void kvad_sin(int signal[], int duzina, int amplituda, int brHarmonika);
// int signal[] - bafer koji ce biti napunjem odbircima signala
// int duzina - broj odbiraka koji ce biti smesten u bafer
// int amplituda - amplituda signala u Q15 formatu
// int brHarmonika - Duty Cicle, odnos signala i pauze u procentima od 0-100
Svaki od signala na slici ima po 10 harmonika.
Cilj
Cilj zadatka je da studenti korišćenjem više sinusnih signala kreiraju karakteristične signale slične signalima iz prvog zadatka. Radeći zadatak studenti trebaju da uoče da se složeni signali kao oni iz prvog zadatka zapravo sastoje od niza prostih sinusnih signala različite amplitude i frekvencije.