Sunteți pe pagina 1din 9

Tema I

I.A. Realizaţi un proiect C pentru StarCore140 care să implementeze o funcţie (apelată din main) cu operaţia
descrisă în tabelul de mai jos (fiecare student are o temă). Se va porni de la proiectul dat ca exemplu pe site-ul
cursului. Programul și funcția C vor folosi tipurile de date asociate numerelor fracţionare şi funcţiile intrinseci
specifice DSP StarCore140.
De asemenea se va realiza un program de test Matlab care va genera un număr suficient de valori pentru a se
testa programul C pentru SC140.
Valorile de test generate în Matlab vor fi scrise în fişier/fișiere şi vor fi citite de funcţia main din proiectul C.
Apoi se va apela funcţia implementată şi rezultatele vor fi scrise (tot din main) în fişiere. În Matlab se compară
apoi rezultatele obţinute, evaluându-se inclusiv erorile datorate formatelor de reprezentare.
Tema I.A. se va salva într-un director (folder) cu numele 44gs_IA_Nume_Prenume (unde ‘gs’ e grupa şi
seria). Tema I.A. va conține:
- un fișier Word cu: descrierea programului, detalii de implementare, rezultatele testării și explicații
suplimentare.
- un director cu proiectul StarCore integral (cu programele C și toate subfolderele pe care le are și
proiectul dat ca model pe site, ”test”, inclusiv un subdirector cu programele Matlab de test).

I.B. Folosind proiectul CodeWarrior realizat la tema I.A., optimizaţi funcţia implementată în C folosind
tehnicile de optimizare prezentate în curs (loop merging, loop unroll, split computation, multisample, etc.)
Precizaţi ce tehnici de optimizare aţi aplicat şi indicaţi modificările făcute în program (comentând
instrucţiunile modificate din programul iniţial urmate de modificări). Indicaţi în codul rezultat în limbaj de
asamblare efectul optimizării (instrucțiuni realizate în paralel în același ciclu mașină, transfer multiplu, etc.).
Se vor alege dimensiunile vectorilor/datelor de intrare multiplu de 4 sau valori corespunzătoare astfel încât să
se obțină în fișierele .sl efectele de optimizare dorite (cîte 4 operații aritmetico-logice realizate în același ciclu
mașină simultan cu 2 transferuri din/în memorie).
Se va verifica în Matlab corectitudinea rezultatelor după optimizare (NU se va optimiza un program aferent
temei 1 neverificat sau incorect!).
Tema I.B. se va salva într-un director (folder) cu numele 44gs_IB_Nume_Prenume (unde ‘gs’ e grupa şi
seria).
Tema I.B. va conține:
- un fișier Word cu: descrierea programului optimizat, toate detaliile de implementare (etapele de
optimizare), rezultatele testării (erori de calcul evaluate în Matlab) și explicații suplimentare.
- un director cu proiectul StarCore integral (cu programele C și toate subfolderele pe care le are și
proiectul dat ca model pe site, ”test”, inclusiv un subdirector cu programele Matlab de test).

Cele două părți I.A. și I.B. ale temei, salvate în folderele menționate anterior, se vor salva apoi într-un director
(folder) cu numele 44gs_Nume_Prenume (unde ‘gs’ e grupa şi seria), arhivat cu zip sau rar, fără caractere
diacritice în denumire.

Arhiva (un singur fișier de maxim 2 MB) cu tema se încarcă pe platforma Moodle a cursului.

Termen de predare: cel târziu 18.12.2020 ora 16:00.

Obs:
 dacă numele directorului temei nu corespunde cu formatul precizat, tema nu se corectează.
 dacă data de primire a e-mailului este ulterioară termenului de predare, tema nu se corectează.
 dacă sunt suspiciuni că temele au fost copiate, punctajul acordat va fi negativ (-10 puncte din 100).
