Differences

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

Link to this comparison view

ps:labs:05 [2020/10/28 18:51]
ionut.gorgos
ps:labs:05 [2022/11/08 14:57] (current)
ionut.gorgos
Line 1: Line 1:
 ===== Laboratorul 05. ===== ===== Laboratorul 05. =====
 +/​*<​hidden>​*/​
 +==== Semnale digitale - procesarea simplă, eşantionarea și recuperarea semnalului ====
 +Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://​docs.google.com/​presentation/​d/​1BtLZa_4XCMcErExG5YSXHoNtr3Wtg8qy/​edit?​usp=share_link&​ouid=110538702824281541719&​rtpof=true&​sd=true|aici]]
  
-/​*<​hidden>​*/ ​  +În acest laborator vom începe ​să experimentăm ​efectele semnalelor eşantionate ​şi procesarea semnalelor digitale.
-==== 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:​ 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țiunea 4.8 (vezi tabelul 4.2 în particular)+    - Secţiunile 5.1-5.3
  
-=== 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:+=== Exerciţiul 1 -- Procesarea simplă === 
 +[<color red>​4p</​color>​
  
-\begin{equation} +Vom încerca să implementăm un sistem de procesare digitală simplă, care funcţionează după cum urmează: 
- c_{k} = \left\lbrace +  * luaţi 5 eşantioane (samples) din semnalul de intrare, $d_1, d_2, \ldots, d_5$. 
-  ​\begin{array}{} +  ​* faceţi o medie a celor 5 eşantioane (samples), $a = 0.2 \cdot (d_1 + d_2 + d_3 + d_4 + d_5)$ 
-    \frac{2}{j \pi k}A \qquad k \quad impar \\0 \qquad \quad k \quad par +  ​* puneţi la ieşire valoarea curentă $y(n) = a$
-  ​\end{array} +
-  \right. +
-\end{equation}+
  
-Pentru acest task va trebui să urmaţi următorii ​paşi: +Urmăriţi aceşti ​paşi: 
-  ​* Reprezentaţi grafic semnalul original ​(considerați A = și T = 100)+  ​- Creaţi câteva secvenţe digitale care reprezintă sinusoide de diferite frecvenţe ​(1, 2, 10, 20, 100 Hz), la aceeaşfrecvenţă de eşantionare (folosiţi acelaşnumăr de eşantioanee.g. $N=128$)[<color red>​1p</​color>​] 
-  * Calculaţţiva coeficienţi Fourier $c_k$. Faceţasta, similar cu ce am făcut în laboratoarele precedentefolosind ​$k\in\{-81,​\ldots,​81\}$. +  ​- Implementaţi sistemul de procesare menţionat mai sus[<color red>​1p</​color>​] 
-  ​* Plotaţi modulul coeficienţilor (folosind stem)+  ​- Creaţi secvenţele corespunzătoare de ieşire[<color red>​1p</​color>​] 
-  ​* 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 ​toate secvenţele de intrare/​ieşire[<color red>​1p</​color>​] 
-  ​Plotaţi ​coeficienţii după modificareVedeţi vreo diferenţă?​ De ce+  - Ce fel de sistem de procesare este acesta ​
-  ​* Reconstruiți semnalul din spectrul modificatsimilar cu ce-am făcut în laboratorul 3. Ar trebui ​să vedețsemnalul shiftat cu $\tau$, față de cel original (dacă totul a mers cum trebuie).+  ​- Cum ați putea implementa sistemul de procesare menționat mai susfolosind funcția '​filter'?​ (opțional) 
 +<note tip> 
 +Pentru fiecare eşantion de intrare ($x(n)$) trebuie ​să produceţo valoare de ieşire ($y(n)$). Pentru primele patru eşantioane nu aveţi suficiente valori de intrare diferite de zeroşi pentru simplitate ori setaţi ieşirea pe zero, ori faceţi media dintre 1, 2, 3, 4 eşantioane,​ în timp ce consideraţi ca celelalte să fie zero. Dar de la al 5-lea eşantion veţi avea câte 5 eşantioane la îndemână (actualul $x(n)$ şi anterioarele patru eşantioane). 
 +</​note>​
  
-=== Exercițiul 2 – modularea în amplitudine [4p] ===+<​note>​ Pentru crearea timpilor de eșantionare puteți folosi 0:​perioada_esantionare:​timp_maxim sau funcția linspace(0,​timp_maxim,​numar_esantioane)</​note>​
  
-Î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).+=== Exercițiul 2 -- Subeşantionare ​(Bandpass sampling) === 
 +[<color red>3p</​color>​]
  
