Differences

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

Link to this comparison view

ps:labs:05 [2021/10/31 07:43]
ionut.gorgos
ps:labs:05 [2022/11/08 14:57] (current)
ionut.gorgos
Line 2: Line 2:
 /​*<​hidden>​*/​ /​*<​hidden>​*/​
 ==== Semnale digitale - procesarea simplă, eşantionarea și recuperarea semnalului ==== ==== 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]]
  
 În acest laborator vom începe să experimentăm efectele semnalelor eşantionate şi procesarea semnalelor digitale. În acest laborator vom începe să experimentăm efectele semnalelor eşantionate şi procesarea semnalelor digitale.
  
 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ţiunile 5.1-5.3     - Secţiunile 5.1-5.3
  
  
-=== Exerciţiul 1 -- Procesarea simplă ​[4p] ===+=== Exerciţiul 1 -- Procesarea simplă === 
 +[<color red>​4p</​color>​] ​
  
 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 18: Line 20:
  
 Urmăriţi aceşti paşi: Urmăriţi aceşti paşi:
-  - Creaţi câteva secvenţe digitale care reprezintă sinusoide de diferite frecvenţe (1, 2, 10, 20, 100 Hz), la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane,​ e.g. $N=128$). +  - Creaţi câteva secvenţe digitale care reprezintă sinusoide de diferite frecvenţe (1, 2, 10, 20, 100 Hz), la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane,​ e.g. $N=128$). ​[<color red>​1p</​color>​] 
-  - Implementaţi sistemul de procesare menţionat mai sus +  - Implementaţi sistemul de procesare menţionat mai sus. [<color red>​1p</​color>​] 
-  - Creaţi secvenţele corespunzătoare de ieşire. +  - Creaţi secvenţele corespunzătoare de ieşire. ​[<color red>​1p</​color>​] 
-  - Plotaţi toate secvenţele de intrare/​ieşire+  - Plotaţi toate secvenţele de intrare/​ieşire. [<color red>​1p</​color>​]
   - Ce fel de sistem de procesare este acesta ?   - Ce fel de sistem de procesare este acesta ?
   - Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția '​filter'?​ (opțional)   - Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția '​filter'?​ (opțional)
Line 30: Line 32:
 <​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>​ <​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>​
  
-=== Exercițiul 2 -- Subeşantionare (Bandpass sampling) ​[3p] ===+=== Exercițiul 2 -- Subeşantionare (Bandpass sampling) === 
 +[<color red>​3p</​color>​]
  
 Î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.
  
-Un semnal real cu o frecvență purtătoare (centrată) la 3kHz este eşantionată la 8 kHz. Lăţimea de bandă a semnalului este 1 kHz, cum puteţi vedea mai jos:+Un semnal real (un cosinus sau o sinusoidă) ​cu o frecvență purtătoare (centrată) la 3kHz este eşantionată la 8 kHz. Lăţimea de bandă a semnalului este 1 kHz, cum puteţi vedea mai jos:
  
 {{:​ps:​labs:​bandpass.png?​500|}} {{:​ps:​labs:​bandpass.png?​500|}}
  
 Task-uri/​întrebări:​ Task-uri/​întrebări:​
 +  - Generați semnalul $signal = cos(2 \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 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 ​Octave ​pentru a calcula transformata Fourier Discretă a unei sinusoide de $3kHz$ eşantionată la $8kHz$. Folosiți $N=64$ pentru fft. Folosiți acest cod pentru DFT: <code matlab>+  - Folosiţi ​Matlab ​pentru a calcula transformata Fourier Discretă a unei sinusoide de $3kHz$ eşantionată la $8kHz$. Folosiți $N=64$ pentru fft. Folosiți acest cod pentru DFT: [<color red>​1p</​color>​] ​<code matlab>
 figure; figure;
 fx = zeros(1, N); fx = zeros(1, N);
 fidx = (fs/N) * linspace(0,​N-1,​N);​ fidx = (fs/N) * linspace(0,​N-1,​N);​
-spectrum = fft(x1, N);+spectrum = fft(signal, N);
 stem(fidx, abs(spectrum));​ stem(fidx, abs(spectrum));​
 xlabel('​Frequency (Hz)'​);​ xlabel('​Frequency (Hz)'​);​
 ylabel('​Amplitude'​);​ ylabel('​Amplitude'​);​
-title('​Spectrum of x1');+title('​Spectrum of signal');
 </​code>​ </​code>​
-  - Plotaţi (cu '​stem'​) rezultatele şi observaţi frecvenţele. Acum folosiţi "​fftshift"​ pe rezultatul obţinut de la "​fft"​ şi plotaţi din nou rezultatele. Folosiți acest cod: <code matlab>+  - Plotaţi (cu '​stem'​) rezultatele şi observaţi frecvenţele. Acum folosiţi "​fftshift"​ pe rezultatul obţinut de la "​fft"​ şi plotaţi din nou rezultatele. Folosiți acest cod: [<color red>​1p</​color>​] ​<code matlab>
 figure; figure;
 fidx = (fs/​N)*linspace(-N/​2,​ N/2-1, N); fidx = (fs/​N)*linspace(-N/​2,​ N/2-1, N);
Line 56: Line 60:
 xlabel('​Frequency (Hz)'​);​ xlabel('​Frequency (Hz)'​);​
 ylabel('​Amplitude'​);​ ylabel('​Amplitude'​);​
-title('​Zero-centred frequency spectrum of x1');+title('​Zero-centred frequency spectrum of signal');
 </​code>​ </​code>​
   - 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 [[https://​www.informit.com/​articles/​article.aspx?​p=345472&​seqNum=3|Fig 2-7]]). 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 [[https://​www.informit.com/​articles/​article.aspx?​p=345472&​seqNum=3|Fig 2-7]]). Cât de mult putem reduce frecvenţa de eşantionare?​ Ce se întâmplă dacă reducem frecvenţa de eşantionare sub 2B? [<color red>​1p</​color>​]
  
-=== Exercițiul 3 -- Reconstruire de semnal ​[3p] ===+=== Exercițiul 3 -- Reconstruire de semnal === 
 +[<color red>​3p</​color>​]
  
 Pentru reconstruirea unui semnal ideea este: Pentru reconstruirea unui semnal ideea este:
Line 69: Line 74:
 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: 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).   * 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.  +  * 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. +  * 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ţă ​fs, dar centrat pe zero, adică un semnal simetric) şi semnalul continuu creat anterior.+  * 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: Pentru a face convoluție cu un semnal sinc, folosiți codul următor:
Line 78: Line 83:
 N_sinc = N_analog; N_sinc = N_analog;
 t_sinc = linspace(-0.2,​ 0.2, N_sinc/10); t_sinc = linspace(-0.2,​ 0.2, N_sinc/10);
-sincvec = sinc(samples_digital*t_sinc);+sincvec = sinc(f_s*t_sinc);
 s_cont_filtered = conv(s_cont,​ sincvec); s_cont_filtered = conv(s_cont,​ sincvec);
 </​code>​ </​code>​
 </​note>​ </​note>​
-, unde samples_digital reprezintă numărul de eșantioane pentru semnalul digital.+,unde $f_s = 10$.
 <​note>​ <​note>​
 Pentru semnalele continue (analogice),​ puteți folosi pentru afișare //plot//, iar pentru cele digitale (eșantionate),​ //stem//. Pentru semnalele continue (analogice),​ puteți folosi pentru afișare //plot//, iar pentru cele digitale (eșantionate),​ //stem//.
ps/labs/05.1635659002.txt.gz · Last modified: 2021/10/31 07:43 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