Differences

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

Link to this comparison view

ps:laboratoare:06 [2016/11/14 16:07]
ionut.gorgos
ps:laboratoare:06 [2020/11/10 12:12] (current)
ionut.gorgos
Line 10: Line 10:
  
  
-=== Exerciuţiul 1 -- Procesarea simplă [5p] ===+=== Exerciuţiul 1 -- Procesarea simplă [4p] ===
  
 Vom încerca să implementăm un sistem de procesare digitală simplă, care funcţionează după cum urmează: Vom încerca să implementăm un sistem de procesare digitală simplă, care funcţionează după cum urmează:
Line 23: Line 23:
   - Plotaţi toate secvenţele de intrare/​ieşire   - Plotaţi toate secvenţele de intrare/​ieşire
   - Ce fel de sistem de procesare este acesta ?   - Ce fel de sistem de procesare este acesta ?
 +<​hidden>​ 
 +  - Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția '​filter'?​ [Bonus 1p] 
 +</​hidden>​
 <note tip> <note tip>
 Pentru fiecare eşantion de intrare ($x(n)$) trebuie să produceţi 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). Pentru fiecare eşantion de intrare ($x(n)$) trebuie să produceţi 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>​ </​note>​
-/​*<​hidden>​*/​ 
-<​note>​ 
-Sistemul este un simplu filtru trece-jos în domeniul digital. 
-O posibilă soluţie poate fi următoarea:​ 
-<code matlab> 
-close all; 
  
-f= [1, 2, 10, 20, 50, 100]; +<​note>​ Pentru crearea timpilor de eșantionare puteți folosi ​0:​periada_esantionare:​timp_maxim sau funcția linspace(0,timp_maxim,numar_esantioane)</​note>​
-wvec = [0.2, 0.20.20.2, 0.2]; +
-np = length(wvec);+
  
- +=== Exercițiul 2 -- Subeşantionare (Bandpass sampling) [3p] ===
-fm = 10; +
-tm = 1/fm; +
-t = linspace(0, 1, 128); +
-for i=1:​length(f) +
-    s=sin(2*pi*f(i)*t);​ +
-    s1 = zeros(1,​128);​ +
-    for j=np:128 +
-        idx1 = j-np+1; +
-        idx2 = j; +
-        s1(j) = s(idx1:​idx2) * wvec'; ​        +
-    end +
-    h = figure; +
-    plot(t,s, '​b-'​);​ +
-    hold on; +
-    plot(t, s1, '​r--'​);​ +
-    ylim([-1, 1]); +
-    legend('​Original signal',​ '​Signal after processing'​);​ +
-    title(['​Moving average for frequency ', num2str(f(i))]);​ +
-    print(h, '​-dpng',​ ['​mavg_freq_',​ num2str(f(i)),​ '​.png'​]);​ +
-end +
-</​code>​ +
-Cum ar trebui să arate: +
- +
-{{:​ps:​laboratoare:​mavg_freq_10.png?​300|}} +
-</​note>​ +
-/​*</​hidden>​*/​ +
- +
-=== Exercițiul 2 -- Subeşantionare (Bandpass sampling) [5p] ===+
  
 Î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. Î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.
Line 76: Line 42:
 Task-uri/​întrebări:​ Task-uri/​întrebări:​
   - De ce avem energie în ambele frecvenţe $f_c$ şi $-f_c$ ?   - De ce avem energie în ambele frecvenţe $f_c$ şi $-f_c$ ?
-  - Folosiţi ​MATLAB ​pentru a calcula transformata Fourier Discretă (folosiţi comanda "​fft",​ aşa cum aţi folosit în laboratorul precedent) a unei sinusoide de $3kHz$ eşantionată la $8kHz$. ​+  - Folosiţi ​Octave ​pentru a calcula transformata Fourier Discretă (folosiţi comanda "​fft",​ aşa cum aţi folosit în laboratorul precedent) a unei sinusoide de $3kHz$ eşantionată la $8kHz$. Folosiți $N=128$ pentru fft.
   - Plotaţi rezultatele şi observaţi frecvenţele. Acum folosiţi "​fftshift"​ pe rezultatul obţinut de la "​fft"​ şi plotaţi din nou rezultatele.   - Plotaţi rezultatele şi observaţi frecvenţele. Acum folosiţi "​fftshift"​ pe rezultatul obţinut de la "​fft"​ şi plotaţi din nou rezultatele.
   - De ce într-un caz avem semnal la $3 kHz$ şi $5 kHz$ în timp ce, în celălalt caz pare să avem la $-3 kHz$ şi $3 kHz$ ?    - De ce într-un caz avem semnal la $3 kHz$ şi $5 kHz$ în timp ce, în celălalt caz pare să avem la $-3 kHz$ şi $3 kHz$ ? 