Nume Prenume Grupa Tema nr.
ALBĂSTROIU V. Valentin 441C 1
ALEXANDRESCU S.M. Ionuţ-Cosmin 441C 2
AMĂRIUŢEI L.M. Vlad-Gabriel 441C 3
BOGDAN S. Roxana-Iuliana 441C 4
BUCŞARU N. Dana-Veronica 441C 5
BUTUCEANU C. Bogdan Cristian 441C 6
CHIRIŢĂ A.Gh. Ana-Maria 441C 7
CILIBIU C. Alexandru-Daniel 441C 8
CORJĂUCEANU L. Rareş 441C 9
COSTACHE E. Toni-Gabriel 441C 10
COSTACHE G. Alexandru 441C 1
DUMITRU P. Petruţa - Alexandra 441C 2
FOCŞENEANU E.A. Mihai-Alin 441C 3
GÎDIUŢĂ M. Maria 441C 4
IANCU V.F. Valentin-Florin 441C 5
LEONTE Şt. Victor-Lucian 441C 6
LUCHIAN M.Al. Maria-Crista 441C 7
ONOSĂ M. Marcel-Alexandru 441C 8
OŢOIU M.E. Andrei-Mihai 441C 9
PARASCHIV C. Ramona-Elena 441C 10
PÎRCIOG M. Maria-Teodora 441C 1
PÎRVULESCU Gh. Andrei 441C 2
POPESCU Gh. Georgiana 441C 3
SIMION I.M. Vlad 441C 4
STOIAN F. Teodora-Cristina 441C 5
TEODOSESCU M.A. Andrei-Florin 441C 6
TICĂ N. Raluca-Ştefania 441C 7
VIŞAN M.C. Alexandru-Robert 441C 8
VOINEA V. Cristina Marina 441C 9
VORNICU V. Delia-Sevastiana 441C 10
ALEXE A. Gabriel-Cristian 442C 1
BERESCU V.D. Bogdan-Eduard 442C 2
CIUREA M. Silvia-Ştefania 442C 3
DRAGOMIRESCU D. Alexandru-Mihai 442C 4
ENE G. Andreea-Elena 442C 5
GLIŞCĂ T. Maria-Miruna 442C 6
ILIE B.C. Narcis-Ionuţ 442C 7
MĂNICĂ F. George-Cristian 442C 8
MOCANU P. Florin-Alexandru 442C 9
NANU M. Florina-Luiza 442C 10
NOAJE V. Alexandra-Mihaela 442C 1
PALMEŞ I.D. Ioan-Bogdan 442C 2
POPA D.V. Vlad-Ştefan 442C 3
POPESCU D. Ramona-Luciana 442C 4
POPESCU S. Ştefania-Minodora 442C 5
POPESCU V.N. Eugenia-Florentina 442C 6
SAMOILĂ E. Andreea-Crina 442C 7
Nume Prenume Grupa Tema nr.
SAVE S. Denis 442C 8
SÎRBU M. Gabriela-Iuliana 442C 9
SOLOM D. Adrian-Remus 442C 10
SOUEIDAN N.S. Fares-Samih 442C 1
ŞERBAN C. Denis-Cornel 442C 2
ŞOALCĂ M. Dragoş-Ştefan 442C 3
AANEI Al. Monica-Alexandra 443C 4
BLAGA M. Maria 443C 5
CIUCĂ V. Teodor-Ionuţ 443C 6
COMĂNESCU C. Cristina-Adelina 443C 7
CRANTEA N. Ionela-Emilia 443C 8
DRĂGHICESCU Gh. Andreea-Elena 443C 9
FULGULEŢ M. Liliana 443C 10
GRUIA M.L. Ştefan-Teodor 443C 1
ISPAS R.G. Iulian 443C 2
MIHAI L.N. Paul-Gabriel 443C 3
NISTOROIU C. Mihnea-Andrei 443C 4
NIŢU M. Ioana-Maria 443C 5
POPA Ș. Darius-Ştefan 443C 6
POPESCU C.E. Mircea-Andrei 443C 7
RUSU D. Cosmin-Gabriel 443C 8
SALEDIN E. Mert Aykut 443C 9
STANCU A. Andreea-Larisa 443C 10
ŞERBAN I. Alexandra-Elena 443C 1
TĂBĂRANA C. Alexandra-Cristina 443C 2
ŢOLEA A. Elena Diana 443C 3
VOINEA I.G. Cătălin-Alexandru 443C 4
BADEA D. Cătălina-Florentina 444C 5
BĂRĂSCU I. Cosmin-Ionuţ 444C 6
BIRDAHA G. Cristina-Antonela 444C 9
CHIRIŢĂ E. Alexandru 444C 10
DECULESCU V.D. Ștefan-Cosmin 444C 1
DRAGNE T. Cosmin-Andrei 444C 2
HALAWEL M.K. Amina-Cristiana 444C 3
ISMAILI MHAMDI A. Saad 444C 4
IUGA M. Cosmin 444C 5
LĂZĂROIU C. Dan-Constantin 444C 6
MARIN V. Maria-Elena 444C 7
MITROI Gh. Tudor-Constantin 444C 8
NAN S. Raluca 444C 9
OANŢĂ N. Elena-Mădălina 444C 10
RUSU Alexandru-Cristian 444C 1
STOIAN C. Liliana 444C 2
STOINU P. Alexandru-Constantin 444C 3
TĂNASE I. Alexandru-Marian 444C 4
TRANDAFIR Gh. Ionuţ- Cosmin 444C 5
URÎTU M.V. Adrian Ştefan 444C 6
VOICA N. Andreea-Elena 444C 7
Nume Prenume Grupa Tema nr.
ANISIA I. Mălina-Ioana 441G 8
BONCIU C.V. Claudiu-Alin 441G 9
BOUGHA Mohamed Nouralsbah 441G 10
DEACU V. David-Theodor 441G 1
DIMITRIU V.V.V. Victor-Virgil 441G 5
DOBRE M. Adrian-Florentin 441G 6
DONE Gh. Andreea-Mihaela 441G 7
GRIGORESCU Gh. Florentin-Liviu 441G 8
IANCU P. Ioana-Andreea 441G 9
ILIE T. Ciprian Romeo 441G 10
PERIANU P. Nicu-Gabriel 441G 1
ŞCHEOPU Al. Irina- Rădina 441G 2
TUDORA C.M. Adrian-Ionuţ 441G 3
VAŢA E. Anca-Marilena 441G 4
VOINEA M.C. George-Eduard 441G 5
VOINESCU M.A. Luiza-Andreea 441G 6
CĂPRARU D. Tudor-Alex 442G 7
GURAN I.L. Ion-Eduard 442G 8
KASSAS Ahmed 442G 9
SBURLEA Gh. Mădălina-Mihaela 442G 10
 
