Differences

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

Link to this comparison view

ps:labs:03 [2021/09/30 13:53]
ionut.gorgos
ps:labs:03 [2023/10/12 22:12] (current)
constantin.savu1510 old revision restored (2022/11/08 14:55)
Line 1: Line 1:
 ===== Laboratorul 03. ===== ===== Laboratorul 03. =====
-<​hidden>​+/*<​hidden>​*/
 ==== Semnale în domeniul frecvență ==== ==== Semnale în domeniul frecvență ====
 +Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://​docs.google.com/​presentation/​d/​1cbNT4X6ZHE3rTQZ1Y5ZNJytpakJHXCmd/​edit?​usp=share_link&​ouid=110538702824281541719&​rtpof=true&​sd=true|aici]]
  
 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 4.(Exercițiul 1), 4.(Exercițiul 2), 4.6 (Exercițiul 3)+    - Secțiunile 4.(Exercițiul 1), 4.(Exercițiul 2), 4.6 (Exercițiul 3)
  
-=== Exercițiul 1 - aproximare de semnale [6p] ===+=== Exercițiul 1 - seria Fourier ​=== 
 +[<color red>​4p</​color>​]
  
 +În acest exercițiu vom începe să lucrăm cu seria Fourier, unul dintre cele mai importante instrumente în procesarea digitală a semnalelor. Va trebui să vă familiarizați cu acesta.
  
