Differences

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

Link to this comparison view

ps:labs:02 [2020/10/28 17:39]
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ţ(1600 Hz şi 1800 Hz) şi mai multe niveluri de amplitudine. O transmisiune se face într-o perioadă de timp T (interval de transmisie) ​şeste egală cu suma a două semnale de amplitudine ​diferită:+Pentru a transmite simboluri (ex: litere din alfabet) modemurile PC-urilor folosesc ​diferite ​frecvențși mai multe niveluri de amplitudine. O transmisiune se face într-o perioadă de timp T (interval de transmisie) ​șpoate conține o suprapunere de mai multe semnale, e.g. suma a două semnale de amplitudine ​și frecvență diferite:
  
-x(t) = A1 * sin (2*pi*f1*t) + A2 * sin (2*pi*f2*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>​ </​hidden>​
  
-=== Exerciţiul 4 [3.5p] ​===+=== 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>
ps/labs/02.1603899560.txt.gz · Last modified: 2020/10/28 17:39 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