Differences

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

Link to this comparison view

ps:labs_python:09 [2023/12/12 14:25]
ionut.gorgos
ps:labs_python:09 [2023/12/13 09:00] (current)
ionut.gorgos
Line 1: Line 1:
 ===== Laboratorul 09. ===== ===== Laboratorul 09. =====
-<​hidden>​ 
 ==== Convoluția,​ filtre FIR și metoda de proiectare folosind ferestre ==== ==== Convoluția,​ filtre FIR și metoda de proiectare folosind ferestre ====
-Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://​docs.google.com/​presentation/​d/​16NWgSnRxFygNBcrHc7IvEfMR_MzZxyu7/​edit?​usp=sharing&​ouid=110538702824281541719&​rtpof=true&​sd=true|aici]] 
  
 În acest laborator vom face câteva exerciții pentru a ne familiariza cu operația de convoluție precum și cu filtre cu răspunsul finit la impuls (finite impulse response - FIR) și cu metode de proiectare a acestora prin metode folosind ferestre. În acest laborator vom face câteva exerciții pentru a ne familiariza cu operația de convoluție precum și cu filtre cu răspunsul finit la impuls (finite impulse response - FIR) și cu metode de proiectare a acestora prin metode folosind ferestre.
Line 20: Line 18:
  
 În general presupunem că secvența h(k) are un număr $M$ finit și, în general, mic de elemente. ​ În general presupunem că secvența h(k) are un număr $M$ finit și, în general, mic de elemente. ​
-/​*<​hidden>​*/​ In our context, these elements will usually be the //taps// of a filter, and the convolution operation will be used to filter an input sequence x(n), as we shall see in the following exercises. /​*</​hidden>​*/​ 
  
 Rezolvați următoarele exerciții: Rezolvați următoarele exerciții:
Line 28: Line 25:
   - Înlocuiți x(n) cu secvența de impuls cu 9 elemente [0, 0, 0, 0, 1, 0, 0, 0, 0] și efectuați convoluția cu aceeași secvență h(k) ca mai sus. Ce obțineți ca y(n)? Cum se numește aceasta?   - Înlocuiți x(n) cu secvența de impuls cu 9 elemente [0, 0, 0, 0, 1, 0, 0, 0, 0] și efectuați convoluția cu aceeași secvență h(k) ca mai sus. Ce obțineți ca y(n)? Cum se numește aceasta?
   - Încercați operațiile de mai sus folosind funcția //​np.convolve//​ din NumPy sau //​signal.convolve//​ din //​scipy.signal//​. Obțineți aceleași rezultate? Care sunt diferențele?​   - Încercați operațiile de mai sus folosind funcția //​np.convolve//​ din NumPy sau //​signal.convolve//​ din //​scipy.signal//​. Obțineți aceleași rezultate? Care sunt diferențele?​
-  - [<color red>​BONUS ​1p</​color>​] Teorema Convoluției. Convoluția în timp [ $h(k) \ast x(n)$ ] este echivalentă cu înmulțirea element cu element a spectrelor în frecvență [ $H(m) \cdot X(m)$ ] și invers. Pentru a testa asta faceți următorii pași:+  - [<color red>​BONUS</​color>​] Teorema Convoluției. Convoluția în timp [ $h(k) \ast x(n)$ ] este echivalentă cu înmulțirea element cu element a spectrelor în frecvență [ $H(m) \cdot X(m)$ ] și invers. Pentru a testa asta faceți următorii pași:
   * Folosiți secvența h(k) = [0.1, 0.2, 0.2, 0.2, 0.1], dar adăugați încă 59 de zerouri la finalul ei, precum am făcut în laboratoarele precedente.   * Folosiți secvența h(k) = [0.1, 0.2, 0.2, 0.2, 0.1], dar adăugați încă 59 de zerouri la finalul ei, precum am făcut în laboratoarele precedente.
   * Aplicați FFT peste această secvență și afișați spectrul ei (cu stem).   * Aplicați FFT peste această secvență și afișați spectrul ei (cu stem).
