Zadaci za vežbu
Zadatak 1 (2018)
- Generisati lookup tabelu, dužine 64 odbiraka, za jednu periodu bipolarnog sinusnog signala, tako da vrednosti budu u Q15 formatu. (
LookupTabela initQSinLookup(int duzina);
) - Napraviti funkciju koja će vraćati vrednost koristeci lookup tabelu napravljenu u prethodnoj tački. (
long lqsin(int d, int a, q15 x, LookupTabela t);
) - Uporediti vreme rada novonapravljene funkcije i funkcije
sin(x)
iz math.h biblioteke. - Generisati sa obe funkcije dva sinusna signala duzine 512 odbiraka, uporediti njihove grafove.
- Prepraviti funkciju iz tačke 2 tako da vrednosti koje se ne nalaze u tabeli, računa interpolacijom. (
long qsin(int d, int a, q15 x, LookupTabela t);
) - Generisati, koristeći funkciju iz tačke 5, sinusni signal duzine 512 odbiraka i uporediti ga sa grafovima iz tačke 4.
- Koristeći funkcije
lqsin()
iqsin()
, napraviti funkcijelqcos()
iqcos()
koje računaju .
Cilj
Cilj je da studenti vide kako se:
- Generišu lookup tabele,
- Konvertuju brojevi iz pokretnog u nepokretni zarez,
- Koristi Q15 format zapisa brojeva u nepokretnom zarezu,
- Koriste lookup tabele za generisanje signala,
- Radi linearna interpolacija,
- Razliku u vremenu izvršavanja programa u pokretnom i nepokretnom zarezu i
- Razliku u vremenu izvršavanju funkcija kada koriste lookup tabele i kada računaju triginometrijske vrednosti.
Rešenje
Ukoliko se rešenje ne vidi kako treba, uraditi refreš stranice ili klknuti na link.
Zadatak 2
- Koristeći funkciju za generisanje šuma, i funkcije za manipulaciju signalom iz prethodne vezbe, napraviti funkciju koja će generisati bipolarni šum zadate amplitude u Q15 formatu.
- Dodati jednoj periodi signala sinusoide duzine 256 odbiraka signal šuma u vrednosti od 10% maksimalne amplitude signala. Voditi računa da novonastali signal ne uđe u zasićenje.
- Dobijenu bipolarnu zašumljenu sinusoidu pripremiti za izbacivanje na unipolarni DAC čiji je Vref 3.3V, tako da maksimalna amplituda signala bude 2V.
Uputstvo
Prototip funkcije iz tačke 1 treba da bude:
void beliSumA(int buf[], int duz, int amplituda);
// int buff[] - bafer koji ce biti napunjen odbircima signala
// int duz - duzina bafera
// int amplituda - amplituda signala u Q15 formatu
Za rešavanje zadatka koristiti funkcije iz biblioteke PDSPlib i to:
void beliSum(int buf[], int duz);
void dodajDC(int buf[], int duz, int dc);
void pojacaj(int buf[], int duz, float amp);
void dodajSignal(int a[], int duz, int b[]);
Zadatak 3 (2018)
- Generisati lookup tabelu, dužine 64 odbirka, koja sadrži periode sinusnog signala.
- Po ugledu na prvi zadatak napraviti funkciju koja koristeći tu lookup tabelu računa .
- Po ugledu na prvi zadatak napraviti funkciju koja koristeći istu lookup tabelu računa .
- Uporediti vremena rada i tačnost svih funkcija za računanje i koje smo radili na ovim vežbama.
Uputstvo
Zbog uštede u prostoru (memorijskom) ili povećanja preciznosti (na uštrb brzine) moguće je računati koristeći lookup tabelu koja sadrži vrednosti za u opsegu od do .
Na slici je prikazana sinusoida u opsegu od do . Vidimo da se deo krive u opsegu od do ponavlja. Naime, deo od do je slika u ogledalu, oko vertikalne ose , dela od do . Drugim rečima:
Deo od do ima iste vrednosti kao od do , samo negativne. Tu važe osobine:
Što se tiče kosinusne funkcije, sa grafikona možemo videti da je ona za pomerena u odnosu na sinusnu funkciju. Za kosinus važi:
Detaljnije informacije o transformacijama trigonometrijskih funkcija možete naći na adresi.
U kodu iz prvog zadatka, potrebno je doraditi funkcije:
LookupTabela initQSinLookup(int duzina);
- funkcija treba da generiše četvrtinu signala, a ne ceo signal kao u prvom zadatku.long lqsin(int d, int a, q15 x, LookupTabela t);
- funkcija treba da gleda u kom posegu se nalazi i shodno tome, da uz korišćenje pomenutih trigonometrijskih transformacija, "uzme" potrebnu vrednost iz lookup tabele.long qsin(int d, int a, q15 x, LookupTabela t)
- funkciju qsin koja još više povećava preciznost računajući vrednosti koje nema u lookup tabeli korišćenjem linearne interpolacije, potrebno je prilagoditi novoj lookup tabeli.
Parametri funkcija lqsin(...)
i qsin(...)
su:
int d
- DC7 ofset. Kada jed=0
onda je funkcija simetrična u odnosu na y osu. Ako jed
pozitivan broj funkcija se "podiže" iznad y ose, a za negativand
"spušta" ispod y ose.int a
- Amplituda funkcije.q15 x
- Ugao u Q15 formatu.
Rešenje
Ukoliko se rešenje ne vidi kako treba, uraditi refreš stranice ili klknuti na link.