Differences

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

Link to this comparison view

ps:labs_python:04 [2023/10/21 20:30]
darius.necula
ps:labs_python:04 [2024/10/23 09:50] (current)
ionut.gorgos
Line 1: Line 1:
 ===== Laboratorul 04. ===== ===== Laboratorul 04. =====
  
-<​hidden>​ +/*<​hidden>​*/ 
-==== Shiftarea în fază/timpfiltrarea semnalelor periodice ​și modularea în amplitudine ​==== +==== Shiftarea în fază/​timp ​și filtrarea semnalelor periodice ​ ==== 
-Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://​docs.google.com/​presentation/​d/​1grPaACSnc3YozJHy9iL1SSGGWsCy0aNy/edit?usp=share_link&​ouid=110538702824281541719&​rtpof=true&​sd=true|aici]]+Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://​docs.google.com/​presentation/​d/​16lKfZUhSyECL2PWkuTa_bF45SjYd-wF6/edit?usp=sharing&​ouid=110538702824281541719&​rtpof=true&​sd=true|aici]]
  
 În acest laborator vom încerca să experimentăm câteva dintre proprietăţile Transformatei Fourier, care ne permite să shiftăm/​întârziem într-un domeniu şi să observăm un anumit efect în alt domeniu. De exemplu, la curs, am arătat că o întârziere în domeniul "​Timp"​ înseamnă o shiftare de frecvenţă în domeniul "​Frecvenţă"​. În acest laborator vom încerca să experimentăm câteva dintre proprietăţile Transformatei Fourier, care ne permite să shiftăm/​întârziem într-un domeniu şi să observăm un anumit efect în alt domeniu. De exemplu, la curs, am arătat că o întârziere în domeniul "​Timp"​ înseamnă o shiftare de frecvenţă în domeniul "​Frecvenţă"​.
Line 9: Line 9:
 Materiale ajutătoare:​ Materiale ajutătoare:​
     - {{:​ps:​labs:​fundamentals-of-electrical-engineering-i-9.72.pdf|Cartea lui Don Johnson}}     - {{:​ps:​labs:​fundamentals-of-electrical-engineering-i-9.72.pdf|Cartea lui Don Johnson}}
-    - Secțiunea 4.8 (vezi tabelul 4.2 pentru exercițiul 1 și exemplul 4.5 pentru exercițiul 3) și Secțiunea 4.7 pentru exercițiul 2+    - Secțiunea 4.8 (vezi tabelul 4.2 pentru exercițiul 1) și Secțiunea 4.7 pentru exercițiul 2
  
 === Exercițiul 1 – shiftarea în frecvență === === Exercițiul 1 – shiftarea în frecvență ===
-[<color red>4p</​color>​]+[<color red>5p</​color>​]
  
 În acest exerciţiu vrem să întârziem un semnal în timp, prin modificarea spectrului său (vezi proprietăţile Transformatei Fourier). Vom folosi un semnal pe care l-am mai folosit şi anume, semnalul dreptunghiular cu amplitudinea $A$ pe intervalul $[0, \frac{T}{2}]$ şi cu amplitudinea $-A$ pe intervalul $[\frac{T}{2},​ T]$ care are binecunoscutul spectru dat de: În acest exerciţiu vrem să întârziem un semnal în timp, prin modificarea spectrului său (vezi proprietăţile Transformatei Fourier). Vom folosi un semnal pe care l-am mai folosit şi anume, semnalul dreptunghiular cu amplitudinea $A$ pe intervalul $[0, \frac{T}{2}]$ şi cu amplitudinea $-A$ pe intervalul $[\frac{T}{2},​ T]$ care are binecunoscutul spectru dat de:
Line 19: Line 19:
  c_{k} = \left\lbrace  c_{k} = \left\lbrace
   \begin{array}{}   \begin{array}{}
-    \frac{2}{j \pi k}\qquad k \quad impar \\0 \qquad \quad k \quad par+    \frac{2 ​\cdot A}{j \pi k} \qquad k \quad impar \\0 \qquad \quad k \quad par
   \end{array}   \end{array}
   \right.   \right.
Line 25: Line 25:
  
 Pentru acest task va trebui să urmaţi următorii paşi: Pentru acest task va trebui să urmaţi următorii paşi:
