Differences

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

Link to this comparison view

ps:laboratoare:02 [2017/09/11 11:16]
darius.necula
ps:laboratoare:02 [2020/10/07 18:22] (current)
ionut.gorgos
Line 1: Line 1:
 ===== Laboratorul 02. ===== ===== Laboratorul 02. =====
 +/* <​hidden>​ */
  
 ==== Semnale şi sisteme de bază ==== ==== Semnale şi sisteme de bază ====
Line 13: Line 14:
   - 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 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]
   - Afişaţi cu ajutorul Matlab 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 mai multor intervale de transmisie consecutive. Aşa cum am învăţat în laboratorul trecut adăugaţi titlu şi etichete plotului. [1p]
- 
-<​hidden>​ 
-<note tip> 
-Prima frecvenţă este de 1600 = 8 * 200 Hz, iar a doua de 1800 = 9 * 200 Hz. Este clar că amândouă sunt multiple de 200 Hz. Astfel, dacă folosim o frecvenţă de 200 Hz ( T = 1/200 s ), primul semnal va cicla de 8 ori, iar al doilea de 9 ori. De aceea avem nevoie de o perioadă minimă de T = 1/200. 
- 
-Un posibil cod de afişare a semnalului: 
- 
-<code matlab '​sinewaves.m'>​ 
-%% Sinewaves 
-close all; 
-f1 = 1800; 
-f2 = 1600; 
-fm = 200; 
-tm = 1/fm; 
-x = 0:​tm/​100:​tm;​ 
-s1 = sin(2*pi*f1*x);​ 
-s2 = sin(2*pi*f2*x);​ 
-h1 = figure; 
-plot(x, [s1; s2]); 
-xlabel('​Time (s)'); 
-ylabel('​Amplitude'​);​ 
-title('​Two sinewaves'​);​ 
-legend('​1800 Hz', '1600 Hz'); 
-print(h1, '​-dpng',​ '​sines.png'​);​ 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
  
 === Exerciţiul 2 [2.5p] === === Exerciţiul 2 [2.5p] ===
Line 70: Line 44:
  
   * 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 in 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>​
Line 78: Line 52:
   - 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 T de mai sus. [1p]
-    * 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>​
Line 90: Line 64:
  
  
-Pentru a afisa 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 plot puteţi folosi <code matlab> hold on; </​code>​ după primul plot:
  
 <code matlab> <code matlab>
Line 99: Line 73:
 </​code>​ </​code>​
 </​note>​ </​note>​
-/​*</​hidden>​*/​+ 
  
 Ar trebui să obtineţi ceva similar imaginii de mai jos: Ar trebui să obtineţi ceva similar imaginii de mai jos:
Line 105: Line 80:
 {{:​ps:​laboratoare:​combined_signals.png?​600|}} {{:​ps:​laboratoare:​combined_signals.png?​600|}}
  
-<​hidden>​ 
-<note tip> 
-Acesta este codul pentru funcţia 'unit step': 
  
-<code matlab ustep.m>​ +=== Exerciţiul 3 [1p] ===
-function y=ustep(N) +
-%RAMP Returns a step signal of a given number of smaples +
-%   [y] = USTEP(N) +
-%   ​returns the step signal for the given samples+
  
-y = ones(1, N); +La curs am văzut că datorită egalității ​lui Euler putem scrie o exponenţială complexă ​ca o sumă de sin şi cos:
-</​code>​ +
- +
-Pentru a combina ploturile puteţi folosi următorul cod: +
-<code matlab signal_composition.m>​ +
-N = 200; +
-T = 100; +
-y1 = ramp(N); +
-y2 = [zeros(1,​T),​ -y1(1:​N-T)];​ +
-y3 = ustep(N); +
-y3 = [zeros(1,​T),​ -T*y3(1:​N-T)];​ +
-ys = y1+y2+y3; +
-x = 1:N; +
-s1 = y1(x); +
-s2 = y2(x); +
-s3 = y3(x); +
-ss = s1+s2+s3; +
-h = figure; +
-plot(x, ss, '​k-',​ '​LineWidth',​ 3); +
-hold on; +
-plot(x, s1, '​g-',​ '​LineWidth',​ 2); +
-plot(x, s2, '​b-',​ '​LineWidth',​ 2); +
-plot(x, s3, '​r-',​ '​LineWidth',​ 2); +
-legend('​sum',​ '​r(t)',​ '​-r(t-T)',​ '​-u(t-T)'​);​ +
-print(h1, '​-dpng',​ '​combined_signals.png'​);​ +
-</​code>​ +
-</​note>​ +
-</​hidden>​ +
- +
-=== Exercitiul 3 [1p] === +
- +
-La curs am vazut ca datorita identitatilor ​lui Euler putem scrie o exponentiala complexa ​ca o suma de sin si cos:+
  
 /* e^(j*t) = cos(t) + j*sin(t) */ /* e^(j*t) = cos(t) + j*sin(t) */
