Differences

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

Link to this comparison view

ps:labs_python_gpt:05 [2025/10/27 18:35]
darius.necula created
ps:labs_python_gpt:05 [2025/10/27 19:27] (current)
darius.necula
Line 1: Line 1:
 ===== Laboratorul 05. ===== ===== Laboratorul 05. =====
-/​*<​hidden>​*/​ + 
-==== Semnale digitale - procesarea simplă, eşantionarea și modularea în amplitudine ​====+==== Semnale digitale - procesarea simplă, eşantionarea și subeşantionarea ​====
  
 Î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.
Line 11: Line 11:
  
 === Exerciţiul 1 -- Procesarea simplă === === Exerciţiul 1 -- Procesarea simplă ===
-[<color red>5p</​color>​] ​+[<color red>2p</​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 19: Line 19:
  
 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) și amplitudine 1, la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane,​ e.g. $N=128$). ​[<color red>​1p</​color>​] +  - Creaţi câteva secvenţe digitale care reprezintă sinusoide de diferite frecvenţe (1, 2, 10, 20, 100 Hz) și amplitudine 1, la aceeaşi frecvenţă de eşantionare (folosiţi acelaşi număr de eşantioane,​ e.g. $N=128$). 
-  - Implementaţi sistemul de procesare menţionat mai sus. [<color red>​1p</​color>​] +  - Implementaţi sistemul de procesare menţionat mai sus.[<​color red>​1p</​color>​] 
-  - Creaţi secvenţele corespunzătoare de ieşire. ​[<color red>​1p</​color>​] +  - Creaţi secvenţele corespunzătoare de ieşire. 
-  - Plotaţi toate secvenţele de intrare/​ieşire. [<color red>1p</​color>​]+  - Plotaţi toate secvenţele de intrare/​ieşire. [<color red>0.5p</​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 [[https://​docs.scipy.org/​doc/​scipy/​reference/​generated/​scipy.signal.lfilter.html|lfilter]] din biblioteca //scipy//? (opțional)   - Cum ați putea implementa sistemul de procesare menționat mai sus, folosind funcția [[https://​docs.scipy.org/​doc/​scipy/​reference/​generated/​scipy.signal.lfilter.html|lfilter]] din biblioteca //scipy//? (opțional)
-  - Adăugați la sinusoidele generate mai sus, un zgomot alb de deviație standard 0.1 și medie 0, folosind următorul cod: +  - Adăugați la sinusoidele generate mai sus, un zgomot alb de deviație standard 0.1 și medie 0. Plotați din nou toate secvenţele de intrare/​ieşire.[<​color red>0.5p</​color>​]
-<code python>​ +
-import numpy as np +
-noise = np.random.normal(0,​ 0.1, x.shape) +
-x = x + noise +
-</​code>,​ unde x este semnalul sinusoidal. Plotați din nou toate secvenţele de intrare/​ieşire.[<​color red>1p</​color>​]+
 <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).
Line 39: Line 34:
  
 === Exercițiul 2 – modularea în amplitudine === === Exercițiul 2 – modularea în amplitudine ===
-[<color red>5p</​color>​] ​+[<color red>3p</​color>​] ​
  
 Î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). Î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).
Line 55: Line 50:
  
 Pentru asta va trebui să urmăriți acești pași: 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$. ​[<color red>​1p</​color>​] +  * 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 FFT (Transformata Fourier Rapidă), pe care nu am făcut-o încă la curs, dar o vom face în următoarele cursuri. Pentru moment, puteți folosi acest cod: [<color red>​1p</​color>​]+  * Calculați și plotați (cu //stem//) spectrul folosind FFT (Transformata Fourier Rapidă), pe care nu am făcut-o încă la curs, dar o vom face în următoarele cursuri. Pentru moment, puteți folosi acest cod: 
 <code python> <code python>
 import numpy as np import numpy as np
Line 77: Line 72:
 <​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șnuit) vom folosi funcția fftshift. </​note>​ <​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șnuit) vom folosi funcția fftshift. </​note>​
  
-<​hidden>​ +=== Exercițiul 3 -- Subeşantionare (Bandpass sampling) ===
-=== Exercițiul 3 – modularea în amplitudine [<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}}). +
-Urmați următorii pași: +
-  * Descărcați semnalul modulat și încărcați-l în MATLAB folosind funcția: <code matlab>​load('​lab05_modulated_sound.mat'​)</​code>​ 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 MATLAB //​sound(semnal)//​. Pentru a opri sunetul folosiți comanda <code matlab> clear sound </​code>​ +
- +
-<​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șnuit) vom folosi funcția fftshift. </​note>​ +
-</​hidden>​ +
- +
-<​hidden>​ +
-=== Exercițiul 2 -- Subeşantionare (Bandpass sampling) ===+
 [<color red>​3p</​color>​] [<color red>​3p</​color>​]
  
Line 105: Line 84:
   - 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}$ ​   - 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 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>+  - Generaţi cod Python ​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);
Line 126: Line 105:
   - 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? [<color red>​1p</​color>​]   - 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>​]
 +
 +<​hidden>​
 +=== Exercițiul 3 – modularea în amplitudine [<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}}).
 +Urmați următorii pași:
 +  * Descărcați semnalul modulat și încărcați-l în MATLAB folosind funcția: <code matlab>​load('​lab05_modulated_sound.mat'​)</​code>​ 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 MATLAB //​sound(semnal)//​. Pentru a opri sunetul folosiți comanda <code matlab> clear sound </​code>​
 +
 +<​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șnuit) vom folosi funcția fftshift. </​note>​
 +</​hidden>​
 +
 +<​hidden>​
  
 === Exercițiul 3 -- Reconstruire de semnal === === Exercițiul 3 -- Reconstruire de semnal ===
ps/labs_python_gpt/05.1761582955.txt.gz · Last modified: 2025/10/27 18:35 by darius.necula
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