-  * Reprezentaţi grafic semnalul original (considerați A = 1 și T = 100). +  * Reprezentaţi grafic semnalul original (considerați A = 1 și T = 100). [<color red>​1p</​color>​] 
-  * Calculaţi câţiva coeficienţi Fourier $c_k$. Faceţi asta, similar cu ce am făcut în laboratoarele precedente, folosind $k\in\{-81,​\ldots,​81\}$. +  * Calculaţi câţiva coeficienţi Fourier $c_k$. Faceţi asta, similar cu ce am făcut în laboratoarele precedente, folosind $k\in\{-81,​\ldots,​81\}$. ​[<color red>​1p</​color>​] 
-  * Plotaţi modulul coeficienţilor (folosind //stem// și //abs//). +  * Plotaţi modulul coeficienţilor (folosind //plt.stem// și //np.abs//). 
-  * Modificaţi spectrul pentru a obţine un semnal în timp întârziat cu $\tau = \frac{T}{4}$,​ folosind formula: $c_{k}^{'​} = c_{k}\cdot e^{-j\frac{2\pi k \tau}{T}}$, unde $c_k$ sunt coeficienții Fourier aflați mai devreme. (vezi tabelul 4.2 din carte).+  * Modificaţi spectrul pentru a obţine un semnal în timp întârziat cu $\tau = \frac{T}{4}$,​ folosind formula: $c_{k}^{'​} = c_{k}\cdot e^{-j\frac{2\pi k \tau}{T}}$, unde $c_k$ sunt coeficienții Fourier aflați mai devreme. (vezi tabelul 4.2 din carte). ​[<color red>​1p</​color>​]
   * Plotaţi coeficienţii după modificare. Vedeţi vreo diferenţă?​ De ce?   * Plotaţi coeficienţii după modificare. Vedeţi vreo diferenţă?​ De ce?
-  * Ce se întâmplă cu faza? Verificați cu următorul cod:+  * Ce se întâmplă cu faza? Plotaţi coeficienții înainte șdupă modificare. Puteți afla faza coeficienților ​cu următorul cod: [<color red>​1p</​color>​]
 <code python> <code python>
 coefficients_phase = np.angle(ck,​ deg=True) coefficients_phase = np.angle(ck,​ deg=True)
 </​code>​ </​code>​
-  * Reconstruiți semnalul din spectrul modificat, folosind formula $s_{r}(t) = \sum_{k=-\infty}^{\infty}{c_{k}e^{j\frac{2 \pi kt}{T}}}$ (similar cu ce-am făcut în laboratorul 3). Ar trebui să vedeți semnalul shiftat cu $\tau$, față de cel original (dacă totul a mers cum trebuie).+  * Reconstruiți semnalul din spectrul modificat, folosind formula $s_{r}(t) = \sum_{k=-\infty}^{\infty}{c_{k}e^{j\frac{2 \pi kt}{T}}}$ (similar cu ce-am făcut în laboratorul 3). Ar trebui să vedeți semnalul shiftat cu $\tau$, față de cel original (dacă totul a mers cum trebuie). ​[<color red>​1p</​color>​]
  
  
 === Exercițiul 2 - filtrare === === Exercițiul 2 - filtrare ===
-[<color red>4p</​color>​]+[<color red>5p</​color>​]
  
-Vom vedea în continuare ce efect are un filtru trece-jos asupra ​unui semnal ​periodic. În special ne interesează care sunt termenii din seria Fourier ai semnalului rezultat în urma filtrării.  ​+Vom vedea în continuare ce efect are un filtru trece-jos asupra ​semnalului puls periodic. În special ne interesează care sunt termenii din seria Fourier ai semnalului rezultat în urma filtrării.  ​
  
-Dacă știm funcția de transfer a unui filtru trece-jos (sau alt tip de sistem liniar și invariant în timp), care primește la intrare un semnal (pentru care putem să aflăm coeficienții Fourier $c_k$), putem să găsim coeficienții Fourier ($c_k^y$) ai semnalului rezultat ca fiind:+Dacă știm funcția de transfer ​$H(f)$ ​a unui filtru trece-jos (sau alt tip de sistem liniar și invariant în timp), care primește la intrare un semnal (pentru care putem să aflăm coeficienții Fourier $c_k$), putem să găsim coeficienții Fourier ($c_k^y$) ai semnalului rezultat ca fiind:
  
 \begin{equation} \begin{equation}
Line 51: Line 51:
  
  
-Î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:+În acest exercițiu trebuie să calculăm coeficienții Fourier ai semnalului de ieșire al 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} \begin{equation}
Line 70: Line 70:
 unde //R// și //C// sunt rezistența și respectiv capacitatea. 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.+Task-ul vostru este să determinați coeficienții ​ieșirii ($c_k^y$) ​și să reconstruiți semnalul de ieșire pentru diferite frecvențe de tăiere.
  
 Pentru aceasta urmăriți următorii pași: 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=20$ nu sunt egale cu 0. [<color red>​1p</​color>​]   - Generați semnalul puls și plotați-l. Puteți folosi //T=100// de eșantioane (puncte), dintre care doar $\Delta=20$ nu sunt egale cu 0. [<color red>​1p</​color>​]
