Laboratorul 05.

Shiftarea în fază/timp şi modularea în amplitudine

Î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ţă”.

Materiale ajutătoare:

    1. Secțiunea 4.8 (vezi tabelul 4.2 în particular)

Exercițiul 1 – shiftarea în frecvență [4p]

Î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:

\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}

Pentru acest task va trebui să urmaţi următorii paşi:

  • Reprezentaţi grafic semnalul original (considerați A = 1 și T = 100).
  • 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\}$.
  • Plotaţi modulul coeficienţilor (folosind stem).
  • Modificaţi spectrul pentru a obţine un semnal în timp întârziat cu $\tau = \frac{T}{4}$ (vezi tabelul 4.2 din carte).
  • Plotaţi coeficienţii după modificare. Vedeţi vreo diferenţă? De ce?
  • Ce se întâmplă cu faza? Verificați cu următorul cod:
rad2deg(angle(coeficienti))'
  • Reconstruiți semnalul din spectrul modificat, 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).

Exercițiul 2 – modularea în amplitudine [4p]

Î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).

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$.
  • Calculați și plotați (cu 'stem') spectrul folosind DFT (Transformata Fourier Discretă), pe care nu am făcut-o încă la curs, dar o vom face în următoarele cursuri. 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:
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
  • Comparați graficele obținute cu DFT și cele cu FFT.
  • 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)$.
  • 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?

Exercițiul 3 – modularea în amplitudine [2p]

În acest exercițiu veți încerca să refaceți un semnal modulat în amplitudine (click aici). Urmați următorii pași:

  • Descărcați semnalul modulat și încărcați-l în Octave folosind funcția:
    load('lab05_modulated_sound.mat')

    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 Octave sound(semnal). Pentru a opri sunetul folosiți comanda
     clear sound 

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.

ps/labs/05.txt · Last modified: 2020/11/04 08:17 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