Line 82: Line 48:
   - Putem să reducem frecvenţa de eşantionare în timp ce încă detectăm spectrul dorit de frecvenţe ? (vedeţi bandpass sampling). Cât de mult putem reduce frecvenţa de eşantionare?​ Ce se întâmplă dacă reducem frecvenţa de eşantionare sub 2B?   - Putem să reducem frecvenţa de eşantionare în timp ce încă detectăm spectrul dorit de frecvenţe ? (vedeţi bandpass sampling). Cât de mult putem reduce frecvenţa de eşantionare?​ Ce se întâmplă dacă reducem frecvenţa de eşantionare sub 2B?
  
-/​*<​hidden>​*/​ +=== Exercițiul 3 -- Reconstruire de semnal [3p] ===
-<​note>​ +
-a) pentru că este un semnal real (are ambele $e^{f_{c}}$ şi $e^{-f_{c}}$)+
  
-b) $f_c \pm f_s$+Pentru reconstruirea unui semnal ideea este: 
 +- dacă se face sampling pe un semnal cu $f_s > 2 \cdot W(unde $W$ este frecvenţa maximă a semnalului, i.e. respectiv Nyquist), atunci puteţi să reconstruiţi din semnalul digital semnalul analog (exceptând o eroare de cuantizare) pe baza unui low pass filter (cu un sinc).  ​
  
-c) putem să folosim $fs = 4KHz$ => replici la -1Khz şi 1Khz de exemplu+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
-Sub 2B obţinem superpoziţia spectrului => erori în recuperarea semnalului.+  * simulați un semnal sinus '​analog'​. Pentru aceasta generați un semnal sinus de frecventa 1Hz cu un număr mare de puncte (i.e. 5000 de puncte).  
 +  * construiți semnalul digital, adică varianta eșantionată a semnalului analog, folosind un număr mai mic de puncte (i.e. de 100 de ore mai puține) din semnalul analog.  
 +  * 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
 +  * faceţi convoluţie între un sinc (de frecvenţă fs, dar centrat pe zero, adică un semnal simetric) şi semnalul continuu creat anterior.
  
-d) +Pentru a face convolutie cu un semnal sinc, folositi codul urmator: 
-<​code ​matlab+<​note>​ 
-fs 8000+<​code>​ 
-f1 = 3000; +N_sinc ​N_analog
-ts = 1/fs; +t_sinc ​linspace(-0.2, 0.2N_sinc/10); 
-xi = 0:​ts:​100*ts;​ +sincvec ​sinc(samples_digital*t_sinc); 
-x1 = cos(2*pi*f1*xi);​ +s_cont_filtered ​conv(s_contsincvec);
- +
-% Plot x1 +
-figure +
-stem(xix1'​ro'​); +
- +
-% Show FFT of x1 +
-64; +
-k = fs/N; % Fundamental frequency +
-X1 = fft(x1, N); +
-xf 0:k:fs/2; +
-figure +
-stem(xfabs(X1(1:​N/​2+1)));​ +
-xlabel('​Frequency [Hz]'​);​ +
-ylabel('​Amplitude'​);​ +
-title('​Spectrum of x1');+
 </​code>​ </​code>​
 </​note>​ </​note>​
-/​*</​hidden>​*/​ 
  