-Orice semnal este format dintr-o sumă o infinitate de sinusoide complexe. Ce se întâmplă dacă facem suma doar peste un număr finit de astfel de termeni, ignorând termenii de ordin superior? În acest caz vom forma un semnal care aproximează ​semanlul ​original, iar aproximarea este cu atât mai bună cu cât folosim mai mulți termeni. ​+Orice semnal periodic de perioada $T$ se poate descompune într-o sumă de semnale de bază. Această descompunere poartă numele de seria Fourier și ne arată cum se descompune orice semnal periodic într-o sumă de sinusoide:  
 + 
 +\begin{equation} 
 +  s(t) = \sum_{k=-\infty}^{\infty}{c_{k}e^{j\frac{2 \pi kt}{T}}} 
 +\end{equation} 
 + 
 +Având un semnal dat $s(t)$ putem calcula coeficienții Fourier după formula: 
 +\begin{equation} 
 +  c_k = \frac{1}{T} \int_{t=0 }^{T}{s(t)e^{-j\frac{2 \pi kt}{T}}} 
 +\end{equation} 
 + 
 +Folosind formula precedentă,​ un semnal dreptunghiular,​ de amplitudine "​A"​ pe intervalul $[0, \frac{T}{2}]$ și de amplitudine "​-A"​ pe intervalul $[\frac{T}{2},​ T]$ are coeficienții Fourier daţi de formula următoare:​ 
 + 
 +\begin{equation} 
 + c_{k} = \left\lbrace 
 +  \begin{array}{} 
 +    \frac{2}{j \pi k}A \qquad k \quad impar \\0 \qquad \quad k \quad par 
 +  \end{array} 
 +  \right. 
 +\end{equation} 
 + 
 + 
 +Î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: 
 +  - 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 //ylim// (e.g. $[-A-1, A+1]$). [<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 //stem// (nu mai folosim //plot//). De asemenea, va trebui să reprezentaţi doar magnitudinea,​ folosind funcţia //abs//. [<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>​0.5p</​color>​] 
 +  - Folosiţi diferite valori pentru $k_{max}$ (de exemplu, 1, 5, 11, 49) și observaţi diferenţa. Vedeţi cum folosirea din ce în ce a mai multor coeficienţi ne permite să reconstruim mai bine semnalul original. [<color red>​0.5p</​color>​] 
 + 
 +Graficele voastre trebuie să arate similar cu acestea: 
 + 
 +{{:​ps:​labs:​original_signal.png?​200|}} 
 +{{:​ps:​labs:​coefficients.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 === 
 +[<color red>​4p</​color>​] 
 + 
 +Orice semnal este format dintr-o sumă de o infinitate de sinusoide complexe. Ce se întâmplă dacă facem suma doar peste un număr finit de astfel de termeni, ignorând termenii de ordin superior? În acest caz vom forma un semnal care aproximează ​semnalul ​original, iar aproximarea este cu atât mai bună cu cât folosim mai mulți termeni. ​
  
 În acest exercițiu vom vedea cât de bine este aproximat un semnal, prin observarea erorii $\epsilon_{N}$ dintre semnalul original $s(t)$ și aproximarea $s_{N}(t)$ folosind doar termeni de ordin $\le N$ din seria Fourier (termenii corespunzători $k \in \{-N, \ldots, N\} $ ) În acest exercițiu vom vedea cât de bine este aproximat un semnal, prin observarea erorii $\epsilon_{N}$ dintre semnalul original $s(t)$ și aproximarea $s_{N}(t)$ folosind doar termeni de ordin $\le N$ din seria Fourier (termenii corespunzători $k \in \{-N, \ldots, N\} $ )
Line 28: Line 75:
 iar RMS-ul lui $\epsilon_N$ este dat de: iar RMS-ul lui $\epsilon_N$ este dat de:
 \begin{equation} \begin{equation}
-\text{rms}(\epsilon_N) = \sqrt{\sum_{k=-\infty}^{-{N+1}} |c_k|^2 + \sum_{k=N+1}^\infty |c_k|^2} = \sqrt{2\cdot \sum_{k=N+1}^\infty |c_k|^2}+\text{rms}(\epsilon_N) = \sqrt{\sum_{k=-\infty}^{-{N-1}} |c_k|^2 + \sum_{k=N+1}^\infty |c_k|^2} = \sqrt{2\cdot \sum_{k=N+1}^\infty |c_k|^2}
 \end{equation} \end{equation}
  
Line 45: Line 92:
  
 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) [1p]. Puteți să vă folosiți de acest cod: <code matlab>​ +  - 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. 
-A = 1; +  - 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>​
-T = 100; +  - 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>​
-x = 1:T; +  - 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>1p</color>]
-s = -A*ones(1, T); +
-s(1:(T/2)) = A; +
-</​code>​ +
-  - Calculați coeficienții Fourier $c_{k}$ pentru $k=[0:​500]$. Plotați amplitudinile $|c_k|^2$ ca funcție de $k$. [1p] +
-  - 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\}$.[3p+
-  - 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. [1p]   +
- +
-<noteSemnalele reale au următoarea proprietate:​ coeficienții Fourier negativi sunt conjugații complecși ai celor pozitivi $c_{-k} = c_{k}^*$. De asemenea, semnalele impare s(-t) = -s(t), au coeficienții complet imaginari, obținând $c_{-k} = -c_{k}$ ​</note>+
  
 <​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 73: Line 112:
 </​note>​ </​note>​
  
-=== Exercițiul ​filtrare [4p] ===+=== Exercițiul ​comunicație digitală ​=== 
 +[<color red>​2p</​color>​]
  
-Vom vedea în continuare ce efect are un filtru trece-jos asupra unui semnal. În special ne interesează care sunt termenii din seria Fourier a semnalului rezultat în urma filtrării. ​  +Pentru a transmite 2 biți simultan putem  folosi două frecvențe diferite (f1, f2) pentru a coda o valoare de 2 biți:
- +
-Dacă știm funcția de transfer a unui filtru trece-jos (sau alt tip de sistem liniar), care primește la intrare un semnal (pentru care putem găsi coeficienții Fourier $c_k$), la curs am arătat că putem găsi coeficienții Fourier ($c_k^y$) ai semnalului rezultat ca: +
- +
-\begin{equation} +
-c_k^y = H(\frac{k}{T}) \cdot c_k +
-\end{equation} +
- +
-Astfel putem reconstrui semnalul de ieșire folosind coeficienții Fourier $c_k^y$. +
- +
- +
-În acest exercițiu trebuie să calculăm coeficienții Fourier ai output-ului unui filtru trece-jos, dat fiind un semnal de intrare de tip puls cu amplitudine $A=1$ și pulsul de durată $\Delta=\frac{T}{5}$. Știm că coeficienții Fourier ai semnalului sunt dați de: +
- +
-\begin{equation} +
-c_k = A \cdot e^{-j\frac{\pi k \Delta}{T}} \cdot \frac{\text{sin}(\frac{\pi k \Delta}{T})}{\pi k} =  A \cdot e^{-j\frac{\pi k \Delta}{T}} \cdot \frac{\Delta}{T} \cdot \text{sinc}(\frac{\pi k \Delta}{T}). +
-\end{equation} +
- +
-<​note>​ Atenție: Octave folosește funcția sinc normalizată sinc(x) = $ \frac{\text{sin}(\pi x)}{\pi x}$</​note>​ +
-Puteți vedea circuitul filtrului trece-jos în următoarea imagine: +
- +
-{{:​ps:​labs:​rc_divider.png?​200|}} +
- +
-Funcția de transfer a circuitului (pe care am determinat-o la curs și la laboratoarele anterioare) este următoarea:​ +
- +
-\begin{equation} +
-H(f=\frac{k}{T}) = \frac{1}{1+j 2 \pi R C \frac{k}{T}} +
-\end{equation} +
- +
-unde R și C sunt rezistența și respectiv capacitatea. +
- +
-Task-ul vostru este să determinați coeficienții output-ului și să reconstruiți semnalul de ieșire pentru diferite frecvențe de tăiere. +
- +
-Pentru ​aceasta urmăriți următorii pași: +
-  - Generați semnalul puls și plotați-l. Puteți folosi T=100 de eșantioane (puncte), dintre care doar $\Delta$ nu sunt egale cu 0. [1p] +
-  - Calculați primii N=30 coeficienți Fourier pozitivi $c_k$ ai semnalului și plotați-i. Pentru a îi reprezenta va trebui să folosiţi funcţia '​stem'​. De asemenea, va trebui să reprezentaţi doar magnitudinea,​ folosind funcţia '​abs'​. [1p] +
-  - Calculați coeficienții Fourier asociați semnalului de output, $c_k^y$, folosind formula de mai sus și plotați-i ca mai sus. Pentru asta va trebui să alegeți o frecvență de cut-off $f_c$ care va determina valorile R și C ( $RC = \frac{1}{2\pi f_c}$ ). [1p] +
-  Puteți încerca următoarele valori pentru $f_c$: +
-    - $f_c = 0.1/T$ (frecvența de cut-off e mult mai mică decât frecvența fundamentală a semnalului => filtrare puternică) +
-    - $f_c = 1/T$ (frecvența de cut-off = frecvența fundamentală => puterea este înjumătățită) +
-    - $f_c = 10/T$ (frecvența de cut-off mult mai mare decât frecvența fundamentală => filtrare slabă) +
-  - Reconstruiți semnalul de output cu ajutorul seriei Fourier (folosind formula de la exercițiul 1) [1p] +
- +
-=== Exercițiul 3 - comunicație digitală [Bonus] === +
- +
-Am văzut la curs că pentru ​a transmite 2 biți simultan putem  folosi două frecvențe diferite (f1, f2) pentru a coda o valoare de 2 biți:+
   - '​00':​ folosim un semnal egal cu 0 (nicio frecvență)   - '​00':​ folosim un semnal egal cu 0 (nicio frecvență)
   - '​01':​ folosim o sinusoidă ce conține doar prima frecvență ($\sin(2\pi f_1 t)$)  ​   - '​01':​ folosim o sinusoidă ce conține doar prima frecvență ($\sin(2\pi f_1 t)$)  ​
Line 130: Line 126:
   - verificați că semnalul rezultat codează secvența voastră random;   - verificați că semnalul rezultat codează secvența voastră random;
  
-Notă: pentru ​a genera o secvență random de valori întregi inspectați funcția ​'randi' ​din MATLAB. +<​note>​ Pentru ​a genera o secvență random de valori întregi inspectați funcția ​//randi// din MATLAB. ​</​note>​
  
-</​hidden>​+/*</​hidden>​*/
ps/labs/03.1632999204.txt.gz · Last modified: 2021/09/30 13:53 by ionut.gorgos
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