-Obiectivul vostru+În acest exercițiu vom experimenta subeșantionarea,​ metodă care reduce frecvența de eșantionare necesară pentru a obține întreg spectru al semnalului.
  
-Folosiți ​o frecvență purtătoare ​$f_c = \frac{20}{T}$,​ unde $T$ este numărul eșantioanelor ​(samples).+Un semnal real (un cosinus sau o sinusoidă) cu o frecvență purtătoare (centratăla 3kHz este eşantionată la 8 kHzLăţimea de bandă a semnalului este 1 kHz, cum puteţi vedea mai jos:
  
-Pentru asta va trebui să urmăriți acești pași: +{{:ps:​labs:​bandpass.png?​500|}}
-  * 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. Formulele pentru DFT și pentru inversa ei (IDFT) sunt următoarele:​ +
-\begin{equation} +
-DFTS(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\} +Task-uri/​întrebări:​ 
-\end{equation+  - Generați semnalul $signal = cos(\cdot \pi \cdot f_c \cdot t)$, unde $f_c = 3000$ Hz, $t=0:T_s:100 \cdot T_s$ și $T_s = \frac{1}{f_s} = \frac{1}{8000} 
-  ​De asemenea, ​calculați cu ajutorul FFT (FFT este varianta rapidă a DFT) șplotați spectrul folosind ​acest cod:  +  ​De ce avem energie în ambele frecvenţe $f_c$ şi $-f_c$ ? 
-<code matlab>​ +  - Folosiţi Matlab pentru a calcula ​transformata Fourier Discretă a unei sinusoide de $3kHz$ eşantionată la $8kHz$. Folosiț$N=64$ pentru fft. Folosiți acest cod pentru DFT[<color red>​1p</​color>​] ​<code matlab>​ 
-h = figure; +figure; 
-fx = zeros(1, ​T); +fx = zeros(1, ​N); 
-findex ​T/2*linspace(0,​1,​T/2); +fidx (fs/N) * linspace(0,N-1,N); 
-fx((T/​2)+1:​end) ​findex; +spectrum ​fft(signalN); 
-fx(1:T/2) = [-T/2-findex(end:​-1:​2)];​ +stem(fidx, abs(spectrum)); 
-fs = fft(s); +xlabel('​Frequency (Hz)'); 
-stem(fx, abs(fftshift(fs))); +ylabel('​Amplitude'); 
-xlabel('​Frequency ​component ​(k)'); +title('​Spectrum of signal');
-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>​ </​code>​
-  ​* Comparațgraficele obținute ​cu DFT șcele cu FFT. +  ​- Plotaţ(cu '​stem'​) rezultatele şobservaţi frecvenţeleAcum folosiţi "​fftshift"​ pe rezultatul obţinut ​de la "​fft"​ şi plotaţi din nou rezultateleFolosiți acest cod[<color red>​1p</​color>​] <code matlab>​ 
-  * Modulaț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)$. +figure; 
-  ​* Calculațși plotaț(cum am făcut mai devremecu funcția ​fft) spectrul semnalului modulat în amplitudineComparați-l cu spectrul ​semnalului originalEste ceea ce v-ați așteptat?+fidx = (fs/N)*linspace(-N/2, N/2-1, N); 
 +stem(fidx, abs(fftshift(spectrum))); 
 +xlabel('​Frequency (Hz)'); 
 +ylabel('​Amplitude'​);​ 
 +title('​Zero-centred frequency spectrum of signal'​);​ 
 +</​code>​ 
 +  ​- De ce într-un caz avem semnal la $3 kHz$ ş$5 kHz$ în timp ce, în celălalt caz pare să avem la $-3 kHz$ ş$3 kHz$ ?  
 +  - Care este semnificaţia semnalului de $5 kHz$ ? Când plotaţrezultatele de la "​fft"​ luaţi în considerare că, în mod implicit output-ul transformatei Discrete Fourier, deci şi "fft", arată frecvenţele de la $0$ la $f_s$ (frecvenţa de eşantionare).     
 +  ​Putem să reducem frecvenţa de eşantionare în timp ce încă detectăm ​spectrul ​dorit de frecvenţe ? (vedeţi bandpass sampling [[https://​www.informit.com/​articles/​article.aspx?​p=345472&​seqNum=3|Fig 2-7]]). Cât de mult putem reduce frecvenţde eşantionare?​ Ce se întâmplă dacă reducem frecvenţde eşantionare sub 2B[<color red>​1p</​color>​]
  
-=== Exercițiul 3 – modularea în amplitudine [2p] ===+=== Exercițiul 3 -- Reconstruire de semnal ​=== 
 +[<color red>​3p</​color>​]
  
-În acest exercițiu veți încerca să refaceți un semnal ​modulat în amplitudine ({{ps:labs:​lab05_modulated_sound.mat|click aici}}). +Pentru reconstruirea unui semnal ​ideea este
-Urmați următorii pași: +dacă se face sampling pe un semnal cu $f_s > 2 \cdot W(unde $W$ este frecvenţa maximă ​a semnaluluii.erespectiv Nyquist), atunci puteţi să reconstruiţdin semnalul ​digital ​semnalul ​analog ​(exceptând o eroare de cuantizarepe baza unui low pass filter (cu un sinc).  
-  * Descărcați semnalul modulat și încărcați-l în Matlab 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 ș-fcPlotați spectrul pentru a vedea acest lucru. +
-  * Dacă înmulțim (din nousemnalul primit cu acelașsemnal cosinus ar trebui ​să putem recupera semnalul original după aplicarea unui filtru lowpass. Folosițfc = Fs / 8. +
-  * Pentru a realiza efectul unui filtru lowpass 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)+
-  +
-<​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șnuitvom folosi funcția fftshift</​note>​+
  
 +Vom simula un semnal sinus analog, pe care îl vom eșantiona, apoi îl vom reconstrui. Pentru asta ar trebui să faceţi următorii paşi:
 +  * simulați un semnal sinus '​analog'​. Pentru aceasta generați un semnal sinus de frecvență 1Hz cu un număr mare de puncte (i.e. 5000 de puncte pe 5 perioade). Pentru timp folosiți: <code matlab> t = linspace(0, 5, N_analog); </​code>​ (i.e. sinusoida face 5 perioade).
 +  * construiți semnalul digital, adică varianta eșantionată a semnalului analog, folosind un număr mai mic de puncte (i.e. de 100 de ori mai puține) din semnalul analog. [<color red>​1p</​color>​]
 +  * faceți din semnalul digital un semnal continuu (analog), prin crearea unui semnal de aceeași lungime ca cel analog inițial, folosind valorile din semnalul digital pentru valorile de la momentele eșantionate și zero în rest. [<color red>​1p</​color>​]
 +  * faceţi convoluţie între un sinc (de frecvenţă $f_s$, dar centrat pe zero, adică un semnal simetric) şi semnalul continuu creat anterior. [<color red>​1p</​color>​]
 +
 +Pentru a face convoluție cu un semnal sinc, folosiți codul următor:
 +<​note>​
 +<​code>​
 +N_sinc = N_analog;
 +t_sinc = linspace(-0.2,​ 0.2, N_sinc/10);
 +sincvec = sinc(f_s*t_sinc);​
 +s_cont_filtered = conv(s_cont,​ sincvec);
 +</​code>​
 +</​note>​
 +,unde $f_s = 10$.
 +<​note>​
 +Pentru semnalele continue (analogice),​ puteți folosi pentru afișare //plot//, iar pentru cele digitale (eșantionate),​ //stem//.
 +</​note>​
 /​*</​hidden>​*/​ /​*</​hidden>​*/​
 +
  
ps/labs/05.1603903860.txt.gz · Last modified: 2020/10/28 18:51 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