Differences

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

Link to this comparison view

ps:laboratoare:06 [2019/11/04 07:12]
andrei.nicolicioiu
ps:laboratoare:06 [2020/11/10 12:12] (current)
ionut.gorgos
Line 31: Line 31:
  
 <​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>​ <​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>​
- 
- 
-<​hidden>​ 
-<​note>​ 
-Sistemul este un simplu filtru trece-jos în domeniul digital. 
-O posibilă soluţie poate fi următoarea:​ 
-<code matlab lab06_ex1.m>​ 
-close all; 
- 
-f= [1, 2, 10, 20, 50, 100]; 
-wvec = [0.2, 0.2, 0.2, 0.2, 0.2]; 
-np = length(wvec);​ 
- 
- 
-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) [3p] === === Exercițiul 2 -- Subeşantionare (Bandpass sampling) [3p] ===
Line 82: 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$ ? 
   - Care este semnificaţia semnalului de $5 kHz$ ? Când plotaţi 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). ​   ​   - Care este semnificaţia semnalului de $5 kHz$ ? Când plotaţi 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). 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>​ 
-<​note>​ 
-a) pentru că este un semnal real (are ambele $e^{f_{c}}$ şi $e^{-f_{c}}$) 
- 
-b) $f_c \pm f_s$ 
- 
-c) putem să folosim $fs = 4KHz$ => replici la -1Khz şi 1Khz de exemplu. 
-Sub 2B obţinem superpoziţia spectrului => erori în recuperarea semnalului. 
- 
-d) 
-<code matlab> 
-fs = 8000; 
-f1 = 3000; 
-ts = 1/fs; 
-xi = 0:​ts:​100*ts;​ 
-x1 = cos(2*pi*f1*xi);​ 
- 
-% Plot x1 
-figure 
-stem(xi, x1, '​ro'​);​ 
- 
-% Show FFT of x1 
-N = 64; 
-k = fs/N; % Fundamental frequency 
-X1 = fft(x1, N); 
-xf = 0:k:fs/2; 
-figure 
-stem(xf, abs(X1(1:​N/​2+1)));​ 
-xlabel('​Frequency [Hz]'​);​ 
-ylabel('​Amplitude'​);​ 
-title('​Spectrum of x1'); 
-</​code>​ 
-</​note>​ 
-</​hidden>​ 
  
 === Exercițiul 3 -- Reconstruire de semnal [3p] === === Exercițiul 3 -- Reconstruire de semnal [3p] ===
Line 143: Line 68:
 </​code>​ </​code>​
 </​note>​ </​note>​
- 
-<​hidden>​ 
-<​note>​ 
-Semnalul va avea un număr mare de eșantioane ($N_{analog} = 5000$) pentru a-l simula pe cel analog, și un număr de eșantioane mai mic pentru semnalul digital (ex. de 100 de ori mai puține). 
-</​note>​ 
- 
- 
- 
- 
-</​hidden>​ 
  
 <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>​ 
-<code matlab> 
-%% Demonstration of signal recovery after sampling 
-% Using very large Fs for simulation of analog signal 
- 
-%% Initialise things 
-close all; 
-clear; 
-samples_analog = 1000; 
-N_periods = 5; 
-N_analog = N_periods * samples_analog;​ 
-samples_digital = 10; 
-N_digital = N_periods*samples_digital;​ 
-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(samples_digital*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>​ 
  
   * Responsabil:​ [[neculadarius23@gmail.com|Darius Necula]]   * Responsabil:​ [[neculadarius23@gmail.com|Darius Necula]]
ps/laboratoare/06.1572844352.txt.gz · Last modified: 2019/11/04 07:12 by andrei.nicolicioiu
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