Index
Prototip funcție Descriere
tema

Pornind de la un set de intrare de N eșantioane ale unui semnal, 𝑦 , 𝑦 , … , 𝑦 , se vor


calcula prin interpolare liniară punctele N-1 intermediare, 𝑧 , 𝑧 , … , 𝑧 , situate pe
abscisă la egală distanță față de eșantioanele consecutive din setul de intrare. Se va folosi
formula de interpolare de mai jos, particularizată pentru primul punct interpolat.

𝑧 𝑦 0.4 𝑦 𝑦
void linInterp1(Word16 *in,
1 Word16 *out,
Word16 *in  pointer la vectorul de intrare cu
unsigned short N);
valori fracționare 𝑦 , 𝑦 , … , 𝑦
Word16 *out  pointer la vectorul de ieșire
(conține și valorile interpolate între elementele
consecutive din vectorul in), 𝑦 , 𝑧 , 𝑦 , 𝑧 , … , 𝑦
(de lungime 2N-1)
N  lungimea vectorului de intrare in (N-1 este multiplu de 4).

Se calculează logaritmul natural al valorilor fracționare 𝑥 din vectorul de intrare x


folosind următoarea aproximare:
𝑦
log 𝑥 log 1 𝑦
𝑛
Word16 *x  pointer la vectorul de intrare cu valori fracționare
Word16 *out  pointer la vectorul de ieșire (conține logaritmul natural al elementelor
void logAp(Word16 *x, din vectorul x)
2
Word16 *out, N  lungimea vectorului de intrare, multiplu de 4.
unsigned short M,
M  numărul de termeni din dezvoltarea în serie.
unsigned short N);

