Академический Документы
Профессиональный Документы
Культура Документы
DE
SSD
CURSO 2003/2004
Grupo de Teor a do Sinal Dpto. Teor a do Sinal e Comunicaci ons Universidade de Vigo
PROLOGO
La clase pr actica de la asignatura Sinais e Sistemas Discretos se concibe como un entorno en el que se espera que el/la alumno/a sea capaz de asimilar nuevos conceptos, al igual que ocurre en la clase te orica, pero con ayuda de herramientas adicionales como el ordenador en este caso. La asistencia no se regular a, aunque un porcentaje de la nota nal puede ser opcionalmente conseguido en las clases pr acticas mediante dos ejercicios puntuables que se realizar an en su momento. Tambi en mediante la realizaci on de un proyecto optativo que se repartir a a lo largo del curso se podr a conseguir otro punto sumable a la nota de teor a del examen. Se recomienda la preparaci on previa de cada sesi on de trabajo, ya que adem as de estar en mejores condiciones de realizar los ejercicios, el aprovechamiento de la clase ser a mucho mayor con un peque no esfuerzo previo. Las principales referencias de inter es, adem as de los libros existentes sobre procesado digital de se nal, son el manual (help en l nea) del Matlab, el manual de Octave [?], y el libro de Burrus et al. [?], que contiene numerosos ejercicios de procesado digital de se nal para Matlab, y que pueden ser utilizados tambi en sobre Octave. La nota nal nf de la asignatura se calcular a en base a la nota conseguida en el examen nal (nt, hasta un m aximo de 10 puntos), los puntos conseguidos en los ejercicios puntuables (np, hasta un m aximo de 2 puntos), y el punto conseguido con el proyecto npro, de la siguiente forma: nf = npro + np + nt(10 np)/10 con lo que la nota conseguida en las clases pr acticas y el proyecto siempre ayuda a mejorar la nota nal. Nota: La f ormula anterior se aplicar a en las convocatorias de Junio y Septiembre. La nota de la convocatoria de Diciembre se basar a exclusivamente en la nota conseguida en el examen escrito.
ii
1.2.
AL ENTORNO DE TRABAJO PRACTICA 1. INTRODUCCION xterm se pulsa el bot on derecho del rat on y se selecciona en el men u la opci on xshell. M as adelante se explican algunos comandos del sistema operativo. Con el rat on se pueden mover las ventanas de un lado a otro pulsando con el bot on izquierdo sobre el marco. Para introducir ordenes en el sistema operativo, basta con activar la ventana pulsando en el marco ( o situ andose sobre ella un momento).
DE TRABAJO COMO TERMINAR LA SESION Con el bot on derecho del rat on abrir el men u y seleccionar: WindowManagers, exit y contestar armativamente a la pregunta sobre salir de la sesi on. IMPORTANTE: Si el ordenador va a ser apagado f sicamente, hay que efectuar CtrlAlt-Del cuando aparezca la petici on de login, y esperar a que aparezca la l nea LILO boot antes de pulsar el interruptor de apagado.
1.3.
Por u ltimo, indicar que en el sistema operativo linux las may usculas se diferencian de las min usculas por lo que no es indiferente el uso que se haga de ambas tal y como ocurre en DOS.
1.3 Utilidades
1.3.1 Correo electr onico
En aquellas pr acticas que as lo indiquen, se podr an entregar ejercicios o enviar consultas al profesor por correo electr onico, utilizando el programa elm, al que se accede a trav es del men u de aplicaciones (Apps) o desde la linea de comandos de una ventana xterm.
1.3.2 Matlab/Octave
Matlab (y la versi on de libre distribuci on Octave) es un entorno software orientado a c alculos num ericos y a visualizaci on de resultados. Las principales ventajas de Matlab pueden resumirse en: C alculos matem aticos interactivos. Gr acas integradas. Programaci on sencilla. Entorno consistente con numerosas funciones propias. De esta manera, el alumno se centra en la resoluci on de los problemas sin sumergirse en las cuestiones de la programaci on. Para iniciar una sesi on de Matlab no hay m as que escribir Matlab en una ventana de comandos y ya se abre todo el entorno de ventanas propio de la aplicaci on. Si no se desea utilizar el entorno de ventanas (tarda un poco en arrancar y, a veces, no compensa) se puede llamar al matlab con la opci on -nojvm, que signica no-java-virtualmachine. Para iniciar una sesi on de Octave, la llamada ser a octave desde una ventana de comandos. En este caso no se abre ning un entorno de ventanas nuevo, sino que Octave utiliza la propia ventana de comandos de Linux/Windows. Cuando se teclee una expresi on que Matlab/Octave entienda , se efectuar an las tareas apropiadas. En otro caso, informar a del error cometido en la expresi on. Para cerrar la aplicaci on Matlab/Octave, simplemente se teclea el comando quit o exit (intentarlo). A partir de este momento, y para el resto del curso, s olo aludiremos al programa Matlab, entendiendo que en Octave ser a exactamente lo mismo. En los casos en que haya alguna diferencia se escribir a expresamente. Las declaraciones en Matlab pueden ser:
1.4.
AL ENTORNO DE TRABAJO PRACTICA 1. INTRODUCCION >> variable = expresion (o bien) >> expresion donde los nombres de las variables y funciones comienzan por una letra a la que pueden seguir letras o d gitos.
Matlab tiene cheros de ayuda a los que se puede acudir en el propio entorno de ventanas del Matlab para buscar comandos. Tambi en existe un manual de Octave [?] que recoge una descripci on detallada de todos sus comandos (los que vamos a utilizar en esta clase son casi todos iguales a los de Matlab).
1.4.
Observar que al introducir los elementos de una matriz hay que delimitarlos mediante corchetes; los elementos de una la se separan mediante espacios en blanco o comas; las diferentes las se separan mediante punto y coma. Probar ahora con algunas funciones propias de Matlab, como: >> >> >> size(A) who whos
El comando who muestra las variables almacenadas en el workspace de Matlab. Como se puede apreciar, la matriz A est a almacenada en el workspace para futuras operaciones con ella. Las variables presentes en el worjspace tambin se pueden visualizar pulsando la pesta na Workspace del entorno de ventanas propio de Matlab. Si se desea conocer el comportamiento de alguna funci on propia de Matlab, se dispone de un comando muy u til, help . Probar, por ejemplo: >> >> help size help whos
En este u ltimo caso, Matlab muestra los operadores que utiliza as como la gran cantidad de funciones propias a las que tiene acceso para operar con ellas ordenadas por grupos anes (o toolboxes). Si se desea conocer el valor del elemento situado en la primera la y segunda columna de la matriz A , teclear: >> A(1,2)
O bien, si se desea acceder a todos los elementos de la primera la: >> A(1,:)
Tambi en se puede acceder a todos los de la segunda columna y asignarlos a un nuevo vector a: >> a = A(:,2)
Probar con el comando who ahora. Observar que Octave diferencia las letras may usculas y las min usculas. Emplear ahora el comando size para conocer las dimensiones de a. Es un vector columna, con lo que una de sus dimensiones es uno. Para vectores (la o columna) se puede utilizar el comando length, que nos indica su longitud:
Tener en cuenta que para acceder a los elementos de un vector (o matriz) hay que usar par entesis mientras que para generar un vector (o matriz) hay que usar corchetes. Se pueden construir nuevas matrices a nadiendo las o columnas a alguna matriz existente. Probar lo siguiente: >> >> p = [7 8 9] P = [A;p]
O bien, sustraer una parte de una matriz para formar una nueva: >> Q = P(:, 2:3)
Qu e parte ha seleccionado? Si en este momento se introduce el comando who aparecer an todas las variables generadas hasta el momento (probarlo). Para borrar del workspace alguna de ellas probar con una declaraci on del tipo: >> >> clear p Q who
Qu e ocurrir a si se teclea clear sin ning un argumento? No hacerlo, puesto que se necesitar an esas variables para continuar con la pr actica; el comando help dar a la soluci on.
Adici on y Sustracci on Los operadores para sumar y restar son los s mbolos + y - . Octave efectuar a estas operaciones siempre que las matrices tengan las mismas dimensiones:
1.4.
Tambi en existe la posibilidad de sumar un escalar a todos los elementos de una matriz o vector: >> >> C = A + 20.456 c = a - 1.5
Multiplicaci on El operador para multiplicar es el s mbolo * . Matlab efectuar a esta operaci on siempre que las matrices sean compatibles. >> >> >> >> >> >> D = A * size(D) E = B * size(E) d = a * e = b * B A b a
Tambi en podemos efectuar el producto escalar entre dos vectores de las mismas dimensiones como a y c : >> a*c
Como se observa, el resultado es un escalar, ya que en este caso a y c son columnas. Si fuesen las, ser a de la forma a c . Tambi en podemos efectuar el producto de un escalar por todos los elementos de una matriz o de un vector: >> >> 3.5 * a -sqrt(2) * A
Divisi on Existen dos tipos de divisi on en Matlab, hacia la derecha ( s mbolo /) y hacia la izquierda (s mbolo \). Si deseamos resolver el sistema matricial X * A = E , nuestra expresi on ser a: >> X = E / A
Esta expresi on es equivalente a efectuar X = E * inv(A) . Pero si el sistema que deseamos resolver es A * X = C , deberemos efectuar una divisi on a la izquierda: >> X = A \ C
1.4.
Esta expresi on es equivalente a X = inv (A) C . Si trabajamos con escalares, tenemos que 1/4 = 4\1 (comprobar). Potencia El s mbolo para efectuar potencias es . En el caso de no disponer de este s mbolo en el teclado se puede utilizar en su lugar. La expresi on A k se efectuar a siempre que A sea una matriz cuadrada y k un escalar: >> o >> D ** 2 D ^ 2
El signicado de la variable NaN es Not a Number. La variable eps muestra la resoluci on num erica de Matlab. Mientras que las variables i y j toman por defecto el valor de sqrt(-1).
1.4.
Nota: Los valores de i y de j pueden ser redenidos, aunque en ese momento perder an su condici on de sqrt(-1). Adem as, el valor sqrt(-1) puede ser reasignado a otra variable: >> >> jj = sqrt(-1) x = 2+jj*3
El comando pwd indica el path completo del directorio actual de trabajo; ls muestra un listado de todos los cheros de ese directorio de trabajo; nalmente, cd .. cambia al directorio inmediatamente superior al actual (o a otro cualquiera que se especique en lugar de los dos puntos). Hay que tener en cuenta que el grabado y lectura de cheros se realizar a en Matlab sobre el directorio actual, que ser a aquel desde el que se ha invocado Matlab si no se ha hecho ninguna operaci on de cambio de directorio dentro de Matlab.
IMPORTANTE: Comprobar con pwd el directorio de trabajo siempre que las cosas no funcionen como deber an a la hora de cargar o salvar cheros. Los cheros de datos en Matlab tienen extensi on .maty son archivos binarios comprimidos; sin embargo en Octave tienen extensi on .octy son archivos de texto. Con el comando clear se han borrado todas las variables del workspace (probar con who ). Pero en los cheros mat1.mat (mat1.oct) y mat2.mat (mat2.oct) del disco duro se encuentran almacenadas algunas de las variables que hab an sido generadas (hacer ls para listar los cheros del directorio en el disco duro). Ahora se puede nalizar la sesi on de Matlab (quit ) sin perder esos valores. Para recuperar esas variables hay que usar el comando load :
1.4. >> >> >> >> load mat1 who load mat2 who
Si dese aramos generar un vector similar pero s olo con los n umeros pares: >> y = 2:2:100
Tambi en podemos trabajar con incrementos no enteros o negativos: >> >> z = 0:pi/8:pi u = 10:-1:-5;
Observar que al nalizar una expresi on con un punto y coma el resultado no aparece en pantalla. Matlab ejecuta la declaraci on en modo ciego. En general, la expresi on j : k es equivalente a [j, j + 1, j + 2, ..., k ] ; si k < j el resultado es una matriz vac a, de dimensiones 0x0; la expresi on j : i : k es equivalente a [j, j + i, j + 2i, ..., k ]. Como ya se ha visto anteriormente, el operador : (dos puntos) puede tambi en ser usado para seleccionar partes de una matriz. >> b = A(:,1)
Adem as, Matlab permite generar las siguientes matrices: zeros, ones, eye, diag, triu, tril, toeplitz, rand cuyas caracter sticas se pueden conocer con help.
10
1.4.
1.4.13 El comando nd
El comando nd se utilizar a a menudo a lo largo de las pr acticas de SSD para encontrar los ndices de una secuencia que satisfacen una condici on booleana. Por ejemplo, vamos a utilizar el comando nd para averiguar la posici on en la que se encuentra el m aximo valor de un vector: Crear con Octave el vector >> x=[1 2 4 -1 8];
devuelve en b las posiciones de los elementos diferentes de cero de a. Por lo tanto, el siguiente comando: >> y=find(x>=max(x))
qu e valor devolver a en y ? Comparar con el resultado obtenido al efectuar >> [maximo,y] = max(x);
11
1.4.
1.4.14 Gr acas
La visualizaci on de resultados es una ayuda fundamental en muchos problemas relacionados con el procesado de se nal. El comando principal de Matlab para realizar gr acas es plot . Realicemos un ejemplo de algunas utilidades gr acas: >> >> >> eje = -2*pi : .05 : 2*pi; x = sin(eje); plot(x)
Observar el eje horizontal de esta gr aca: no coincide con el aut entico rango de valores. Probemos ahora: >> plot(eje,x)
A esta gr aca se le puede a nadir enrejillado, t tulo, etiquetado de los ejes: >> >> >> >> grid title(Funcion sin) xlabel(tiempo) ylabel(amplitud)
Nota: En Octave hace falta un comando adicional para representar las etiquetas de los ejes sobre un gr aco que ya est a en pantalla: >> replot Existen otras numerosas opciones (help plot ) como: semilogx, semilogy, loglog, polar, mesh.... Adem as, mediante el comando hold podemos conservar una gr aca en pantalla para visualizar en la misma pantalla un vector diferente: >> >> >> hold y = sin(eje + 0.25); plot(eje,y)
Tecleando nuevamente hold , la gr aca actual s olo se mantendr a en pantalla hasta un nuevo comando plot . El comando hold on asegura la activaci on del hold y el comando hold o asegura la desactivaci on. Tambi en es posible visualizar varias gr acas simult aneamente. Para ello hay que utilizar el comando gure: >> >> >> figure(1) y = sin(eje + 0.25); plot(eje,y)
En este caso aparece una nueva ventana que muestra la gr aca anterior. Para conmutar entre las distintas gr acas hay que utilizar asimismo gure (o seleccionar la gura con el rat on): >> figure(0)
12
1.4.
Esta instrucci on activa de nuevo la primera ventana. Veamos ahora un ejemplo para dibujar gr acas en forma de secuencias, en concreto, una secuencia sinusoidal: >> >> >> n = 0 : 30; s = sin(n*pi/15); stem(n,s)
Qu e hace este bucle? Cu al es el valor de n al terminar el bucle? Bucles if else endif El siguiente ejemplo calcula la inversa de una matriz en el caso de que esta sea cuadrada. Denir una matriz A antes de realizar el ejemplo:
13
1.4.
>> tamano = size(A); >> if tamano(1) == tamano(2) > inversa = inv(A) > elseif tamano(1) > tamano(2) > disp(A tiene mas filas que columnas) > else > disp(A tiene mas columnas que filas) > end (Nota: en Octave el comando es endif)
Ficheros de funciones .m Crear un chero media.m con las siguientes l neas: function [y,l] = media(x) # Calculo de la media longitud = length(x); l=longitud; y = sum(x) / longitud; En Octave las funciones se terminan con el comando: endfunction
14
AL ENTORNO DE TRABAJO PRACTICA 1. INTRODUCCION Ahora llamar a esa funci on desde Matlab: >> >> vector = 1:29; [y,l]=media(vector);
1.5.
Examinemos el contenido del chero media.m : La primera l nea de una funci on .m siempre empieza con la palabra function, seguida de la/s variable/s que devuelve (si son m as de una, deben ir separadas por comas y delimitadas por corchetes); a continuaci on aparece el nombre de la funci on y entre par entesis la lista de argumentos de entrada a la funci on separados por comas. El nombre del chero ha de coincidir con el nombre de la funci on que contiene, seguido de .m. Tras esta l nea vienen los comentarios explicativos de la funci on. Estas l neas vienen precedidas por el s mbolo #. Cuando se teclea un help de la funci on, en pantalla aparecer an estos comentarios. Las variables internas de la funci on (longitud en este caso) son locales y no existir an en el workspace cuando el comando media haya nalizado. A la hora de devolver los resultados al cuerpo principal hay que asignar la salida de la funci on a las variables en las que queremos poner dicha salida, tal y como se muestra en la llamada a la funci on. Observaciones importantes Evitar el uso de los bucles de tipo for . Son inecientes en Matlab porque es un lenguaje interpretado, con lo que no se debe programar en Matlab de la misma manera que en C o FORTRAN. Los bucles s olo han de ser usados como u ltimo recurso. As , por ejemplo: >> for i = 1 : 20 a(i) = i; endfor
Es equivalente a la expresi on: a = 1 : 20 ; . Documentar las funciones .m Las l neas de comentarios al principio de cualquier funci on se usan como help de dicha funci on. Hay que procurar comentar el funcionamiento de la funci on, as como los argumentos de entrada y salida que emplea. Aquellas funciones que se utilicen han de estar en el mismo directorio en el que se est a trabajando con Matlab, a no ser que haya un path espec co a donde se encuentran.
15
1.6.
2. Dentro del directorio practica1, crear con el editor un chero de nombre maximo.m, que contenga la funci on maximo que devuelve la posici on del m aximo valor dentro de un vector, utilizando para ello el comando nd. 3. Guardar el chero maximo.m en un diskete. 4. Borrar todas las variables del workspace de Matlab y a continuaci on crear un vector aleatorio y calcular su m aximo con la funci on maximo reci en guardada. 5. Borrar el directorio de trabajo.
16
Bibliograf a
[1] C. Burrus, J. McClelland, A. Oppenheim, T. Parks, R. Schafer, and H. Scuessler, editors. Computer-based exercises for Signal Processing using MATLAB. Prentice-Hall, 1994. [2] John Eaton. Octave Documentation. GNU, 1997 (En fotocopiadora). [3] A.V. Oppenheim and R.W. Schafer. Discrete-Time Signal Processing. Prentice-Hall, 1989. [4] A.V. Oppenheim, A.S. Willsky, and I.T. Young. Signals and Systems. Prentice-Hall, 1983.
17