This shows you the differences between two versions of the page.
ps:labs:06 [2021/11/08 10:11] ionut.gorgos |
ps:labs:06 [2022/11/08 14:58] (current) ionut.gorgos |
||
---|---|---|---|
Line 2: | Line 2: | ||
/*<hidden>*/ | /*<hidden>*/ | ||
==== SNR, decibeli și DFT ==== | ==== SNR, decibeli și DFT ==== | ||
+ | Prezentarea PowerPoint pentru acest laborator poate fi găsită aici: [[https://docs.google.com/presentation/d/1s85BCzqZ3ziRwyqL1ecqilqaMDBMRxq-/edit?usp=share_link&ouid=110538702824281541719&rtpof=true&sd=true|aici]] | ||
În acest laborator vom rezolva câteva exerciții legate de calcularea raportului semnal-zgomot(eng. signal-to-noise ratio - SNR), vom exprima acest raport în decibeli și vom căpăta experiență cu transformata Fourier discretă (DFT). Deși nu am discutat prea mult despre ea, în toate exercițiile care folosesc DFT vom utiliza funcția //fft// (Fast Fourier Transform) și inversa acesteia //ifft//. | În acest laborator vom rezolva câteva exerciții legate de calcularea raportului semnal-zgomot(eng. signal-to-noise ratio - SNR), vom exprima acest raport în decibeli și vom căpăta experiență cu transformata Fourier discretă (DFT). Deși nu am discutat prea mult despre ea, în toate exercițiile care folosesc DFT vom utiliza funcția //fft// (Fast Fourier Transform) și inversa acesteia //ifft//. | ||
Materiale utile: | Materiale utile: | ||
- | * [[http://www.ece.rice.edu/~dhj/courses/elec241/col10040.pdf|D. Johnson's book]], secțiunile 5.4‐5.7 | + | * {{:ps:labs:fundamentals-of-electrical-engineering-i-9.72.pdf|Cartea lui Don Johnson}}, secțiunile 5.4‐5.7 |
În exercițiile din acest laborator vom considera că DFT are același număr de componente ca și semnalul de intrare. Formulele pentru DFT și IDFT: | În exercițiile din acest laborator vom considera că DFT are același număr de componente ca și semnalul de intrare. Formulele pentru DFT și IDFT: | ||
Line 15: | Line 16: | ||
\end{equation} | \end{equation} | ||
- | === Exercițiul 1 ‐‐ unde cu zgomot [6p] === | + | === Exercițiul 1 ‐‐ unde cu zgomot === |
+ | [<color red>6p</color>] | ||
În acest exercițiu aveți dat un semnal cu zgomot, ({{:ps:labs:noisy_signal.mat|click aici}}), pentru care știți că informația de interes se află în primele 10 componente DFT, corespunzătoare, de fapt cu $k \in \{ -9, ..., 9\}$, adică componenta continuă / directă (DC: $k = 0$) și componentele frecvențelor pozitive $k = 1, ..., 9$ și negative $k = −1, ... , −9$. | În acest exercițiu aveți dat un semnal cu zgomot, ({{:ps:labs:noisy_signal.mat|click aici}}), pentru care știți că informația de interes se află în primele 10 componente DFT, corespunzătoare, de fapt cu $k \in \{ -9, ..., 9\}$, adică componenta continuă / directă (DC: $k = 0$) și componentele frecvențelor pozitive $k = 1, ..., 9$ și negative $k = −1, ... , −9$. | ||
Line 34: | Line 36: | ||
Acest semnal are $N = 128$ eșantioane și puteți considera că frecvența de eșantionare este $f_s = N = 128$ Hz. | Acest semnal are $N = 128$ eșantioane și puteți considera că frecvența de eșantionare este $f_s = N = 128$ Hz. | ||
- | 2. Calculați DFT pentru semnalul zgomotos folosind formula de mai sus, apoi comparați rezultatul cu cel al funcției fft din MATLAB. Plotați spectrul, atât în forma dată de //fft//, cât și în forma centrată în zero, formată aplicând funcția //fftshift// pe rezultatul de la //fft//. Ne amintim că funcția //fft// conține coeficienții pentru frecvențele pozitive între $0$ și $N/2 - 1$, iar următorii coeficienți aparțin de fapt spectrului negativ, de la $-N/2$ la $-1$. | + | 2. Calculați DFT pentru semnalul zgomotos folosind formula de mai sus, apoi comparați rezultatul cu cel al funcției fft din MATLAB. Plotați spectrul, atât în forma dată de //fft//, cât și în forma centrată în zero, formată aplicând funcția //fftshift// pe rezultatul de la //fft//. Ne amintim că funcția //fft// conține coeficienții pentru frecvențele pozitive între $0$ și $N/2 - 1$, iar următorii coeficienți aparțin de fapt spectrului negativ, de la $-N/2$ la $-1$. [<color red>1p</color>] |
- | 3. Calculați raportul semnal-zgomot în domeniul frecvență, ca raportul dintre puterea semnalului și puterea zgomotului. Pentru aceasta vom considera că semnalul util se află doar în componentele de frecvență $k \in \{-9, ..., 9\}$ pe când zgomotul se află în toate componentele de frecvență. Formula pentru calcularea puterii unui semnal este: $power = \frac{1}{N}\sum^{N-1}_{k = 0}{|S(k)|^2}$, unde N este numărul total de componente considerate în semnal. | + | 3. Calculați raportul semnal-zgomot în domeniul frecvență, ca raportul dintre puterea semnalului și puterea zgomotului. Pentru aceasta vom considera că semnalul util se află doar în componentele de frecvență $k \in \{-9, ..., 9\}$ pe când zgomotul se află în toate componentele de frecvență. Formula pentru calcularea puterii unui semnal este: $power = \frac{1}{N}\sum^{N-1}_{k = 0}{|S(k)|^2}$, unde N este numărul total de componente considerate în semnal. [<color red>1p</color>] |
- | 4. Care este echivalentul acestui //SNR// în decibeli(//dB//)? | + | 4. Care este echivalentul acestui //SNR// în decibeli(//dB//)? [<color red>1p</color>] |
- | 5. Din ieșirea funcției //fft// eliminați frecvențele din afara zonei de interes (faceți-le zero). Aveți grijă la indicii frecvențelor pozitive și negative și luați în considerare că primul element corespunde componentei directe, care nu are corespondent negativ. | + | 5. Din ieșirea funcției //fft// eliminați frecvențele din afara zonei de interes (faceți-le zero). Aveți grijă la indicii frecvențelor pozitive și negative și luați în considerare că primul element corespunde componentei directe, care nu are corespondent negativ. [<color red>1p</color>] |
- | 6. Pentru a reconstrui semnalul corespunzător acestui spectru, care are componente diferite de zero doar pentru frecvențele de interes, calculați transformata Fourier discretă inversă (//IDFT//) folosind formula de mai sus, iar apoi comparați rezultatul cu cel al funcției //ifft// din MATLAB/Octave. Plotați acest semnal și comparați-l cu semnalul original zgomotos. Astfel, practic ați implementat un tip foarte simplu de filtru trece-jos. | + | 6. Pentru a reconstrui semnalul corespunzător acestui spectru, care are componente diferite de zero doar pentru frecvențele de interes, calculați transformata Fourier discretă inversă (//IDFT//) folosind formula de mai sus, iar apoi comparați rezultatul cu cel al funcției //ifft// din MATLAB. Plotați acest semnal și comparați-l cu semnalul original zgomotos. Astfel, practic ați implementat un tip foarte simplu de filtru trece-jos. [<color red>2p</color>] |
Aici aveți o imagine cu semnalul fără zgomot. | Aici aveți o imagine cu semnalul fără zgomot. | ||
Line 52: | Line 54: | ||
<note> Pentru a putea reface perfect semnalul discret original avem nevoie să calculam un spectru de lungime egală cu semnalul, adică K trebuie să fie egal cu N. </note> | <note> Pentru a putea reface perfect semnalul discret original avem nevoie să calculam un spectru de lungime egală cu semnalul, adică K trebuie să fie egal cu N. </note> | ||
- | === Exercițiul 2 ‐‐ sunet cu zgomot [4p] === | + | === Exercițiul 2 ‐‐ sunet cu zgomot === |
+ | [<color red>4p</color>] | ||
Acest exercițiu este similar cu cel precedent. Acum aveți dat o înregistrare a unei secvențe vorbite ({{:ps:labs:noisy_sound.mat|click aici}}) care a fost amestecată cu zgomot de frecvență înaltă. Trebuie sa aplicați pașii precedenți pentru a elimina zgomotul și pentru a determina secvența vorbită. | Acest exercițiu este similar cu cel precedent. Acum aveți dat o înregistrare a unei secvențe vorbite ({{:ps:labs:noisy_sound.mat|click aici}}) care a fost amestecată cu zgomot de frecvență înaltă. Trebuie sa aplicați pașii precedenți pentru a elimina zgomotul și pentru a determina secvența vorbită. | ||
Line 84: | Line 87: | ||
<note important>În acest exercițiu folosiți pentru calculul spectrului funcția fft, respectiv ifft pentru reconstruirea semnalului.</note> | <note important>În acest exercițiu folosiți pentru calculul spectrului funcția fft, respectiv ifft pentru reconstruirea semnalului.</note> | ||
- | === Exercițiul 3 ‐‐ transformata fourier discretă pe imagini [Bonus 1p] === | + | === Exercițiul 3 ‐‐ transformata fourier discretă pe imagini === |
+ | [Bonus <color red>1p</color>] | ||
Până acum am descompus semnale 1D în serii de sinusoide cu transformata Fourier. Însă putem aplica același procedeu și pentru semnale 2D, descompunându-le în sinusoide 2D. Putem să ne gândim la o sinusoidă 2D ca la un val. Cel mai comun semnal 2D este o imagine cu nivele de gri. | Până acum am descompus semnale 1D în serii de sinusoide cu transformata Fourier. Însă putem aplica același procedeu și pentru semnale 2D, descompunându-le în sinusoide 2D. Putem să ne gândim la o sinusoidă 2D ca la un val. Cel mai comun semnal 2D este o imagine cu nivele de gri. | ||
Line 96: | Line 101: | ||
- obțineți din fiecare spectru o imagine: reconstructed_img = ifft2(S1) | - obțineți din fiecare spectru o imagine: reconstructed_img = ifft2(S1) | ||
- afișați cele 2 imagini cu funcția imshow() | - afișați cele 2 imagini cu funcția imshow() | ||
- | |||
- | <note> | ||
- | Pentru a utiliza funcția **rgb2gray** în Octave trebuie să instalați pachetul Octave **image** din Octave command prompt. | ||
- | <code> | ||
- | pkg install -forge image | ||
- | pkg load image | ||
- | </code> | ||
- | </note> | ||
Folosiți această imagine: | Folosiți această imagine: |