-  - Calculați primii //N=31// coeficienți Fourier pozitivi $c_k$ ai semnalului și plotați-i ($k\in\{0,​\ldots,​30\}$). 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//. [<color red>​1p</​color>​] +  - Calculați primii //N=31// coeficienți Fourier pozitivi $c_k$ ai semnalului și plotați-i ($k\in\{0,​\ldots,​30\}$). Pentru a îi reprezenta va trebui să folosiţi funcţia //plt.stem//. De asemenea, va trebui să reprezentaţi doar magnitudinea,​ folosind funcţia //np.abs//. [<color red>​1p</​color>​] 
-  - 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}$ ). [<color red>​1p</​color>​] +  - Calculați coeficienții Fourier asociați semnalului de ieșire, $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}$ ). [<color red>​1p</​color>​] 
-  - Reconstruiți semnalul de output ​cu ajutorul seriei Fourier (folosind formula de la exercițiul 1) [<color red>1p</​color>​]+  - Reconstruiți semnalul de ieșire ​cu ajutorul seriei Fourier (folosind formula de la exercițiul 1) [<color red>2p</​color>​]
   Puteți încerca următoarele valori pentru $f_c$:   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 = 0.1/T$ (frecvența de cut-off e mult mai mică decât frecvența fundamentală a semnalului => filtrare puternică)
Line 82: Line 82:
     - $f_c = 10/T$ (frecvența de cut-off mult mai mare decât frecvența fundamentală => filtrare slabă)     - $f_c = 10/T$ (frecvența de cut-off mult mai mare decât frecvența fundamentală => filtrare slabă)
  
-<​note> ​+<​note ​important
 Semnalele reale au următoarea proprietate:​ coeficienții Fourier negativi sunt conjugații complecși ai celor pozitivi $c_{-k} = c_{k}^*$. Pentru reconstrucția semnalului nostru puls, trebuie să folosiți și conjugații complecși ai coeficienților pozitivi. Semnalele reale au următoarea proprietate:​ coeficienții Fourier negativi sunt conjugații complecși ai celor pozitivi $c_{-k} = c_{k}^*$. Pentru reconstrucția semnalului nostru puls, trebuie să folosiți și conjugații complecși ai coeficienților pozitivi.
 </​note>​ </​note>​
  
-=== Exercițiul 3 – modularea în amplitudine === 
-[<color red>​2p</​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). 
- 
-Obiectivul vostru: 
- 
-Folosiți o frecvență purtătoare $f_c = \frac{20}{T}$,​ unde $T$ este numărul eșantioanelor (samples). 
- 
-/​*<​hidden>​*/ ​ 
-Vom considera că DFT are același număr de componente ca și semnalul de intrare ($K = N$). Formulele pentru DFT și pentru inversa ei (IDFT) sunt următoarele:​ 
-\begin{equation} 
-DFT: S(k) = \sum^{N-1}_{n = 0}{s(n)e^{\frac{-j 2 \pi n k}{K}}}, k \in \{0, ..., K-1\} \\ 
- 
-IDFT\ (inversa\ ​ DFT): s(n) = \frac{1}{K}\sum^{K-1}_{k = 0}{S(k)e^{\frac{j 2 \pi n k}{K}}}, n \in \{0, ..., N-1\} 
-\end{equation} 
-De asemenea, calculați cu ajutorul FFT (FFT este varianta rapidă a DFT) și plotați spectrul folosind acest cod:  
 /​*</​hidden>​*/​ /​*</​hidden>​*/​