Se vor alege în mod convenabil valorile de intrare din vectorul x astfel încât să se evite
apariția depășirilor de format ! Împărțirea la 𝑛 din formula de aproximare se poate realiza
ca înmulțire cu , citind valorile dintr-un tabel salvat în memorie.

Se va testa programul variind numărul M de termeni din descompunere și se vor evalua


erorile de estimare în Matlab.
Se va calcula și returna varianța unui vector de intrare cu N valori.

Word16 *x  pointer la vectorul de intrare.


N  lungimea vectorului x, multiplu de 4

Algoritm: varianța unei secvențe x[n] având N valori se consideră valoarea medie a
Word16 variance(Word16 *x, deviațiilor pătratice ale elementelor vectorului de la valoarea sa medie x' astfel:
3 unsigned short N);
variance = ((x[0]-x') * (x[0]-x') + (x[1]-x') * (x[1]-x') + ...
... + (x[n-1]-x') * (x[n-1]-x')) / N
unde valoarea medie se calculează:
x' = (x[0] + x[1] + ... + x[n-1]) / N

În cazul în care apar depășiri, rezultatul se recalculează pornind de la elementele


vectorului de intrare scalate la 2.
Se calculează autocorelația semnalului de lungime L. Lățimea ferestrei de corelație este
N, iar lungimea vectorului de autocorelație calculat este M=L-N. L și M ar trebui să fie
multipli de 4.
void acorr(Word32 *rxx, Word32 *rxx  pointer la vectorul de autocorelație de lungime M
Word16 *x,
4 unsigned short L, Word16 *x  pointer la vectorul de intrare de lungime L
unsigned short N); L  lungimea vectorului de intrare
N  lățimea ferestrei de corelație

𝑟𝑥𝑥 𝑗 𝑥 𝑘 ∗𝑥 𝑘 𝑗 , 0 𝑗 𝑀

Se calculează intercorelația dintre vectorii de intrare x și y, semnale de lungime L.


Lățimea ferestrei de corelație este N, iar lungimea vectorului de intercorelație calculat în
funcție este M=L-N. L și M ar trebui să fie multipli de 4.
void crossCorr(Word32 *rxy,
Word16 *x, Word32 *rxy  pointer la vectorul de intercorelație rezultat, de lungime M
Word16 *y, Word16 *x  pointer la vectorul de intrare de lungime L
5 unsigned short L, Word16 *y  pointer la vectorul de intrare de lungime L
unsigned short N);
L  lungimea vectorilor de intrare
N  lățimea ferestrei de corelație

𝑟𝑥𝑦 𝑗 𝑥 𝑘 𝑗 ∗𝑦 𝑘 , 0 𝑗 𝑀
Moving average – se calculează media pătratelor valorilor unui vector de intrare de
lungime L pentru o fereastră de mediere de lungime N. Fereastra de mediere alunecă pe
toată lungimea vectorului de intrare, vectorul rezultat având L-N eșantioane.

void movAv(Word16 *x, Word16 *x  pointer la vectorul de intrare, de lungime L.


Word16 *y, Word16 *y  pointer la vectorul de valori medii, de lungime L-N
6 unsigned short N, N  lungimea ferestrei de mediere, multiplu de 4.
unsigned short L);
L  lungimea vectorului de intrare multiplu de 4.
1
𝑦 𝑛 𝑥 𝑛 𝑘 , 0 𝑛 𝐿 𝑁
𝑁

Se înmulțește un vector cu valori complexe cu un scalar complex.

Word16 *out  pointer la vectorul complex rezultat. Părțile reale și imaginare ale
elementelor vectorului sunt stocate astfel: {out_re(0), out_im(0), out_re(1),
out_im(1), …, out_re(n-1), out_im(n-1)}.

