This shows you the differences between two versions of the page.
ps:labs_python:04 [2023/10/21 18:41] 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ă/timp, filtrarea 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}A \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 și 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 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ă) | ||
- $f_c = 1/T$ (frecvența de cut-off = frecvența fundamentală => puterea este înjumătățită) | - $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ă) | - $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) [<color red>1p</color>] | ||
- | <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 matlab> | ||
- | h = figure; | ||
- | fx = zeros(1, T); | ||
- | findex = T/2*linspace(0,1,T/2); | ||
- | fx((T/2)+1:end) = findex; | ||
- | fx(1:T/2) = [-T/2, -findex(end:-1:2)]; | ||
- | fs = fft(s); | ||
- | stem(fx, abs(fftshift(fs))); | ||
- | xlabel('Frequency component (k)'); | ||
- | ylabel('Magnitude of component'); | ||
- | title('Fourier coefficients before amplitude modulation'); | ||
- | print(h, '-dpng', 'coefficients_before_amod.png'); % doar daca vreti sa salvati ca png graficull | ||
- | </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> |