Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ps:labs_python_gpt:03 [2025/10/15 18:44]
andrei.gavriliu created
ps:labs_python_gpt:03 [2025/10/15 21:34] (current)
andrei.gavriliu [Semnale în domeniul frecvență]
Line 34: Line 34:
 \end{equation} \end{equation}
  
 +<​note> ​
 +Semnalele reale au următoarea proprietate:​ coeficienții Fourier negativi sunt conjugații complecși ai celor pozitivi $c_{-k} = c_{k}^*$. Puteți verifica pentru semnalul nostru dreptunghiular. De asemenea, semnalele pare s(-t) = s(t), au coeficienții complet reali, obținând $c_{−k}=c_{k}$,​ iar semnalele impare s(-t) = -s(t), au coeficienții complet imaginari, obținând $c_{−k}=−c_{k}$.
 +</​note>​
  
 În acest exerciţiu va trebui să încercaţi să reconstruiţi semnalul dreptunghiular folosind un număr limitat de coeficienți pentru a vedea diferenţa dintre semnalul original și cel reconstruit. În acest exerciţiu va trebui să încercaţi să reconstruiţi semnalul dreptunghiular folosind un număr limitat de coeficienți pentru a vedea diferenţa dintre semnalul original și cel reconstruit.
  
 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 49: Line 52:
 {{:​ps:​labs:​coefficients.png?​200|}} {{:​ps:​labs:​coefficients.png?​200|}}
 {{:​ps:​labs:​reconstructed_signal.png?​200|}} {{:​ps:​labs:​reconstructed_signal.png?​200|}}
- 
-<​note> ​ 
-Semnalele reale au următoarea proprietate:​ coeficienții Fourier negativi sunt conjugații complecși ai celor pozitivi $c_{-k} = c_{k}^*$. Puteți verifica pentru semnalul nostru dreptunghiular. De asemenea, semnalele pare s(-t) = s(t), au coeficienții complet reali, obținând $c_{−k}=c_{k}$,​ iar semnalele impare s(-t) = -s(t), au coeficienții complet imaginari, obținând $c_{−k}=−c_{k}$. 
-</​note>​ 
  
 === Exercițiul 2 - aproximare de semnale === === Exercițiul 2 - aproximare de semnale ===
Line 92: 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 125: 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>​ */
ps/labs_python_gpt/03.1760543070.txt.gz · Last modified: 2025/10/15 18:44 by andrei.gavriliu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0