This is an old revision of the document!
Laboratorul 04.
Semnale în domeniul frecvență
Materiale ajutătoare:
-
Secțiunile 4.5 (Exercițiul 1), 4.7 (Exercițiul 2), 4.6 (Exercițiul 3)
Exercițiul 1 - aproximare de semnale [4p]
O să folosim din nou semnalul dreptunghiular, de amplitudine 'A' în intervalul [0, T/2] și '-A' în intervalul [T/2, T] care are coeficienții Fourier dați de formula:
\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 vom încerca să calculăm rădăcina pătratică medie (eng. root mean square) a semnalului de eroare $\epsilon_{K}$ dat de:
\begin{equation}
\epsilon_{K}(t) = s(t) - s_{K}(t),
\end{equation}
unde $s_{K}(t)$ este semnalul aproximat cu K termeni.
Folosind transformata Fourier avem:
\begin{equation}
s_K(t) = \sum_{k=-K}^K c_k e^\frac{j 2 \pi k t}{T}
\end{equation}
iar RMS-ul lui $\epsilon_K$ este dat de:
\begin{equation}
\text{rms}(\epsilon_K) = \sqrt{2\cdot \sum_{k=K+1}^\infty |c_k|^2}
\end{equation}
Task-ul vostru este să determinați valoarea lui K astfel încât $\text{rms}(\epsilon_K)$ este aproape 0 și după aceea să vedeți că într-adevăr semnalul reconstruit aproximează bine semnalul original.
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:
A = 1;
T = 100;
x = 1:T;
s = -A*ones(1, T);
s(1:(T/2)) = A;
Calculați coeficienții Fourier $c_{k}$ pentru $k=[-10:10]$. Plotați amplitudinile $|c_k|^2$ ca funcție de $k$. [1p]
Calculați coeficienții Fourier $c_{k}$ pentru $k=[0:1500]$. Calculați $\text{rms}(\epsilon_{K})$ ca funcție de $K$ pentru $K \in \{1, \ldots, 500\}$. Plotați valoarea rms pentru $K \in \{1, \ldots, 500\}$.[1p]
Determinați cel mai mic $K$ astfel încât $\text{rms}(\epsilon_{K}) < 0.025$ ș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 -K la K) pentru a reconstrui semnalul. Reprezentați grafic semnalul reconstruit și comparați-l cu semnalul inițial. [1p]
Semnalele reale au următoarea proprietate: coeficienții Fourier negativi sunt conjugații complexi ai celor pozitivi $c_{-k} = c_{k}^*$. De asemenea, semnalele impare s(-t) = -s(t), au coeficienți complet imaginari, obținând $c_{-k} = -c_{k}$
Pentru a calcula rms al erorii trebuie sa calculam suma pentru toti coeficienții $c_k$ cu $|k|> k_0 $, adica o infinitate de termeni. Putem încerca doar să aproximăm această sumă, sau ne putem folosi de unele proprietăți ale serier Fourier pentru a o calcula exact. Mai precis, vom folosi Teorema lui Parseval prin care putem calcula puterea unui semnal in doua feluri, in domeniul timp, integrand semnalul la pătrat peste o perioadă sau în frecvență calculand suma pătratelor modulului ale fiecărui coeficient
\begin{equation}
\frac{1}{T}\int_0^T{s^2(t)dt} = \sum_{-\infty}^{\infty}{|c_k|^2}
\end{equation}
Folosind cele descrise mai sus puteți calcula exact rms-ul erorii:
calculați puterea totala 'de mână' pentru semnalul dreptunghiular.
prin scaderea pătratelor termenilor de la $c_k, k \in \{-k...k\}$
Exercițiul 2 - filtrare [4p]
Î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.
Pentru un semnal dat putem găsi coeficienții Fourier ($c_k$). Atunci, dacă știm funcția de transfer a filtrului trece-jos (sau alt tip de sistem liniar), am arătat la curs 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$.
Ni se dă ca input un semnal 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}
Atenție: Matlab folosește funcția sinc normalizată sinc(x) = $ \frac{\text{sin}(\pi x)}{\pi x}$
Puteți vedea circuitul filtrului trece-jos în următoarea imagine:
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, 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. [1p]
Calculați coeficienții Fourier asociați semnalului de output, $c_k^y$, folosind formula de mai sus și plotați-i. 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ă [2p]
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ță)
'01': folosim o sinusoidă ce conține doar prima frecvență ($\sin(2\pi f_1 t)$)
'10': folosim o sinusoidă ce conține doar a doua frecvență ($\sin(2\pi f_2 t)$)
'11': folosim ambele frecvențe $f_1$ și $f_2$
Task-ul vostru e să creați o secvență random de 10 valori între 0 și 3 (pentru a folosi toate valorile de mai sus) și apoi să o codificați folosind 2 sinusoide așa cum este descris mai sus. Pentru asta ar trebui să:
selectați frecvențele $f_1$ și $f_2$ astfel încât ele folosesc aceeași frecvență fundamentală (de ex.: $f_1 = 1 \cdot f_t$, $f_2 = 2 \cdot f_t$);
plotați semnalul rezultat folosind perioada ($1/f_t$) pentru fiecare valoare transmisă;
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.