Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ps:labs:02 [2021/10/10 19:56]
ionut.gorgos
ps:labs:02 [2022/11/08 14:54] (current)
ionut.gorgos
Line 1: Line 1:
 ===== Laboratorul 02. ===== ===== Laboratorul 02. =====
-<​hidden> ​+/*<​hidden> ​*/
  
 ==== Semnale și sisteme de bază ==== ==== Semnale și sisteme de bază ====
  
 La curs am discutat despre semnale de bază și sisteme. În continuare vom face câteva exerciții legate de aceste noțiuni. La curs am discutat despre semnale de bază și sisteme. În continuare vom face câteva exerciții legate de aceste noțiuni.
 +Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://​docs.google.com/​presentation/​d/​1ksWeqb6o80ug9N2kRjKxaN7jvdwDWklC|aici]]
  
-=== Exercițiul 1 [2p] ===+=== Exercițiul 1 ===  
 +[<color red>​2p</​color>​]
  
-Pentru a transmite simboluri (ex: litere din alfabet) modemurile PC-urilor folosesc ​două frecvențe ​(1600 Hz și 1800 Hz) și mai multe niveluri de amplitudine. O transmisiune se face într-o perioadă de timp T (interval de transmisie) și este egală cu suma a două semnale de amplitudine ​diferită:+Pentru a transmite simboluri (ex: litere din alfabet) modemurile PC-urilor folosesc ​diferite ​frecvențe și mai multe niveluri de amplitudine. O transmisiune se face într-o perioadă de timp T (interval de transmisie) și poate conține o suprapunere de mai multe semnale, e.g. suma a două semnale de amplitudine ​și frecvență diferite:
  
 $x(t) = A_{1} \cdot sin(2\cdot \pi\cdot f_{1}\cdot t) + A_{2} \cdot sin(2\cdot \pi\cdot f_{2}\cdot t)$ $x(t) = A_{1} \cdot sin(2\cdot \pi\cdot f_{1}\cdot t) + A_{2} \cdot sin(2\cdot \pi\cdot f_{2}\cdot t)$
  
