This shows you the differences between two versions of the page.
ps:labs_python_gpt:03 [2025/10/15 21:19] andrei.gavriliu |
ps:labs_python_gpt:03 [2025/10/15 21:34] (current) andrei.gavriliu [Semnale în domeniul frecvență] |
||
---|---|---|---|
Line 41: | Line 41: | ||
Principalii paşi pentru asta sunt: | Principalii paşi pentru asta sunt: | ||
- | - Creaţi semnalul original. Utilizaţi, de exemplu $T = 100$ şi $A = 3$ şi generaţi un semnal cu amplitudinea $3$ peste primele 50 de eşantioane şi $-3$ peste ultimele 50. Reprezentaţi grafic semnalul ca funcţie de timp (unde timpul începe de la 1 până la 100). Ajustaţi limita verticală a plot-ului, folosind funcţia //plt.ylim// (e.g. $[-A-1, A+1]$). [<color red>1p</color>] | + | - Creaţi semnalul original. Utilizaţi, de exemplu $T = 100$ şi $A = 3$ şi generaţi un semnal cu amplitudinea $3$ peste primele 50 de eşantioane şi $-3$ peste ultimele 50. Reprezentaţi grafic semnalul ca funcţie de timp. Ajustaţi limita verticală a plot-ului în range-ul $[-A-1, A+1]$ pentru a putea vedea mai bine graficul. [<color red>1p</color>] |
- | - Calculaţi coeficienţii Fourier $c_{k}$ pentru $k = [-k_{max}, k_{max}]$. De exemplu pentru $k_{max} = 3$, avem $k = {-3,-2,-1,0,1,2,3}$. Reprezentaţi grafic coeficienţii $c_k$ şi observaţi simetria lor în jurul lui $k = 0$. Pentru a îi reprezenta va trebui să folosiţi funcţia //plt.stem// (nu mai folosim //plt.plot//). De asemenea, va trebui să reprezentaţi doar magnitudinea, folosind funcţia //np.abs//. [<color red>1p</color>] | + | - Calculaţi coeficienţii Fourier $c_{k}$ pentru $k = [-k_{max}, k_{max}]$. De exemplu pentru $k_{max} = 3$, avem $k = {-3,-2,-1,0,1,2,3}$. Reprezentaţi grafic coeficienţii $c_k$ şi observaţi simetria lor în jurul lui $k = 0$. Pentru a îi reprezenta va trebui să folosiţi funcţia //plt.stem//. De asemenea, va trebui să reprezentaţi doar magnitudinea, adică valoarea absolută a coeficienților. [<color red>1p</color>] |
- Reconstruiţi semnalul doar cu ajutorul acestor coeficienţi, folosind formula: $s(t) = \sum_{k=-\infty}^{\infty}{c_{k}e^{j\frac{2 \pi kt}{T}}}$. [<color red>1p</color>] | - Reconstruiţi semnalul doar cu ajutorul acestor coeficienţi, folosind formula: $s(t) = \sum_{k=-\infty}^{\infty}{c_{k}e^{j\frac{2 \pi kt}{T}}}$. [<color red>1p</color>] | ||
- Reprezentaţi grafic noul semnal reconstruit și comparați-l cu originalul. [<color red>1p</color>] | - Reprezentaţi grafic noul semnal reconstruit și comparați-l cu originalul. [<color red>1p</color>] | ||
Line 91: | Line 91: | ||
Pentru asta ar trebui să urmăriți următorii pași: | Pentru asta ar trebui să urmăriți următorii pași: | ||
- | - Creați semnalul original. Folosiți, de exemplu T=100 și A=1 pentru a genera semnalul cu valoarea 1 în primele 50 de eșantioane și -1 în ultimele 50. Reprezentaţi grafic semnalul ca funcţie de timp (unde timpul începe de la 1 până la 100) [<color red>1p</color>]. Puteți să folosiți codul de la exercițiul precedent. | + | - Creați semnalul original. Folosiți, de exemplu T=100 și A=1 pentru a genera semnalul cu valoarea 1 în primele 50 de eșantioane și -1 în ultimele 50. Reprezentaţi grafic semnalul ca funcţie de timp [<color red>1p</color>]. |
- | - Calculați coeficienții Fourier $c_{k}$ pentru $k=[0:500]$. Plotați amplitudinile $|c_k|^2$ ca funcție de $k$, folosind //stem// și //abs// ca în exercițiul precedent. [<color red>1p</color>] | + | - Calculați coeficienții Fourier $c_{k}$ pentru $k=[0:500]$. Plotați amplitudinile $|c_k|^2$ ca funcție de $k$, folosind //stem// și //abs//. [<color red>1p</color>] |
- Calculați $\text{rms}(\epsilon_{N})$ pentru fiecare $N \in \{1, \ldots, 500\}$. Vedeți explicația de mai jos pentru a putea calcula RMS folosind Teorema lui Parseval. Plotați (cu //plot//, //semilogy// și //loglog//) valoarea rms pentru $N \in \{1, \ldots, 500\}$.[<color red>1p</color>] | - Calculați $\text{rms}(\epsilon_{N})$ pentru fiecare $N \in \{1, \ldots, 500\}$. Vedeți explicația de mai jos pentru a putea calcula RMS folosind Teorema lui Parseval. Plotați (cu //plot//, //semilogy// și //loglog//) valoarea rms pentru $N \in \{1, \ldots, 500\}$.[<color red>1p</color>] | ||
- | - Determinați cel mai mic $N$ astfel încât $\text{rms}(\epsilon_{N}) < 0.05$ și reconstruiți semnalul original folosind acest număr de coeficienți. Trebuie să folosiți atât coeficienții pozitivi cât și negativi (de ex. de la -N la N) pentru a reconstrui semnalul. Reconstruiţi semnalul doar cu ajutorul acestor coeficienţi, folosind formula: $s_N(t) = \sum_{k=-N}^{N}{c_{k}e^{j\frac{2 \pi kt}{T}}}$. Reprezentați grafic semnalul reconstruit și comparați-l cu semnalul inițial. [<color red>2p</color>] | + | - Determinați cel mai mic $N$ astfel încât $\text{rms}(\epsilon_{N}) < 0.05$ și reconstruiți semnalul original folosind acest număr de coeficienți. Trebuie să folosiți atât coeficienții pozitivi cât și negativi pentru a reconstrui semnalul. Reconstruiţi semnalul doar cu ajutorul acestor coeficienţi, folosind formula: $s_N(t) = \sum_{k=-N}^{N}{c_{k}e^{j\frac{2 \pi kt}{T}}}$. Reprezentați grafic semnalul reconstruit și comparați-l cu semnalul inițial. [<color red>2p</color>] |
<note> Pentru a calcula RMS al erorii trebuie să calculăm suma pentru toți coeficienții $c_k$ cu $|k|> k_0 $, adică o infinitate de termeni. Putem încerca doar să aproximăm această sumă, sau ne putem folosi de unele proprietăți ale seriei Fourier pentru a o calcula exact. Mai precis, vom folosi Teorema lui Parseval prin care putem calcula puterea unui semnal în două feluri, în domeniul timp, integrând semnalul la pătrat peste o perioadă sau în frecvență calculând suma pătratelor modulului ale fiecărui coeficient: | <note> Pentru a calcula RMS al erorii trebuie să calculăm suma pentru toți coeficienții $c_k$ cu $|k|> k_0 $, adică o infinitate de termeni. Putem încerca doar să aproximăm această sumă, sau ne putem folosi de unele proprietăți ale seriei Fourier pentru a o calcula exact. Mai precis, vom folosi Teorema lui Parseval prin care putem calcula puterea unui semnal în două feluri, în domeniul timp, integrând semnalul la pătrat peste o perioadă sau în frecvență calculând suma pătratelor modulului ale fiecărui coeficient: | ||
Line 124: | Line 124: | ||
- plotați semnalul rezultat folosind perioada ($1/f_t$) pentru fiecare valoare transmisă; | - plotați semnalul rezultat folosind perioada ($1/f_t$) pentru fiecare valoare transmisă; | ||
- verificați că semnalul rezultat codează secvența voastră random; | - verificați că semnalul rezultat codează secvența voastră random; | ||
- | |||
- | <note> Pentru a genera o secvență random de valori întregi inspectați modulul //numpy.random// | ||
- | |||
- | [[https://numpy.org/doc/stable/reference/random/index.html|Documentație numpy.random]]. </note> | ||
/* </hidden> */ | /* </hidden> */ |