Zadaci za vežbu

Zadatak 1 (2018)

  1. Generisati lookup tabelu, dužine 64 odbiraka, za jednu periodu bipolarnog sinusnog signala, tako da vrednosti budu u Q15 formatu. (LookupTabela initQSinLookup(int duzina);)
  2. Napraviti funkciju koja će vraćati vrednost d+asin(x)d+a*sin(x) koristeci lookup tabelu napravljenu u prethodnoj tački. (long lqsin(int d, int a, q15 x, LookupTabela t);)
  3. Uporediti vreme rada novonapravljene funkcije i funkcije sin(x) iz math.h biblioteke.
  4. Generisati sa obe funkcije dva sinusna signala duzine 512 odbiraka, uporediti njihove grafove.
  5. 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);)
  6. Generisati, koristeći funkciju iz tačke 5, sinusni signal duzine 512 odbiraka i uporediti ga sa grafovima iz tačke 4.
  7. Koristeći funkcije lqsin() i qsin(), napraviti funkcije lqcos() i qcos() koje računaju cos(x)cos(x).

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

  1. 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.
  2. 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.
  3. 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)

  1. Generisati lookup tabelu, dužine 64 odbirka, koja sadrži 14\frac{1}{4} periode sinusnog signala.
  2. Po ugledu na prvi zadatak napraviti funkciju koja koristeći tu lookup tabelu računa d+asin(x)d+a*sin(x).
  3. Po ugledu na prvi zadatak napraviti funkciju koja koristeći istu lookup tabelu računa d+acos(x)d+a*cos(x).
  4. Uporediti vremena rada i tačnost svih funkcija za računanje sin(x)sin(x) i cos(x)cos(x) 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 sin(x)sin(x) koristeći lookup tabelu koja sadrži vrednosti za sin(x)sin(x) u opsegu od 00 do π2\frac{\pi}{2}.

Na slici je prikazana sinusoida u opsegu od π-\pi do π\pi. Vidimo da se deo krive u opsegu od 00 do π2\frac{\pi}{2} ponavlja. Naime, deo od π2\frac{\pi}{2} do π\pi je slika u ogledalu, oko vertikalne ose π2\frac{\pi}{2}, dela od 00 do π2\frac{\pi}{2}. Drugim rečima:

sin(x)=sin(πx) sin(x)=sin(\pi-x)

Deo od π-\pi do 00 ima iste vrednosti kao od 00 do π\pi, samo negativne. Tu važe osobine:

sin(x)=sin(x) sin(-x)=-sin(x)

sin(xπ2)=sin(x) sin(x-\frac{\pi}{2})=-sin(x)

Što se tiče kosinusne funkcije, sa grafikona možemo videti da je ona za π2\frac{\pi}{2} pomerena u odnosu na sinusnu funkciju. Za kosinus važi:

cos(x)=sin(π2x) cos(x)=sin(\frac{\pi}{2}-x)

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 xx 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 je d=0 onda je funkcija simetrična u odnosu na y osu. Ako je d pozitivan broj funkcija se "podiže" iznad y ose, a za negativan d "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.

results matching ""

    No results matching ""