-=== Exercițiul 3 (bonus) -- Reconstruire de semnal [3p] === 
- 
-Pentru reconstruirea unui semnal idee este: 
-- dacă se face sampling pe un semnal cu $f_s > 2 \cdot W$ (unde $W$ este frecvenţa maximă a semnalului, i.e. respectiv Nyquist), atunci puteţi să reconstruiţi din semnalul digital semnalul analog (exceptând o eroare de cuantizare) pe baza unui low pass filter (cu un sinc).  ​ 
- 
-Pentru asta ar trebui să faceţi următorii paşi: 
-  * să construiţi semnalul digital, adică varianta eşantionată a semnalului 
-  * să faceţi din semnalul digital un semnal continuu (analog), în care pentru eşantioanele din semnalul digital se pune valorile (analog) din semnal, iar între eşantioane se pune 0 la ieşire. 
-  * să faceţi convoluţie între un sinc (de frecvenţă fs, dar centrat pe zero, adică un semnal simetric) şi semnalul continuu. 
- 
-<​note>​ 
-Semnalul va avea un număr mare de eșantioane ($N_{analog} = 5000$) pentru a simula pe cel analog, și un număr de eșantioane (respectiv $f_s$) mic în comparație cu ($N_{analog} = 5000$), e.g. $f_s = 10$. 
-</​note>​ 
 <note warning> <note warning>
 Trebuie să folosiţi funcţia stem, nu plot pentru reprezentare ! Trebuie să folosiţi funcţia stem, nu plot pentru reprezentare !
 </​note>​ </​note>​
  
-/*<​hidden>​*/​ +  ​Responsabil: [[neculadarius23@gmail.com|Darius Necula]]
-<code matlab>​ +
-%% Demonstration of signal recovery after sampling +
-% Using very large Fs for simulation of analog signal +
- +
-%% Initialise things +
-close all; +
-clear; +
-fs_analog = 1000; +
-N_periods = 5; +
-N_analog = N_periods * fs_analog;​ +
-fs = 10; +
-N_digital = N_periods*fs;​ +
-f_sin = 1; +
-t = linspace(0, N_periods, N_analog); % N_periods periods +
- +
-%% Create original sinewave +
-s_analog = cos(2*pi*f_sin*t);​ +
-% s_analog = cos(2*pi*f_sin*t) + cos(4*pi*f_sin*t);​ +
-% s_analog = cos(2*pi*f_sin*t) + cos(4*pi*f_sin*t) + cos(6*pi*f_sin*t);​ +
-figure +
-stem(t, s_analog);​ +
-title('​Original sinewave (approximation of continuous signal)'​);​ +
- +
-%% Create '​sampled'​ version of sinewave +
-interval = N_analog / N_digital;​ +
-t_digital = t(1:interval:​end);​ +
-s_digital = s_analog(1:​interval:​end);​ +
-figure; +
-stem(t_digital,​ s_digital);​ +
-title('​Sampled sinewave'​);​ +
- +
-%% Create '​continuous'​ version of '​sampled'​ sinewave +
-s_cont = zeros(1, N_analog);​ +
-for i=1:​N_digital +
-    s_cont((i-1)*interval+1:​i*interval) = [s_digital(i),​ zeros(1,​interval-1)]+
-end +
-figure; +
-stem(t, s_cont); +
-title('​Continuous version of sampled sinewave'​);​ +
- +
-%% Low-pass filter the '​continuous'​ version of '​sampled'​ sinewave +
-% Use the moving average from previous exercise for low pass filtering +
-N_sinc = N_analog; +
-t_sinc = linspace(-0.2,​ 0.2, N_sinc/​10);​ +
-sincvec = sinc(fs*t_sinc);​ +
-s_cont_filtered = conv(s_cont,​ sincvec); +
-N_cont_filtered = length(s_cont_filtered);​ +
-t_cont_filtered = linspace(0, N_periods, N_cont_filtered);​ +
-figure; +
-stem(t_cont_filtered,​ s_cont_filtered);​ +
-title('​Low-pass filtered signal from continous sampled sinewave'​);​ +
-</​code>​+
  
-/*</​hidden>​*/​+  ​Data publicării:​ 03.11.2019
  
-  * Responsabil:​ [[ionutgorgos@gmail.com|Ionuţ Gorgos]] 
  
-  * Data publicării:​ 08.11.2016 
ps/laboratoare/06.1479132452.txt.gz · Last modified: 2016/11/14 16:07 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