Laboratorul 01.

În acest laborator ne vom obișnui cu OCTAVE și vom face câteva procesări de semnal simple. Majoritatea tehnicilor de procesare de semnal pot fi executate ca operații pe vectori și matrici, deci OCTAVE este o unealtă foarte folositoare pentru a face aceste operații.

Pentru acest laborator s-a avut ca referință tutorialul (acum am trecut la Octave) de aici

Octave poate fi downloadat de aici: Octave

Urmărind capitolul 1 (Quick Start), haideți să facem următoarele exerciții.

1. Obișnuiți-vă cu mediul de lucru: calea folder-ului (folder path), spațiul de lucru (workspace), istoria, editarea script-ului, consola.

2. Vectori

Semnalele pot fi reprezentate ca secvențe de valori, unde în OCTAVE se face, de obicei, prin vectori sau matrici. Să începem cu vectorii.

Pentru a genera un vector de valori date, putem scrie pur și simplu ceva de genul:

3. Matrici

4. Transpusa

Transpusa unei matrici poate fi obținută prin folosirea operatorului `'`.

Când folosiți vectori (adunare, înmulțire, etc.) trebuie să aveți grijă să folosiți forma potrivită (fie coloană, fie linie).

5. Alte modalități pentru a crea vectori și matrici

Creați o secvență de 10 elemente, pornind de la 5.

6. Salvarea și încărcarea variabilelor

Verificați funcționalitatea funcțillor 'save' și 'load' (folosind 'help load', 'help save').

7. Șiruri de caractere și afișaj

Putem crea într-un mod ușor șiruri de caractere folosind ceva de genul s = 'Hello'.

8. Operații matematice

Operațiile matematice simple pot fi făcute foarte rapid. Puteți să adunați, înmulțiți, ridica la putere sau să inversați matrici: A+B, A*B, A^2, A^-1 sau inv(A). Dacă vreți o operație matematică pentru a fi aplicată element cu element, puteți folosi punctul '.', înainte de operație, de exemplu: A .* B pentru înmulțirea element cu element a fiecărui element din A cu elementul corespunzător din B. Alte funcții, cum ar fi 'sin' pot fi aplicate element cu element pe o matrice: sin(A) este o matrice cu elementele sin($a_{ij}$), unde $a_{ij}$ sunt elementele din A.

9. Funcții

La fel ca în majoritatea limbajelor de programare, o proprietată interesantă este abilitatea de a apela alte funcții.

x = [1; 2; 3; 4; 5]
s = 0;
for i = 1 : length(x)
 s = s + x(i) * x(i);
end
 s = sum(x .^ 2) 
 s = x' * x 

x' * x calculează ceea ce se numește produs scalar dintre doi vectori (înmulțirea dintre un vector linie și un vector coloană). Aveți grijă la ordinea operației, pentru că x * x' (vector coloană înmulțit cu vector linie) ne dă o matrice.

10. Grafice

Graficele sunt unele dintre cele mai tari lucruri în OCTAVE, deoarece acestea ne permit să vizualizăm datele noastre.

Aici este un exemplu cum ar trebui să arate: Figura 1

11. Câteva exerciții simple de procesare de semnal

Cel mai bine este să vă faceți programele OCTAVE în script-uri, astfel încât să le puteți reutiliza mai târziu. În acest fel puteți, de asemenea, să vă creați funcții proprii. Pentru acum, haideți să creăm doar niște script-uri.

După ce aveți câteva comenzi în script îl puteți executa pentru a vedea ce obțineți sau puteți executa doar o parte din el (fie prin selectarea liniilor de interes, comentarea altora, folosind '%', sau folosind secțiuni, via '%%'). Toate lucrurile de mai jos ar trebui să se găsească în script-ul vostru.

Ar trebui să onțineți ceva de genul: Figura 2

12. O aplicație ușoară

În acest fișier data.mat aveți trei imagini, reprezentate ca matrici tridimensionale (o matrice per culoare - R, G, B). Matricile reprezintă o imagine Img_initial care a fost distorsionată prin adăugarea unui zgomot (matricele R1 și R2), prin formula: IR = Img_initial * 0.3 + R1 * 0.3 + R2 * 0.3

Task-ul vostru este să încercați să reconstruiți matricea originală a imaginii și să o afișați. Pentru asta trebuie să faceți pașii următori:

Rețineți că o matrice imagine conține numai valori de la 0 la 255.

13. Column major

OCTAVE stochează datele în ordine pe coloane (column major). Pentru a testa asta încercați să înmulțiți element cu element două matrici mari (N = 1000) folosind 2 for-uri. Parcurgeți matricea pe rânduri, iar apoi pe coloane. Pentru a măsura timpul puneți funcția 'tic' înainte, iar funcția 'toc' după blocul de cod pe care doriți să îl măsurați. De asemenea, calculați înmulțirea folosind operatorul '.*'. Observați diferențele de timp.