This shows you the differences between two versions of the page.
ps:labs_python_gpt:03 [2025/10/15 21:25] andrei.gavriliu |
ps:labs_python_gpt:03 [2025/10/15 21:34] (current) andrei.gavriliu [Semnale în domeniul frecvență] |
||
---|---|---|---|
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> */ |