Differences

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

Link to this comparison view

ps:laboratoare:02 [2017/09/11 11:34]
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 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> 
-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); 
-</​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>​ 
  
 === Exerciţiul 3 [1p] === === Exerciţiul 3 [1p] ===
  
-La curs am văzut că datorită ​identităţilor ​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:
  
 /* e^(j*t) = cos(t) + j*sin(t) */ /* e^(j*t) = cos(t) + j*sin(t) */
Line 171: Line 108:
   * Afisaţi secvenţa rezultată în imaginar folosid real(ss) ca valori x şi imag(ss) ca valori y   * Afisaţi secvenţa rezultată în imaginar folosid 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!
- 
-<​hidden>​ 
-<note tip> 
-Acesta este un posibil cod: 
-<code matlab complex_exp.m>​ 
-t = 0:0.1:2*pi; 
-figure; 
-plot(exp(1i*t),​ '​k.'​);​ 
-hold on; 
-plot(0, 0, '​kx'​);​ 
-t = [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>​ 
  
 === Exerciţiul 4 [1.5p] === === Exerciţiul 4 [1.5p] ===
  
-La curs am văzut ​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 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.
  
 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:​laboratoare:​voice.mat|this}}.   * Având semnalul de intrare cu o voce in fişierul {{:​ps:​laboratoare:​voice.mat|this}}.
-  * Faceţi o copie a semnalului şi întârziaţi-o (de ex cu d=500 de eşantioane).+  * 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).
   * 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 ​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 251: 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.1505118856.txt.gz · Last modified: 2017/09/11 11:34 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