This shows you the differences between two versions of the page.
ps:labs:05 [2021/11/01 10:46] ionut.gorgos |
ps:labs:05 [2022/11/08 14:57] (current) ionut.gorgos |
||
---|---|---|---|
Line 2: | Line 2: | ||
/*<hidden>*/ | /*<hidden>*/ | ||
==== Semnale digitale - procesarea simplă, eşantionarea și recuperarea semnalului ==== | ==== Semnale digitale - procesarea simplă, eşantionarea și recuperarea semnalului ==== | ||
+ | Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://docs.google.com/presentation/d/1BtLZa_4XCMcErExG5YSXHoNtr3Wtg8qy/edit?usp=share_link&ouid=110538702824281541719&rtpof=true&sd=true|aici]] | ||
În acest laborator vom începe să experimentăm efectele semnalelor eşantionate şi procesarea semnalelor digitale. | În acest laborator vom începe să experimentăm efectele semnalelor eşantionate şi procesarea semnalelor digitale. | ||
Materiale ajutătoare: | Materiale ajutătoare: | ||
- | - [[http://www.ece.rice.edu/~dhj/courses/elec241/col10040.pdf|D. Johnson's book]] | + | - {{:ps:labs:fundamentals-of-electrical-engineering-i-9.72.pdf|Cartea lui Don Johnson}} |
- Secţiunile 5.1-5.3 | - Secţiunile 5.1-5.3 | ||
- | === Exerciţiul 1 -- Procesarea simplă [4p] === | + | === Exerciţiul 1 -- Procesarea simplă === |
+ | [<color red>4p</color>] | ||
Vom încerca să implementăm un sistem de procesare digitală simplă, care funcţionează după cum urmează: | Vom încerca să implementăm un sistem de procesare digitală simplă, care funcţionează după cum urmează: | ||
Line 18: | Line 20: | ||
Urmăriţi aceşti paşi: | Urmăriţi aceşti paşi: | ||
- | - Creaţi câteva secvenţe digitale care reprezintă sinusoide de diferite frecvenţe (1, 2, 10, 20, 100 Hz), la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane, e.g. $N=128$). | + | - Creaţi câteva secvenţe digitale care reprezintă sinusoide de diferite frecvenţe (1, 2, 10, 20, 100 Hz), la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane, e.g. $N=128$). [<color red>1p</color>] |
- | - Implementaţi sistemul de procesare menţionat mai sus | + | - Implementaţi sistemul de procesare menţionat mai sus. [<color red>1p</color>] |
- | - Creaţi secvenţele corespunzătoare de ieşire. | + | - Creaţi secvenţele corespunzătoare de ieşire. [<color red>1p</color>] |
- | - Plotaţi toate secvenţele de intrare/ieşire | + | - Plotaţi toate secvenţele de intrare/ieşire. [<color red>1p</color>] |
- Ce fel de sistem de procesare este acesta ? | - Ce fel de sistem de procesare este acesta ? | ||
- Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția 'filter'? (opțional) | - Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția 'filter'? (opțional) | ||
Line 30: | Line 32: | ||
<note> Pentru crearea timpilor de eșantionare puteți folosi 0:perioada_esantionare:timp_maxim sau funcția linspace(0,timp_maxim,numar_esantioane)</note> | <note> Pentru crearea timpilor de eșantionare puteți folosi 0:perioada_esantionare:timp_maxim sau funcția linspace(0,timp_maxim,numar_esantioane)</note> | ||
- | === Exercițiul 2 -- Subeşantionare (Bandpass sampling) [3p] === | + | === Exercițiul 2 -- Subeşantionare (Bandpass sampling) === |
+ | [<color red>3p</color>] | ||
În acest exercițiu vom experimenta subeșantionarea, metodă care reduce frecvența de eșantionare necesară pentru a obține întreg spectru al semnalului. | În acest exercițiu vom experimenta subeșantionarea, metodă care reduce frecvența de eșantionare necesară pentru a obține întreg spectru al semnalului. | ||
Line 39: | Line 42: | ||
Task-uri/întrebări: | Task-uri/întrebări: | ||
- | - Generați semnalul $signal = cos(2 \cdot \pi \cdot f_c \cdot t)$, unde $f_c = 3000;$ Hz, $t=0:T_s:100 \cdot T_s$ și $T_s = \frac{1}{f_s} = \frac{1}{8000}$ | + | - Generați semnalul $signal = cos(2 \cdot \pi \cdot f_c \cdot t)$, unde $f_c = 3000$ Hz, $t=0:T_s:100 \cdot T_s$ și $T_s = \frac{1}{f_s} = \frac{1}{8000}$ |
- De ce avem energie în ambele frecvenţe $f_c$ şi $-f_c$ ? | - De ce avem energie în ambele frecvenţe $f_c$ şi $-f_c$ ? | ||
- | - Folosiţi Octave pentru a calcula transformata Fourier Discretă a unei sinusoide de $3kHz$ eşantionată la $8kHz$. Folosiți $N=64$ pentru fft. Folosiți acest cod pentru DFT: <code matlab> | + | - Folosiţi Matlab pentru a calcula transformata Fourier Discretă a unei sinusoide de $3kHz$ eşantionată la $8kHz$. Folosiți $N=64$ pentru fft. Folosiți acest cod pentru DFT: [<color red>1p</color>] <code matlab> |
figure; | figure; | ||
fx = zeros(1, N); | fx = zeros(1, N); | ||
Line 51: | Line 54: | ||
title('Spectrum of signal'); | title('Spectrum of signal'); | ||
</code> | </code> | ||
- | - Plotaţi (cu 'stem') rezultatele şi observaţi frecvenţele. Acum folosiţi "fftshift" pe rezultatul obţinut de la "fft" şi plotaţi din nou rezultatele. Folosiți acest cod: <code matlab> | + | - Plotaţi (cu 'stem') rezultatele şi observaţi frecvenţele. Acum folosiţi "fftshift" pe rezultatul obţinut de la "fft" şi plotaţi din nou rezultatele. Folosiți acest cod: [<color red>1p</color>] <code matlab> |
figure; | figure; | ||
fidx = (fs/N)*linspace(-N/2, N/2-1, N); | fidx = (fs/N)*linspace(-N/2, N/2-1, N); | ||
Line 61: | Line 64: | ||
- De ce într-un caz avem semnal la $3 kHz$ şi $5 kHz$ în timp ce, în celălalt caz pare să avem la $-3 kHz$ şi $3 kHz$ ? | - De ce într-un caz avem semnal la $3 kHz$ şi $5 kHz$ în timp ce, în celălalt caz pare să avem la $-3 kHz$ şi $3 kHz$ ? | ||
- Care este semnificaţia semnalului de $5 kHz$ ? Când plotaţi rezultatele de la "fft" luaţi în considerare că, în mod implicit output-ul transformatei Discrete Fourier, deci şi "fft", arată frecvenţele de la $0$ la $f_s$ (frecvenţa de eşantionare). | - Care este semnificaţia semnalului de $5 kHz$ ? Când plotaţi rezultatele de la "fft" luaţi în considerare că, în mod implicit output-ul transformatei Discrete Fourier, deci şi "fft", arată frecvenţele de la $0$ la $f_s$ (frecvenţa de eşantionare). | ||
- | - Putem să reducem frecvenţa de eşantionare în timp ce încă detectăm spectrul dorit de frecvenţe ? (vedeţi bandpass sampling [[https://www.informit.com/articles/article.aspx?p=345472&seqNum=3|Fig 2-7]]). Cât de mult putem reduce frecvenţa de eşantionare? Ce se întâmplă dacă reducem frecvenţa de eşantionare sub 2B? | + | - Putem să reducem frecvenţa de eşantionare în timp ce încă detectăm spectrul dorit de frecvenţe ? (vedeţi bandpass sampling [[https://www.informit.com/articles/article.aspx?p=345472&seqNum=3|Fig 2-7]]). Cât de mult putem reduce frecvenţa de eşantionare? Ce se întâmplă dacă reducem frecvenţa de eşantionare sub 2B? [<color red>1p</color>] |
- | === Exercițiul 3 -- Reconstruire de semnal [3p] === | + | === Exercițiul 3 -- Reconstruire de semnal === |
+ | [<color red>3p</color>] | ||
Pentru reconstruirea unui semnal ideea este: | Pentru reconstruirea unui semnal ideea este: | ||
Line 70: | Line 74: | ||
Vom simula un semnal sinus analog, pe care îl vom eșantiona, apoi îl vom reconstrui. Pentru asta ar trebui să faceţi următorii paşi: | Vom simula un semnal sinus analog, pe care îl vom eșantiona, apoi îl vom reconstrui. Pentru asta ar trebui să faceţi următorii paşi: | ||
* simulați un semnal sinus 'analog'. Pentru aceasta generați un semnal sinus de frecvență 1Hz cu un număr mare de puncte (i.e. 5000 de puncte pe 5 perioade). Pentru timp folosiți: <code matlab> t = linspace(0, 5, N_analog); </code> (i.e. sinusoida face 5 perioade). | * simulați un semnal sinus 'analog'. Pentru aceasta generați un semnal sinus de frecvență 1Hz cu un număr mare de puncte (i.e. 5000 de puncte pe 5 perioade). Pentru timp folosiți: <code matlab> t = linspace(0, 5, N_analog); </code> (i.e. sinusoida face 5 perioade). | ||
- | * construiți semnalul digital, adică varianta eșantionată a semnalului analog, folosind un număr mai mic de puncte (i.e. de 100 de ori mai puține) din semnalul analog. | + | * construiți semnalul digital, adică varianta eșantionată a semnalului analog, folosind un număr mai mic de puncte (i.e. de 100 de ori mai puține) din semnalul analog. [<color red>1p</color>] |
- | * faceți din semnalul digital un semnal continuu (analog), prin crearea unui semnal de aceeași lungime ca cel analog inițial, folosind valorile din semnalul digital pentru valorile de la momentele eșantionate și zero în rest. | + | * faceți din semnalul digital un semnal continuu (analog), prin crearea unui semnal de aceeași lungime ca cel analog inițial, folosind valorile din semnalul digital pentru valorile de la momentele eșantionate și zero în rest. [<color red>1p</color>] |
- | * faceţi convoluţie între un sinc (de frecvenţă fs, dar centrat pe zero, adică un semnal simetric) şi semnalul continuu creat anterior. | + | * faceţi convoluţie între un sinc (de frecvenţă $f_s$, dar centrat pe zero, adică un semnal simetric) şi semnalul continuu creat anterior. [<color red>1p</color>] |
Pentru a face convoluție cu un semnal sinc, folosiți codul următor: | Pentru a face convoluție cu un semnal sinc, folosiți codul următor: | ||
Line 79: | Line 83: | ||
N_sinc = N_analog; | N_sinc = N_analog; | ||
t_sinc = linspace(-0.2, 0.2, N_sinc/10); | t_sinc = linspace(-0.2, 0.2, N_sinc/10); | ||
- | sincvec = sinc(samples_digital*t_sinc); | + | sincvec = sinc(f_s*t_sinc); |
s_cont_filtered = conv(s_cont, sincvec); | s_cont_filtered = conv(s_cont, sincvec); | ||
</code> | </code> | ||
</note> | </note> | ||
- | , unde samples_digital reprezintă numărul de eșantioane pentru semnalul digital. | + | ,unde $f_s = 10$. |
<note> | <note> | ||
Pentru semnalele continue (analogice), puteți folosi pentru afișare //plot//, iar pentru cele digitale (eșantionate), //stem//. | Pentru semnalele continue (analogice), puteți folosi pentru afișare //plot//, iar pentru cele digitale (eșantionate), //stem//. |