Word16 *in  pointer la vectorul complex de înmulțit. Părțile reale și imaginare ale
elementelor vectorului sunt stocate astfel: {in_re(0), in_im(0), in_re(1),
in_im(1), …, in_re(n-1), in_im(n-1)}.

Word16 m  număr de elemente complexe în vectorul in, multiplu de 4.


void comVecMult(Word16 *out, Word16 sc_re  partea reală a scalarului cu care se înmulțește.
Word16 *in,
Word16 sc_im  partea imaginară a scalarului cu care se înmulțește.
7 Word16 m,
Word16 sc_re,
Word16 sc_im); Algoritmul - pentru următoarele argumente de intrare:
in_re  componentă reală a vectorului de înmulțit.
in_im  componentă imaginară a vectorului de înmulțit.
sc_re  partea reală a scalarului cu care se înmulțește.
sc_im  partea imaginară a scalarului cu care se înmulțește.
out_re  componentă reală a vectorului rezultat.
out_im  componentă imaginară a vectorului rezultat.
Se vor obține la ieșire:
out_re = (in_re * sc_re - in_im * sc_im)/2
out_im = (in_im * sc_re + in_re * sc_im)/2
În cazul în care apar depășiri, rezultatul se va calcula ca jumătate din valoarea reală a
înmulțirii vectorului complex de intrare cu scalarul complex.
Se va calcula și returna inter-covarianța dintre vectorii de intrare a și b de lungimi N.

𝑐 𝑥 𝑚𝑥 𝑦 𝑚𝑦

Word16 crossCov(Word16 *x, unde valoarea medie se calculează: 𝑚𝑥 ∑ 𝑥 𝑚𝑦 ∑ 𝑦


Word16 *y,
8 unsigned short N);
Word16 *x, *y  pointeri la vectorii de intrare.
N  lungimea vectorilor x,y, multiplu de 4

În cazul în care apar depășiri, rezultatul se recalculează pornind de la elementele


vectorilor de intrare împărțite la 2.
Considerând N componente complexe ale unui vector X
(de exemplu componentele spectrale calculate cu TFD |X(k)|2
de lungime N) să se determine valorile maxime ale
modulului la pătrat ale componentelor din fiecare set
(subbandă) de M componente.

Se consideră N multiplu de M și se va declara (pe lângă


void maxSpectr(Word16 *X, valorile M și N) și constanta P=N/M pentru a evita
Word16 *out,
operația de împărțire în program. k
9 unsigned short N,
unsigned short M, N, M și P trebuie alese astfel încât să fie multiplu de 4 0123... M 2M N-1
unsigned short P); (de ex. N=1024, M=16 și rezultă P=64).
M M
Word16 *X  pointer la vectorul cu componente complexe. Părțile reale și imaginare
ale elementelor vectorului sunt stocate astfel: {X_re(0), X_im(0), X_re(1),
X_im(1), …, X_re(N-1), X_im(N-1)}. În total vectorul X are lungime 2N.

Word16 *out  pointer la vectorul de ieșire (conține cele P valori maxime).

Considerând N componente complexe ale unui vector X (de exemplu componentele


spectrale calculate cu TFD de lungime N) să se determine valoarea medie ale modulului
void meanSpectr(Word16 *X, la pătrat (putere medie) ale componentelor din fiecare set (subbandă) de M componente.
Word16 *out,
10 unsigned short N,
unsigned short M, Se consideră N multiplu de M și se va declara (pe lângă valorile M și N) și constanta
unsigned short P); P=N/M pentru a evita operația de împărțire în program.
N, M și P trebuie alese astfel încât să fie multipli de 4 (de ex. N=1024, M=16 și rezultă
P=64).
|X(k)|2
Word16 *X  pointer la vectorul cu componente
complexe. Părțile reale și imaginare ale elementelor
vectorului sunt stocate astfel: {X_re(0), X_im(0),
X_re(1), X_im(1), …, X_re(N-1), X_im(N-1)}. În
total vectorul X are lungime 2N.

Word16 *out  pointer la vectorul de ieșire (conține k


cele P valori maxime). 0123... M 2M N-1

M M
 
 

S-ar putea să vă placă și