Line 158: Line 95:
 $e^{-j \cdot t} = \cos(t) - j \cdot \sin(t)$ $e^{-j \cdot t} = \cos(t) - j \cdot \sin(t)$
  
-Adunand ​aceste 2 ecuatii si impartind ​la 2 obtinem:+Adunând ​aceste 2 ecuaţii şi împărţind ​la 2 obţinem:
  
 /* cos(t) = (e^(j*t) + e^(-j*t)) / 2 */ /* cos(t) = (e^(j*t) + e^(-j*t)) / 2 */
Line 164: Line 101:
 $\cos(t) = \frac{e^{j \cdot t} + e^{-j \cdot t}}{2}$ $\cos(t) = \frac{e^{j \cdot t} + e^{-j \cdot t}}{2}$
  
-Incercati sa aratati ​asta in Matlab, ​facand urmatoarele+Încercaţi să arătaţi ​asta în Matlab, ​făcând următoarele
-  * Folositi secventa ​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>​ 
-  * Afisati exponentiala complexa ​/* 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(1i*t),​ '​ro'​);​ </​code>​ 
-  * Afisati exponentiala complexa ​/* s2=e^(-j*t) */ $s_2 = e^{-j \cdot t}$ cu o alta culoare +  * Afişaţi exponenţiala complexă ​/* s2=e^(-j*t) */ $s_2 = e^{-j \cdot t}$ cu o altă culoare 
-  * Calculati ​media celor 2 exponentiale ​/* 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) 
-  * Afisati secventa rezultata in imaginar folosid real(ss) ca valori x si imag(ss) ca valori y. +  * Afisaţi secvenţa rezultată în imaginar folosid real(ss) ca valori x şi imag(ss) ca valori y 
-  * Verificati daca s1, s2 si ss arata cum v-ati fi asteptat.+  * Verificaţi dacă s1, s2 şi ss arată ​cum v-aţi fi aşteptat!
  
-<​hidden>​ +=== Exerciţiul ​[1.5p] ===
-<note tip> +
-Acesta este un posibil cod: +
-<code matlab complex_exp.m>​ +
-0:​0.1:​2*pi;​ +
-figure; +
-plot(exp(1i*t),​ '​k.'​);​ +
-hold on; +
-plot(0, 0, '​kx'​);​ +
-[0, pi/6, pi/4, pi/3, pi/2]+
-plot(exp(1i*t),​ '​ro'​);​ +
-plot(exp(-1i*t),​ '​bo'​);​ +
-ss (exp(1i*t)+exp(-1i*t))/​2;​ +
-plot(real(ss),​ imag(ss), '​go'​);​ +
-legend('​circle',​ '​origin',​ '​e^jt',​ '​e^-jt',​ '(e^jt + e-jt)/​2'​);​ +
-</​code>​ +
-</​note>​ +
-</​hidden>​+
  
-=== Exercitiul 4 [1.5p] === +La curs am discutat despre sisteme paralele. Acum vom folosi ​un exemplu simplu de sistem paralel folosit pentru a crea efectul de ecou. Ideea de bază e ca un sistem ​să replice semnalul de intrare ​în timp ce un altul îl întârzie. La final cele două sunt adunate.
- +
-La curs am vazut un exemplu simplu de un sistem paralel folosit pentru a crea efectul de ecou. Ideea de baza e ca un sistem ​sa replice semnalul de intrare ​in timp ce un altul il intarzie. La final cele doua sunt adunate.+
  
 Task-ul vostru pentru a replica experimentul:​ Task-ul vostru pentru a replica experimentul:​
-  * Avand semnalul de intrare cu o voce in fisierul ​{{:​ps:​laboratoare:​voice.mat|this}}. +  * Având ​semnalul de intrare cu o voce in fişierul ​{{:​ps:​laboratoare:​voice.mat|this}}. 
-  * Faceti ​o copie a semnalului ​si intarziati-o(de ex cu d=500 de esantioane). +  * 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). 
-  * Adunati ​cele 2 semnale +  * Adunaţi ​cele 2 semnale. 
-  * Ascultati ​semnalul original ​si cel rezultat pentru a auzi diferenta. Pentru a asculta semnalele ​folositi functia ​'​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 ​5 [3p] ===
-<note tip> +
-Acesta este un exemplu de rezolvare:​ +
-<code matlab ecou.m>​ +
-load('​voice.mat'​);​ +
-sound(y); +
-pause(3); +
-plot(y); +
-length(y);​ +
-500; +
-y2 zeros(length(y),​ 1); +
-y2(d+1:​end,​1) = y(1:l-d); +
-y3 = y + y2; +
-sound(y3, 8000); +
-figure; +
-plot(1:l, [y';​y2';​y3'​]);​ +
-</​code>​ +
-</​note>​ +
-</​hidden>​ +
-=== Exercitiul ​5 [3p] ===+
  
-Avem un sistem de feedback precum cel din imaginea ​urmatoare:+Avem un sistem de feedback precum cel din imaginea ​următoare:
  
 {{:​ps:​laboratoare:​feedback.png?​400|}} {{:​ps:​laboratoare:​feedback.png?​400|}}
  
-Sa presupunem ​ca folosim acest sistem pentru sistemul de pilot automat al masinii, unde x(t) este o constanta ​ce reprezinta ​viteza ​dorita ​iar y(t) este viteza ​masinii masurata ​de vitezometru. ​In aceasta aplicatie ​sistemul 2 este sistemul identitate (intrare = iesire).+Să presupunem ​că folosim acest sistem pentru sistemul de pilot automat al maşinii, unde x(t) este o constantă ​ce reprezintă ​viteza ​dorită, ​iar y(t) este viteza ​maşinii măsurată ​de vitezometru. ​În această aplicaţie, ​sistemul 2 este sistemul identitate (intrare = ieşire).
  
-Sa construim acest sistem ​avand in vedere ​urmatoarele constrangeri+Să construim acest sistem ​având în vedere ​următoarele constrângeri
-  * viteza ​initiala ​masinii ​este 7 +  * viteza ​initială ​maşinii ​este 7 
-  * valoarea ​initiala ​secventei ​de feedback (output-ul lui S2), f, este 0 +  * valoarea ​iniţială ​secvenţei ​de feedback (output-ul lui S2), f, este 0 
-  * valoarea ​initiala ​pentru ​secventa ​de diferenta, 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 secventa ​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 ​curenta si diferenta ​e(i). Bazandu-se pe acestea ​actualizeaza ​viteza ​curenta dupa cum urmeaza+  * 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ă
-    * Daca e(i) > 10, atunci y(i+1) = y(i) + 10 +    * Dacă e(i) > 10, atunci y(i+1) = y(i) + 10 
-    * altfel ​daca e(i) > 0, atunci y(i+1) = y(i) + 1 +    * altfel ​dacă e(i) > 0, atunci y(i+1) = y(i) + 1 
-    * altfel ​daca e(i) == 0, atunci y(i+1) = y(i)+    * altfel ​dacă e(i) == 0, atunci y(i+1) = y(i)
  
-Construiti ​sistemul S1 ca o functie matlab ​cu 2 parametrii (viteaza_curenta, e), care afiseaza urmatoarea viteza curenta ​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. 
-In Matlab ​puteti ​folosi o instructiune ​for pentru asta:+În Matlab ​puteţi ​folosi o instrucţiune ​for pentru asta:
  
 <code matlab> <code matlab>
Line 250: Line 149:
 end end
 </​code>​ </​code>​
-Rulati ​sistemul de N = 20 ori si afisati output-ul ​sistemului. +Rulaţi ​sistemul de N = 20 ori şi afişaţi outputul ​sistemului.
-<​hidden>​ +
-<note tip> +
-Un exemplu de solutie: +
-<code matlab sys1.m>​ +
-function y=sys1(speed,​ e) +
-%SYS1 Simulates a signal system +
-%   [y] = SYS1(speed, e) +
-%   ​returns the current state (speed) after applying the input e+
  
-if abs(e) > 10 +/* </hidden*/
-    k = 5; +
-else +
-    k = 1; +
-end +
-if e > 0 +
-    y = speed + k; +
-elseif e < 0 +
-    y = speed - k; +
-else +
-    y = speed; +
-end     +
-</code> +
- +
-<code matlab cruise_control.m>​ +
-% Simulate a cruise control system +
-N = 20; +
-y = zeros(1, N); +
-f = zeros(1, N); +
-e = zeros(1, N); +
-x = 60*ones(1,​N);​ +
- +
-y(1) = 7; % Initial speed +
-for i=1:N-1 +
-    e(i) = x(i)-f(i);​ +
-    y(i+1) = sys1(y(i), e(i)); +
-    f(i+1) = y(i+1); +
-end +
- +
-figure; +
-plot(1:N, e, '​r'​);​ +
-hold on; +
-plot(1:N, y, '​g'​);​ +
-legend('​e',​ '​y'​);​ +
-</code> +
-</note> +
-</​hidden>​+
ps/laboratoare/02.1505117760.txt.gz · Last modified: 2017/09/11 11:16 by darius.necula
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