This shows you the differences between two versions of the page.
|
ps:labs_python_gpt:05 [2025/10/27 19:10] darius.necula |
ps:labs_python_gpt:05 [2025/10/30 00:12] (current) ionut.gorgos |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ===== Laboratorul 05. ===== | ===== Laboratorul 05. ===== | ||
| - | <hidden> | + | |
| - | ==== Semnale digitale - procesarea simplă, eşantionarea și modularea în amplitudine ==== | + | ==== Semnale digitale - procesarea simplă, eşantionarea și subeşantionarea ==== |
| Î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. | ||
| Line 11: | Line 11: | ||
| === Exerciţiul 1 -- Procesarea simplă === | === Exerciţiul 1 -- Procesarea simplă === | ||
| - | [<color red>2p</color>] | + | [<color red>3p</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 20: | 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) și amplitudine 1, 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) și amplitudine 1, la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane, e.g. $N=128$). | ||
| - | - 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>0.5p</color>] |
| - | - Plotaţi toate secvenţele de intrare/ieşire. [<color red>1p</color>] | + | - Plotaţi toate secvenţele de intrare/ieşire. [<color red>0.5p</color>] |
| - | - Ce fel de sistem de procesare este acesta ? | + | - Ce fel de sistem de procesare este acesta? [<color red>0.5p</color>] |
| - Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția [[https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lfilter.html|lfilter]] din biblioteca //scipy//? (opțional) | - Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția [[https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.lfilter.html|lfilter]] din biblioteca //scipy//? (opțional) | ||
| - | - Adăugați la sinusoidele generate mai sus, un zgomot alb de deviație standard 0.1 și medie 0. Plotați din nou toate secvenţele de intrare/ieşire.[<color red>1p</color>] | + | - Adăugați la sinusoidele generate mai sus, un zgomot alb de deviație standard 0.1 și medie 0. Plotați din nou toate secvenţele de intrare/ieşire.[<color red>0.5p</color>] |
| <note tip> | <note tip> | ||
| Pentru fiecare eşantion de intrare ($x(n)$) trebuie să produceţi o valoare de ieşire ($y(n)$). Pentru primele patru eşantioane nu aveţi suficiente valori de intrare diferite de zero, şi pentru simplitate ori setaţi ieşirea pe zero, ori faceţi media dintre 1, 2, 3, 4 eşantioane, în timp ce consideraţi ca celelalte să fie zero. Dar de la al 5-lea eşantion veţi avea câte 5 eşantioane la îndemână (actualul $x(n)$ şi anterioarele patru eşantioane). | Pentru fiecare eşantion de intrare ($x(n)$) trebuie să produceţi o valoare de ieşire ($y(n)$). Pentru primele patru eşantioane nu aveţi suficiente valori de intrare diferite de zero, şi pentru simplitate ori setaţi ieşirea pe zero, ori faceţi media dintre 1, 2, 3, 4 eşantioane, în timp ce consideraţi ca celelalte să fie zero. Dar de la al 5-lea eşantion veţi avea câte 5 eşantioane la îndemână (actualul $x(n)$ şi anterioarele patru eşantioane). | ||
| Line 34: | Line 34: | ||
| === Exercițiul 2 – modularea în amplitudine === | === Exercițiul 2 – modularea în amplitudine === | ||
| - | [<color red>5p</color>] | + | [<color red>4p</color>] |
| În acest exercițiu va trebui să încercați să efectuați modularea în amplitudine asupra următorului semnal exponențial (eng. exponential decay signal) : $s(t) = e^{-at}u(t)$, unde $a>0$ și $u(t)$ este treapta unitară (i.e. egală cu 1 pentru $t\ge0$, 0 altfel). | În acest exercițiu va trebui să încercați să efectuați modularea în amplitudine asupra următorului semnal exponențial (eng. exponential decay signal) : $s(t) = e^{-at}u(t)$, unde $a>0$ și $u(t)$ este treapta unitară (i.e. egală cu 1 pentru $t\ge0$, 0 altfel). | ||
| Line 50: | Line 50: | ||
| Pentru asta va trebui să urmăriți acești pași: | Pentru asta va trebui să urmăriți acești pași: | ||
| - | * Creați semnalul $s(t)$ pentru $t\in\{1,\ldots,T=128\}$, folosind $a=0.05$. [<color red>1p</color>] | + | * Creați semnalul $s(t)$ pentru $t\in\{1,\ldots,T=128\}$, folosind $a=0.05$. [<color red>0.5p</color>] |
| - | * Calculați și plotați (cu //stem//) spectrul folosind FFT (Transformata Fourier Rapidă), pe care nu am făcut-o încă la curs, dar o vom face în următoarele cursuri. Pentru moment, puteți folosi acest cod: [<color red>1p</color>] | + | * Calculați și plotați (cu //stem//) spectrul folosind FFT (Transformata Fourier Rapidă), pe care nu am făcut-o încă la curs, dar o vom face în următoarele cursuri. Pentru moment, puteți folosi acest cod: [<color red>0.5p</color>] |
| <code python> | <code python> | ||
| import numpy as np | import numpy as np | ||
| Line 84: | Line 84: | ||
| - 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$ ? | ||
| - | - Generaţi cod Python 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> | + | - Generaţi cod Python 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 python> |
| - | figure; | + | import numpy as np |
| - | fx = zeros(1, N); | + | from scipy.fft import fft, fftshift |
| - | fidx = (fs/N) * linspace(0,N-1,N); | + | import matplotlib.pyplot as plt |
| - | spectrum = fft(signal, N); | + | |
| - | stem(fidx, abs(spectrum)); | + | plt.figure() |
| - | xlabel('Frequency (Hz)'); | + | fx = np.zeros(1, N) |
| - | ylabel('Amplitude'); | + | fidx = (fs/N) * np.linspace(0,N-1,N) |
| - | title('Spectrum of signal'); | + | spectrum = fft(signal, N) |
| + | plt.stem(fidx, np.abs(spectrum)) | ||
| + | plt.xlabel('Frequency (Hz)') | ||
| + | plt.ylabel('Amplitude') | ||
| + | plt.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: [<color red>1p</color>] <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 python> |
| - | figure; | + | import numpy as np |
| - | fidx = (fs/N)*linspace(-N/2, N/2-1, N); | + | from scipy.fft import fft, fftshift |
| - | stem(fidx, abs(fftshift(spectrum))); | + | import matplotlib.pyplot as plt |
| - | xlabel('Frequency (Hz)'); | + | |
| - | ylabel('Amplitude'); | + | plt.figure() |
| - | title('Zero-centred frequency spectrum of signal'); | + | fidx = (fs/N)*np.linspace(-N/2, N/2-1, N) |
| + | plt.stem(fidx, np.abs(fftshift(spectrum))) | ||
| + | plt.xlabel('Frequency (Hz)') | ||
| + | plt.ylabel('Amplitude') | ||
| + | plt.title('Zero-centred frequency spectrum of signal') | ||
| </code> | </code> | ||
| - 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? [<color red>1p</color>] | + | - Putem să reducem frecvenţa de eşantionare în timp ce încă detectăm spectrul dorit de frecvenţe ? (vedeţi bandpass sampling [[https://web.archive.org/web/20240102080629/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>] |
| <hidden> | <hidden> | ||