-  - Care este cel mai mic interval de transmisie care are sens să fie folosit ​cu frecvenţele de mai sus? Cu alte cuvinte, cât ar trebui să fie T astfel încât semnalul să aibă un număr întreg de cicluri? [1p] +  - Care este cel mai mic interval de transmisie care are sens să fie folosit, dacă $f_1 = 1600$ Hz și $f_2 = 1800$ Hz? Cu alte cuvinte, cât ar trebui să fie $Tastfel încât semnalul să aibă un număr întreg de cicluri? [<color red>1p</​color>​
-  - Afişaţi cu ajutorul ​Octave ​semnalul produs de modem pe parcursul ​mai multor intervale ​de transmisie ​consecutive. Aşa cum am învăţat în laboratorul trecut adăugaţi titlu şi etichete ​plotului. [1p]+  - Afişaţi cu ajutorul ​MATLAB ​semnalul produs de modem pe parcursul ​unui interval ​de transmisie. Aşa cum am învăţat în laboratorul trecut adăugaţi titlu şi etichete ​plot-ului. [<color red>1p</​color>​]
  
-=== Exerciţiul 2 [2.5p] ​===+<note tip> 
 +Pentru $\pi$ puteți folosi comanda //pi// din MATLAB. 
 + 
 +Puteți afișa un semnal folosind comanda //plot//. Folosiți //help plot// sau //doc plot// pentru mai multe detalii. 
 + 
 +După ce ați făcut plot-ul puteți pune un titlu figurii folosind //title//, iar pentru etichete //xlabel// și //​ylabel//​. 
 +</​note>​ 
 +=== Exerciţiul 2 ===  
 +[<color red>2.5p</​color>​]
  
 La curs am văzut că putem descompune semnalele într-o sumă de mai multe semnale de bază (ramp, step etc.). Pentru acest exerciţiu veţi încerca să folosiţi semnalele '​step'​ şi '​ramp'​ pentru a crea semnalul reprezentat cu negru în acest slide: La curs am văzut că putem descompune semnalele într-o sumă de mai multe semnale de bază (ramp, step etc.). Pentru acest exerciţiu veţi încerca să folosiţi semnalele '​step'​ şi '​ramp'​ pentru a crea semnalul reprezentat cu negru în acest slide:
 {{:​ps:​labs:​building_signals.pdf|}} {{:​ps:​labs:​building_signals.pdf|}}
  
-Pentru a face asta în Octave ​va trebui să lucrăm cu semnale discrete, nu continue (vom discuta despre acest aspect în cursurile viitoare). În loc să lucrăm cu semnale reprezentate ​in intervalul [0,1] ca în slide vom folosi semnale ce se întind peste 100 de puncte.+Pentru a face asta în MATLAB ​va trebui să lucrăm cu semnale discrete, nu continue (vom discuta despre acest aspect în cursurile viitoare). În loc să lucrăm cu semnale reprezentate ​în intervalul [0,1] ca în slide vom folosi semnale ce se întind peste 100 de puncte.
  
 Puteţi folosi următoarea funcţie pentru a crea un semnal '​ramp'​ peste N puncte: Puteţi folosi următoarea funcţie pentru a crea un semnal '​ramp'​ peste N puncte:
Line 38: Line 48:
 Task-ul vostru este să creaţi un semnal combinat, ca cel din slide, dar folosind secvenţe discrete, cu o formulă ca cea de mai jos: Task-ul vostru este să creaţi un semnal combinat, ca cel din slide, dar folosind secvenţe discrete, cu o formulă ca cea de mai jos:
  
-s(i) = r(i) - r(i-T) - T*u(i-T)+$s(i) = r(i) - r(i-T) - T \cdot u(i-T)$
  
-unde i este un index de la 0 la N (în loc de un număr real de la 0 la 1), T este întârzierea,​ s este semnalul rezultat, r este semnalul '​ramp'​ (eventual întârziat cu T) şi u este semnalul 'unit step' (întârziat aici cu T).+unde $ieste un index de la 0 la N (în loc de un număr real de la 0 la 1), $Teste întârzierea, ​$seste semnalul rezultat, ​$reste semnalul '​ramp'​ (eventual întârziat cu $T$ș$ueste semnalul 'unit step' (întârziat aici cu $T$).
 <​note>​ <​note>​
  
-  * r(i-T) este doar o notaţie care marchează faptul că folosim un semnal '​ramp'​ întârziat cu T. Nu trebuie să apelaţi funcţia ramp cu argumentul (i-T) pentru că nu va funcţiona. Va trebui să întârziaţi semnalul 'de mână'​ ca mai jos. +  * $r(i-T)este doar o notaţie care marchează faptul că folosim un semnal '​ramp'​ întârziat cu $T$. Nu trebuie să apelaţi funcţia ramp cu argumentul ​$(i-T)pentru că nu va funcţiona. Va trebui să întârziaţi semnalul 'de mână'​ ca mai jos. 
-  * Folosim factorul T în faţa lui u(i-T) pentru că este amplitudinea la care r(i) a ajuns până în acel moment şi vrem să avem semnalul final la 0.+  * Folosim factorul ​$Tîn faţa lui $u(i-T)pentru că este amplitudinea la care $r(i)a ajuns până în acel moment şi vrem să avem semnalul final la 0.
  
 </​note>​ </​note>​
  
 Pentru asta ar trebui să: Pentru asta ar trebui să:
-  - creaţi un semnal 'unit step' numit ustep.m, care practic întoarce o secvenţă de N valori de 1 [0.5p] +  - creaţi un semnal 'unit step' numit ustep.m, care practic întoarce o secvenţă de N valori de 1 [<color red>0.5p</​color>​
-  - să setaţi numărul de puncte la N = 200 şi delay-ul la T = 100 +  - să setaţi numărul de puncte la $N = 200şi delay-ul la $T = 100$ 
-  - să creaţi cele 3 semnale (care urmează să fie combinate) folosind '​ramp'​ şi '​ustep'​ cu N şi T de mai sus. [1p]+  - să creaţi cele 3 semnale (care urmează să fie combinate) folosind '​ramp'​ şi '​ustep'​ cu $Nşi $Tde mai sus. [<color red>1p</​color>​]
     * Puteţi crea secvenţa de input ca: <code matlab> x=1:N; </​code>​     * Puteţi crea secvenţa de input ca: <code matlab> x=1:N; </​code>​
     * Puteţi crea primul semnal ca: <code matlab> s1 = ramp(N) </​code>​     * Puteţi crea primul semnal ca: <code matlab> s1 = ramp(N) </​code>​
-    * Puteţi întârzia un semnal cu T în felul următor: <code matlab> [zeros(1,​T),​ s(1:N-T)]; </​code>​+    * Puteţi întârzia un semnal cu $Tîn felul următor: <code matlab> [zeros(1,​T),​ s(1:N-T)]; </​code>​
   - combinaţi cele 3 semnale   - combinaţi cele 3 semnale
-  - afişaţi toate cele 4 semnale (cele 3 individuale şi combinaţia lor) [1p]+  - afişaţi toate cele 4 semnale (cele 3 individuale şi combinaţia lor) [<color red>1p</​color>​]
     * folosiţi culori diferite (eventual grosimi de linie diferite) pentru fiecare semnal şi afişaţi legenda pentru a diferenţia semnalele.     * folosiţi culori diferite (eventual grosimi de linie diferite) pentru fiecare semnal şi afişaţi legenda pentru a diferenţia semnalele.
  
  
-<note tip> Folosiţi ​'help plot' ​sau 'doc plot' ​pentru a vedea cum se plotează un semnal. De exemplu pentru a plota s1 cu o linie verde de grosime 2 puteţi folosi codul următor:+<note tip> Folosiţi ​//help plot// sau //doc plot// pentru a vedea cum se plotează un semnal. De exemplu pentru a plota $s1cu o linie verde de grosime 2 puteţi folosi codul următor:
 <code matlab> plot(x, s1, '​g-',​ '​LineWidth',​ 2); </​code>​ <code matlab> plot(x, s1, '​g-',​ '​LineWidth',​ 2); </​code>​
  
  
-Pentru a afişa mai multe semnale în aceeaşi figură cu ajutorul comenzii plot puteţi folosi <code matlab> hold on; </​code>​ după primul plot:+Pentru a afişa mai multe semnale în aceeaşi figură cu ajutorul comenzii ​$plotputeţi folosi <code matlab> hold on; </​code>​ după primul plot:
  
 <code matlab> <code matlab>
Line 81: Line 91:
  
  
-=== Exerciţiul 3 [2p] ===+=== Exerciţiul 3 ===  
 +[<color red>​2p</​color>​]
  
 La curs am văzut că datorită egalității lui Euler putem scrie o exponenţială complexă ca o sumă de sin şi cos: La curs am văzut că datorită egalității lui Euler putem scrie o exponenţială complexă ca o sumă de sin şi cos:
Line 101: Line 112:
 $\cos(t) = \frac{e^{j \cdot t} + e^{-j \cdot t}}{2}$ $\cos(t) = \frac{e^{j \cdot t} + e^{-j \cdot t}}{2}$
  
-Încercaţi să arătaţi asta în Octave, făcând următoarele:​+Încercaţi să arătaţi asta în MATLAB, făcând următoarele:​
   * Folosiţi secvenţa de input <code matlab> t = [0, pi/6, pi/4, pi/3, pi/2]; </​code>​   * Folosiţi secvenţa de input <code matlab> t = [0, pi/6, pi/4, pi/3, pi/2]; </​code>​
-  * Afişaţi exponenţiala complexă /* s1=e^(j*t) */ $s_1 = e^{j\cdot t}$, e.g. <code matlab> plot(exp(1i*t), '​ro'​);​ </​code>​+  * Afişaţi exponenţiala complexă /* s1=e^(j*t) */ $s_1 = e^{j\cdot t}$, e.g. <code matlab> plot(exp(1j*t), '​ro'​);​ </​code>​
   * Afişaţi exponenţiala complexă /* s2=e^(-j*t) */ $s_2 = e^{-j \cdot t}$ cu o altă culoare   * Afişaţi exponenţiala complexă /* s2=e^(-j*t) */ $s_2 = e^{-j \cdot t}$ cu o altă culoare
   * Calculaţi media celor 2 exponenţiale /* ss=(s1+s2)/​2 */ $s_s = \frac{s_1 + s_2}{2}$, i.e. cos(t)   * Calculaţi media celor 2 exponenţiale /* ss=(s1+s2)/​2 */ $s_s = \frac{s_1 + s_2}{2}$, i.e. cos(t)
-  * Afisaţi secvenţa rezultată în imaginar folosid ​real(ss) ca valori x şi imag(ss) ca valori y+  * Afișaţi secvenţa rezultată în planul complex folosind ​real(ss) ca valori x şi imag(ss) ca valori y
   * Verificaţi dacă s1, s2 şi ss arată cum v-aţi fi aşteptat!   * Verificaţi dacă s1, s2 şi ss arată cum v-aţi fi aşteptat!
  
 +<note important>​Pentru numărul imaginar //j//, în MATLAB cel mai bine este să folosiți notația //1i// sau //1j//, pentru a evita folosirea accidentală a unei variabile denumite anterior, //i// sau //​j//​.</​note>​
 <​hidden>​ <​hidden>​
 === Exerciţiul 4 [1.5p] === === Exerciţiul 4 [1.5p] ===
Line 115: Line 127:
  
 Task-ul vostru pentru a replica experimentul:​ Task-ul vostru pentru a replica experimentul:​
-  * Având semnalul de intrare cu o voce in fişierul {{:​ps:​labs:​voice.mat|this}}. +  * Având semnalul de intrare cu o voce în fişierul {{:​ps:​labs:​voice.mat|this}}. 
-  * Faceţi o copie a semnalului ​şi întârziaţi-o (de ex cu 0.1 secunde. Trebuie ​stiut ca semnalul este esantionat ​cu o frecvență de 8000 Hz). +  * Faceţi o copie a semnalului ​și întârziaţi-o (de ex cu 0.1 secunde. Trebuie ​știut că semnalul este eșantionat ​cu o frecvență de 8000 Hz). 
-  * Adunaţi cele 2 semnale. +  * Adunați cele 2 semnale. 
-  * Ascultaţi semnalul original ​şi pe cel rezultat pentru a auzi diferenţa. Pentru a asculta semnalele folosiţi funcţia '​sound'​. +  * Ascultaţi semnalul original ​și pe cel rezultat pentru a auzi diferenţa. Pentru a asculta semnalele folosiţi funcţia '​sound'​.
-/​*</​hidden>​*/​+
  
-=== Exerciţiul 4 [3.5p] ​===+</​hidden>​ 
 + 
 +=== Exerciţiul 4 ===  
 +[<color red>3.5p</​color>​]
  
 Avem un sistem de feedback precum cel din imaginea următoare: Avem un sistem de feedback precum cel din imaginea următoare:
Line 134: Line 148:
   * valoarea iniţială pentru secvenţa de diferenţă,​ e, este 0   * valoarea iniţială pentru secvenţa de diferenţă,​ e, este 0
   * valoarea de input a sistemului de pilot automat, x, este o secvenţă de tipul [60, 60, ..., 60]   * valoarea de input a sistemului de pilot automat, x, este o secvenţă de tipul [60, 60, ..., 60]
-  * primul sistem, S1, primeste 2 input-uri: ​viteza curentă şi diferenţa e(i). Bazându-se pe acestea, actualizează viteza curentă după cum urmează: +  * primul sistem, S1, cunoaște ​viteza curentă ​y(i) şi primește ca parametru ​diferenţa e(i). Bazându-se pe acestea, actualizează viteza curentă după cum urmează: 
-    * Dacă e(i) > 10, atunci y(i+1) = y(i) + 10+    * Dacă e(i) > 10, atunci y(i+1) = y(i) + 5
     * altfel dacă e(i) > 0, atunci y(i+1) = y(i) + 1     * altfel dacă e(i) > 0, atunci y(i+1) = y(i) + 1
     * altfel dacă e(i) == 0, atunci y(i+1) = y(i)     * altfel dacă e(i) == 0, atunci y(i+1) = y(i)
  
-Construiţi sistemul S1 ca o funcţie ​Octave ​cu 2 parametrii (viteza_curentă,​ e), care afişează următoarea viteză curentă ca mai sus. +Construiţi sistemul S1 ca o funcţie ​MATLAB ​cu 2 parametrii (viteza_curentă,​ e), care afişează următoarea viteză curentă ca mai sus. 
-În Octave ​puteţi folosi o instrucţiune for pentru asta:+În MATLAB ​puteţi folosi o instrucţiune for pentru asta:
  
 <code matlab> <code matlab>
Line 153: Line 167:
 Rulaţi sistemul de N = 20 ori şi afişaţi outputul sistemului. Rulaţi sistemul de N = 20 ori şi afişaţi outputul sistemului.
  
-</​hidden>​+/* </​hidden> ​*/
ps/labs/02.1633885018.txt.gz · Last modified: 2021/10/10 19:56 by ionut.gorgos
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0