Line 53: Line 50:
   - Trunchiați secvența hk(n) prin selectarea a doar //L=65// de eșantioane din centru(32 din stânga maximului funcției sinc, maximul funcției, și 32 de eșantioane din dreapta). Aceasta corespunde multiplicării secvenței hk(n) cu o fereastră dreptunghiulară centrată în punctul maxim al funcției sinc. Plotați secvența.   - Trunchiați secvența hk(n) prin selectarea a doar //L=65// de eșantioane din centru(32 din stânga maximului funcției sinc, maximul funcției, și 32 de eșantioane din dreapta). Aceasta corespunde multiplicării secvenței hk(n) cu o fereastră dreptunghiulară centrată în punctul maxim al funcției sinc. Plotați secvența.
   - Aplicați DFT(//​fft//​) pe secvența trunchiată,​ adică cea înmulțită cu fereastra dreptunghiulară (care conține doar 1) și plotați spectrul (cu //plot//). Rețineți: este important aici, precum și la primul plot pentru filtru trece-jos ideal, să notăm axa frecvențelor (axa x) ca o funcție de $F_s$, adică de la //0// la //1//. Vedeți diferențe față de filtrul ideal trece-jos? Acestea sunt efectele ferestrei dreptunghiulare.   - Aplicați DFT(//​fft//​) pe secvența trunchiată,​ adică cea înmulțită cu fereastra dreptunghiulară (care conține doar 1) și plotați spectrul (cu //plot//). Rețineți: este important aici, precum și la primul plot pentru filtru trece-jos ideal, să notăm axa frecvențelor (axa x) ca o funcție de $F_s$, adică de la //0// la //1//. Vedeți diferențe față de filtrul ideal trece-jos? Acestea sunt efectele ferestrei dreptunghiulare.
-  - Folosiți aceeași secvență trunchiată (hk(n)), dar înmulțiți-o cu o fereastră precum //​Blackman//​ (//​blackman//​ în Python). Efectuați din nou DFT și plotați spectrul (cu //plot//). Arată mai bine?.+  - Folosiți aceeași secvență trunchiată (hk(n)), dar înmulțiți-o cu o fereastră precum //​Blackman//​ (//np.blackman// în Python). Efectuați din nou DFT și plotați spectrul (cu //plot//). Arată mai bine?.
   - În final, folosiți ca intrare sinusoida din Exercițiul 1 ca x(n) și filtrați-o printr-o convoluție cu secvența obținută mai sus după folosirea ferestrei Blackman(folosiți funcția //​np.convolve//​ din NumPy sau //​signal.convolve//​ din //​scipy.signal//​). Plotați intrarea și ieșirea în aceeași figură folosind //stem// pentru a observa efectele filtrului.   - În final, folosiți ca intrare sinusoida din Exercițiul 1 ca x(n) și filtrați-o printr-o convoluție cu secvența obținută mai sus după folosirea ferestrei Blackman(folosiți funcția //​np.convolve//​ din NumPy sau //​signal.convolve//​ din //​scipy.signal//​). Plotați intrarea și ieșirea în aceeași figură folosind //stem// pentru a observa efectele filtrului.
  
Line 84: Line 81:
 </​code>​ </​code>​
 , unde b_low sunt coeficienții $b_i$ ai unui filtru FIR trece-jos. , unde b_low sunt coeficienții $b_i$ ai unui filtru FIR trece-jos.
-</hidden>+ 
 +=== Exercițiul 4 -- Proiectarea rapidă de filtre FIR/IIR folosind MATLAB === 
 +[<color red>​BONUS</​color>​] 
 + 
 +În acest exercițiu, încercăm să urmăm pașii de la exercițiul 3, dar în **MATLAB**. Pentru a accesa MATLAB, puteți folosi MATLAB instalat pe PC-urile din laborator sau să folosiți **MATLAB Online**, din browser. Pentru MATLAB Online, trebuie să vă creați un cont cu adresa de e-mail de la facultate pe site-ul [[https://​www.mathworks.com/​mwaccount/​register|acesta]]. 
 + 
 +În MATLAB, puteți folosi funcția //fir1// pentru a obține rapid elementele $b_i$ ale unui filtru FIR trece-jos, trece-bandă sau trece-sus. Apoi puteți folosi funcția //filter// pentru a filtra orice secvență folosind coeficienții $b_i$ dați de //fir1//, iar $a_0 = 1$. 
 + 
 +Pentru acest exercițiu, folosiți funcția //fir1// pentru a proiecta filtre FIR trece-jos, trece-bandă și trece-sus. Apoi folosiți funcția //filter// pentru a testa filtrele cu aceleași secvențe ca în exercițiul precedent. Puteți verifica designul filtrelor folosind tool-ul //​fvtool//​. 
 + 
 +De asemenea puteți folosi tool-ul MATLAB //fdatool/pentru a proiecta și analiza rapid performanțele filtrelor FIR și IIR: 
 +  - Generați un filtru FIR trece-jos folosind o fereastră Kaiser, având Fs = 48000 Hz, Fc = 10000 Hz, cu N=10 coeficienți(ordin) 
 +  - Generați un filtru IIR trece-jos (Butterworth sau Chebyshev type I) cu aceiași parametri. 
 +  - Comparați amplitudinea răspunsului. 
 +  - Încercați să creați un filtru FIR cu un răspuns similar cu al unui filtru IIR, prin creșterea numărului de coeficienți. 
 +    
 +După proiectarea filtrelor precum ați dorit, le puteți salva (File->Generate MATLAB Code) și să le folosiți direct în alte scripturi MATLAB pentru a filtra diverse semnale.
  
ps/labs_python/09.1702383951.txt.gz · Last modified: 2023/12/12 14:25 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