This shows you the differences between two versions of the page.
ps:labs:02 [2021/10/10 20:59] 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 $T$ astfel î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 plot-ului. [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>] |
<note tip> | <note tip> | ||
- | Pentru $\pi$ puteți folosi comanda //pi// din OCTAVE. | + | 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. | Puteți afișa un semnal folosind comanda //plot//. Folosiți //help plot// sau //doc plot// pentru mai multe detalii. | ||
Line 22: | Line 24: | ||
După ce ați făcut plot-ul puteți pune un titlu figurii folosind //title//, iar pentru etichete //xlabel// și //ylabel//. | După ce ați făcut plot-ul puteți pune un titlu figurii folosind //title//, iar pentru etichete //xlabel// și //ylabel//. | ||
</note> | </note> | ||
- | === Exerciţiul 2 [2.5p] === | + | === 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 în 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 56: | Line 59: | ||
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 $T$ de 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 $s1$ cu 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 $plot$ puteţi folosi <code matlab> hold on; </code> după primul plot: |
<code matlab> | <code matlab> | ||
Line 88: | 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 108: | 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 122: | 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 141: | 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 160: | 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> */ |