- 
-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>​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>​0.5p</​color>​] 
-<code python> 
-import scipy as sp 
- 
-fx = np.zeros(T) 
-findex = T/2 * np.linspace(0,​ 1, T // 2) 
-fx[T // 2:] = findex 
-fx[1:​(T//​2)] = -findex[:​0:​-1] 
-fx[0] = -T // 2 
-fs = sp.fft.fft(s) 
-plt.figure() 
-plt.stem(fx,​ abs(sp.fft.fftshift(fs))) 
-plt.xlabel('​Frequency component (k)') 
-plt.ylabel('​Magnitude of component'​) 
-plt.title('​Fourier coefficients before amplitude modulation'​) 
-</​code>​ 
-  * Modulați semnalul în amplitudine folosind frecvența purtătoare $f_c = \frac{20}{T}$,​ i.e. face 20 de perioade complete în $T=128$ eșantioane ale semnalului $s(t)$. O variantă simplă de modulare este să calculați: $x(t) = (1+s(t)) \cdot \cos(2\pi f_c t)$. [<color red>​0.5p</​color>​] 
-  * Calculați și plotați (cum am făcut mai devreme, cu funcția //fft//) spectrul semnalului modulat în amplitudine. Comparați-l cu spectrul semnalului original. Este ceea ce v-ați așteptat? [<color red>​0.5p</​color>​] 
- 
-/​*<​hidden>​*/​ 
-=== Exercițiul 4 – modularea în amplitudine [<color red>​Bonus</​color>​] === 
- 
-În acest exercițiu veți încerca să refaceți un semnal modulat în amplitudine ({{ps:​labs:​lab05_modulated_sound.mat|click aici}}). 
-Urmați următorii pași: 
-  * Descărcați semnalul modulat și încărcați-l în MATLAB folosind funcția: <code matlab>​load('​lab05_modulated_sound.mat'​)</​code>​ Se va încărca semnalul, precum și Fs, frecvența de eșantionare. ​ 
-  * Semnalul modulat provine dintr-un semnal original $s(t)$ care a fost înmulțit cu un semnal cosinus de frecvență $fc$, cos($2 \pi \cdot fc \cdot t$), unde t=0:​1/​Fs:​timp_maxim. Precum ați observat și în exercițiul anterior spectrul semnalului modulat conține spectrul semnalului original shiftat la frecvența fc și -fc. Plotați spectrul pentru a vedea acest lucru. 
-  * Dacă înmulțim (din nou) semnalul primit cu același semnal cosinus ar trebui să putem recupera semnalul original după aplicarea unui filtru trece-jos. Folosiți fc = Fs / 8. 
-  * Pentru a realiza efectul unui filtru trece-jos vom egala cu zero coeficienții corespunzători frecvențelor peste un prag. 
-  * Având noii coeficienți putem reface semnalul în timp folosind inversa Fourier. Realizați acest lucru folosind funcția //ifft//. 
-  * Puteți asculta semnalul rezultat folosind funcția MATLAB //​sound(semnal)//​. Pentru a opri sunetul folosiți comanda <code matlab> clear sound </​code>​ 
- 
- 
-/​*</​hidden>​*/​ 
- 
-<​note>​ Atenție: Vom învăța la curs că spectrul obținut prin transformata Fourier Discretă este periodic. Funcțiile //fft// / //ifft// consideră primii jumătate plus unu coeficienți pentru frecvențele pozitive, apoi următoarea jumătate corespunzătoare coeficienților negativi. Pentru a obține un spectru centrat în zero (doar ca să îl vizualizăm precum ne-am obișnuit) vom folosi funcția fftshift. </​note>​ 
-</​hidden>​ 
ps/labs_python/04.1697909435.txt.gz · Last modified: 2023/10/21 20:30 by darius.necula
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