Está en la página 1de 33

INTRODUCCIN

Matlab es una herramienta de software ideal para el tratamiento digital de seales. El nombre de Matlab tiene su origen a partir de MATrix LABoratory, ya que fundamenta toda su operacin en el tratamiento de matrices y vectores. Es un lenguaje tcnico de alto nivel, lo que permite desarrollar mltiples aplicaciones con comandos de fcil recordacin. Adems posee muchas de las funciones que se necesitan para la creacin y el procesamiento de seales. La capacidad de representacin grfica de Matlab permite visualizar los resultados de cualquier operacin, facilitando la comprensin de las diversas funciones realizadas. Matlab puede expandirse mediante la inclusin de funciones para aplicaciones particulares como Redes Neuronales, Procesamiento de Imgenes, Comunicaciones, entre otros. Estos conjuntos de funciones especializadas se conocen como toolboxes. Este manual-gua pretende familiarizar al estudiante de Ingeniera que necesite acercarse rpidamente al entorno Matlab para poder iniciar sus proyectos en el tratamiento de seales, en la mayor brevedad posible.

INTERFAZ DE MATLAB

La interfaz inicial de Matlab es una lnea de comandos, al estilo MS-DOS, terminales en Unix o la misma pila de una calculadora cientfica. A travs de esta interfaz el usuario ejecuta la mayora de comandos, observa resultados de operaciones, genera variables y, en general, verifica el estado del sistema. Esta ventana cuenta con los botones convencionales de la mayora de programas Windows: Nuevo..., Abrir..., Cortar..., Copiar..., Pegar..., y Deshacer.... Adicional a estos botones, la ventana cuenta con un botn para observar las variables que se van almacenando a medida que se trabaja (botn de Workspace Browser), otro para visualizar la ruta en el disco duro o en la red en donde se encuentran instaladas las toolboxes (botn de Path Browser) y uno para ejecutar una aplicacin de simulacin de sistemas conocida como Simulink. Finalmente, no se puede obviar el siempre necesitado botn de Ayuda. A medida que se van introduciendo comandos en la ventana de Matlab, estos se van almacenando en una pila, como sucede con las calculadoras HP48/49 o las Texas Instruments. El mantener esta pila de comandos permite al usuario recordar el trabajo realizado anteriormente y copiar y pegar funciones previamente realizadas. De manera equivalente, las funciones previamente realizadas pueden ser llamadas con las flechas arriba y abajo del teclado. Al iniciar Matlab, aparece la licencia del software. Una licencia educativa permite instalar dos toolboxes, mientras que la licencia completa permite instalar cuantas toolboxes desee el usuario.

Grfica 1. Ventana de comandos de Matlab

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Adicional a la ventana de comandos de Matlab, se encuentra el Editor/Debugger. El Editor de Matlab se utiliza para crear programas, depurarlos y ejecutarlos. La programacin en Matlab ser tema de un captulo posterior. Al abrir la ventana de ayuda, aparecen los diferentes tpicos con los que se puede trabajar en Matlab. Comandos de propsito general, funciones con matrices, funciones de archivo, entre otros. Haciendo doble click en alguno de estos tpicos se accede al conjunto de funciones que hacen parte de este tpico, en la cual el usuario puede escoger la que le resulte til. Al estar visualizando la ayuda de un comando particular, se enciende el men See Also. Este men da sugerencias de otros comandos relacionados directa o indirectamente con el comando que est en pantalla.

Grfica 2. Editor de Matlab

Grfica 3. Ventana de Ayuda de Matlab

Grfica 4. Ayuda del comando Help de Matlab. Obsrvese que el programa sugiere otros comandos similares en el men See Also.

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

FUNDAMENTOS DE MATLAB

Operaciones Bsicas
La unidad bsica del MATLAB es el nmero de punto flotante. Estos nmeros se pueden almacenar bien como escalares, vectores o matrices. Por ejemplo, si escribe:
(45+7)/3

obtendr la respuesta almacenada en la variable ans de la siguiente forma:


ans = 17.3333

Grfica 5. Asignacin bsica de variables. Obsrvese que al utilizar ; el programa no hace eco de la variable asignada

La variable ans es una variable global, estndar de Matlab. El programa la utiliza para guardar los resultados de operaciones directamente ejecutadas desde la lnea de comandos. Matlab usualmente no trabaja con elementos simblicos, pero s es posible asignar a variables simblicas nmeros, vectores o matrices. Por ejemplo, si se escribe:
var1 = 6;

Se habr almacenado en la variable var1, y entonces se podr ver su contenido escribiendo su nombre en la lnea de comandos. Note que poner el smbolo ; al final de la lnea evita que Matlab haga "eco" de lo escrito. Si ahora se hace:
Grfica 6. Operacin bsica con variables. En este ejemplo se crea un nmero imaginario sumado dos variables previamente asignadas. Cabe anotar que para visualizar el valor de la tercera variable var3, basta con poner su nombre en la lnea de comandos

var2 = 7; var3 = var1 + var2*j;

se habr almacenado en var3 el nmero complejo 6+7i. Para conocer el valor de una variable, se le llama por su nombre desde la lnea de comandos.
var3

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Vectores
El trabajo con vectores es esencial. Un vector bien puede representar el eje tiempo para un caso dado o la variable dependiente en otro. Los vectores se escriben de manera directa, con parntesis cuadrados:
vector1 = [1 2 3 4 5 6 7]; vector2 = [1; 2; 3; 4; 5];

El primero es un vector de 1x7, mientras que el segundo es de 5x1. Para cambiar el i-simo elemento de un vector, se escribe:
vector(3) = 100;

Un procedimiento alterno para generar vectores es el siguiente:


tiempo = (0:0.5:10);

el cual genera un vector que comienza en 0, termina en 10 y se incrementa de 0.5 en 0.5. Esto es, se escribe entre parntesis circulares el valor inicial, dos puntos, el incremento, dos puntos y finalmente el valor final. Para saber la longitud del vector, se utiliza el comando length. La mayora de operaciones entre vectores funciona. Si desea hacer multiplicacin o exponenciacin, se escribe:
x.*y;

Grfica 7. Creacin de vectores en Matlab. Al utilizar ; entre cada componente, se crean filas adicionales. Sin utilizar ; Matlab adiciona columnas

Esto hace que el i-simo elemento de x sea multiplicado con el i-simo elemento de y. NOTA: Ambos vectores deben tener la misma longitud. Una vez tenido un vector se puede crear una variable que dependa de ste, por ejemplo:
y = sin(2*pi*tiempo);

Donde pi es el conocido 3.14159268...

Grfica 8. Utilizar el comando length para obtener la longitud de un vector. Este comando no da informacin sobre la distribucin de los datos dentro del vector (por ejemplo 1x7 o 5x1). Cabe anotar que Matlab almacena el resultado de la funcin length en la variable ans a menos que se le asigne a otra variable

Matrices
Las matrices se escriben de manera similar que los vectores. Por ejemplo para hacer una matriz de 2x3 se escribe:
5
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

matriz1 = [1 2 3; 4 5 6]

lo cual da como resultado:


matriz = 1 2 3 4 5 6

De manera similar a los vectores, se pueden ejecutar operaciones entre matrices. As como para los vectores se utiliza el comando length, para las matrices se utiliza el comando size. Operar este comando sobre un vector dar la informacin sobre la distribucin de los datos dentro del vector. Generacin de Matrices y Vectores Es posible generar matrices y vectores con caractersticas particulares, como por ejemplo crear matrices rellenas de unos o de ceros. Para crear una matriz rellena de ceros, se utiliza el comando zeros, especificando entre parntesis las filas y las columnas, o en su defecto, las dimensiones de la matriz separadas por comas. Por ejemplo, para crear una matriz de 3x6:
Grfica 10. Creacin de una matriz e interpretacin del 10. comando size. Este comando almacena en la variable ans un vector de 1x2, donde la primera columna indica cuntas filas tiene y la segunda cuntas columnas tiene. Es posible asignar el resultado de size a otra variable

Grfica 9. Creacin de matrices en Matlab. Hay que recordar el uso del ; para crear filas, mientras que para crear columnas, se dejan espacios entre componentes. Las matrices pueden tener nmeros imaginarios e inclusive variables creadas con anterioridad

matriz2 = zeros(3,6);

En el caso particular de generar una matriz rellena de unos, se utiliza el comando ones, con el mismo formato de parmetros de entrada que zeros. Por ejemplo, para crear una matriz de 8x2:
matriz3 = ones(2,8);

En la mayora de tratamiento de seales, la generacin de matrices no sobrepasar las dos dimensiones, aunque en casos particulares como el tratamiento de imgenes, s se sobrepase este valor. Se tiene, por ejemplo, que para generar una matriz cuadrada de 4 dimensiones rellena de unos, se utilice el comando ones de la siguiente forma:
11. Grfica 11. Uso de los comandos zeros y ones para generar matrices rellenas de ceros y unos respectivamente

matriz4 = ones(7,7,7,7);

Al tener entonces una matriz de n-dimensiones, es posible conocer las dimensiones que la
6

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

conforman mediante el comando ndims. A este comando se le pasa como parmetro el nombre de la matriz. Por ejemplo para conocer el tamao de la matriz creada anteriormente, se escribira:
ndims(matriz4)

lo cual arroja como resultado 4. Como sucede con otros comandos, si este valor no es asignado a una variable en particular, el resultado (que en este caso es 4) se almacenar en la variable ans. En muchos casos es necesario generar vectores linealmente o logartmicamente espaciados. Un vector linealmente espaciado es aquel con un valor de inicio, uno de final y los puntos entre ellos equidistantemente (linealmente) espaciados. Anlogamente, un vector logartmicamente espaciado ser aquel que tenga un inicio y un fin, con los puntos intermedios logartmicamente espaciados. Para generar este par de vectores se utilizan los comandos linspace y logspace. El comando linspace recibe como parmetros los puntos de inicio y de fin. De manera predeterminada, genera un vector con 100 puntos linealmente espaciados entre los valores de inicio y fin. Por ejemplo si se quiere generar un vector que contenga los nmeros enteros del 1 al 100, se escribe:
vector3 = linspace(1,100);

Grfica 12. Grfica 12. Creacin de un vector linealmente espaciado del 1 al 100. Como linspace tiene de manera predeterminada generar 100 puntos entre los valores de inicio y fin, en este ejemplo almacenar en la variable vector3 los nmeros enteros del 1 al 100 de la forma 1x100 (una fila por 100 columnas)

A linspace se le puede agregar un parmetro adicional que establezca cuntos puntos se desean entre los valores de inicio y fin (no necesariamente 100). Por ejemplo si se escribe el siguiente comando:
vector4 = linspace(0,1,5);
13. Grfica 13. Uso del comando linspace para generar un vector de longitud cinco. Al agregar el tercer parmetro, el comando generar un vector con el nmero de puntos intermedios especificado, que para este ejemplo es cinco

Este generar un vector que ir del 0 al 1 con 5 valores intermedios, como se muestra en la figura 13. Anlogamente a linspace, logspace genera un vector que comienza en 10 elevado al valor de inicio y termina en 10 elevado al valor de fin, exceptuando si este valor es . Para este caso particular, el vector generado ir hasta 3.141592....

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

As como linspace tena de manera predeterminada generar un vector con 100 puntos, logspace genera un vector con 50 puntos distribuidos logartmicamente. Por ejemplo, para generar un vector entre 101 y 102, se escribira:
vector5 = logspace(1,2); logspace tambin soporta un cambio a los 50

puntos predeterminados, adicionndole el tercer parmetro. Para el caso de tener un vector de diez en diez, desde 10 (101) hasta 10000 (104), el comando tendra este formato:
14. Grfica 14. Uso de logspace para la creacin de vectores logartmicamente espaciados. Para el primer ejemplo, vector5 es generado con 50 puntos (valor predeterminado), mientras que para el segundo ejemplo, vector6, se agrega el parmetro que define cuntos puntos intermedios se desean, para este caso, cuatro.

vector6 = logspace(1,4,4);

El Tiempo en Matlab Es importante recalcar que Matlab siempre trabajar en tiempo discreto. Ms an, un computador siempre trabaja en tiempo discreto. Este concepto debe ser entendido de manera muy clara antes de comenzar el trabajo con grficas o archivos de sonido. Las seales, sin importar su origen sern discretas y lo que se realiza es utilizar un nmero adecuado de muestras para aproximar la seal a tiempo real. Esta aproximacin ser relativa a la frecuencia de la seal, por ejemplo, si se desea graficar sin(2t), una aproximacin ms que suficiente sera:

15. Grfica 15. La definicin del tiempo como variable discreta en Matlab depende de los puntos intermedios entre el inicio y el fin del dominio definido. En el primer caso, se observa que la definicin da a lugar a 501 puntos, mientras que la segunda da a lugar a 50001 puntos, por lo que una funcin defenida a partir del segundo caso tomar ms tiempo en computarse que una a definida a partir del primer dominio. En muchos casos una definicin tan exacta es inecesaria pero s logra hacer ineficientes algunas funciones

t = 0:0.01:5; y = sin(2*pi*t);

Se pueden hacer dominios con ms puntos:


t = 0:0.0001:5; y = sin(2*pi*t);

el inconveniente de dominios con un alto nmero de puntos es que se necesitar ms tiempo para el procesamiento de dichos puntos, inclusive cuando la funcin es relativamente sencilla. Se debe recordar que Matlab calcula punto por punto el rango de una funcin a partir del dominio que la define.

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

GRFICAS CON MATLAB

Los grficos en Matlab se pueden clasificar como: Grficos en continuos Grficos discretos Grficos en barras (horizontal, vertical o en 3D) Grficos en escalera

Para el trabajo con seales en tiempo continuo, el tipo de grfico ms conveniente es el grfico continuo. Para el caso de seales en tiempo discreto, los grficos discretos son los ms apropiados. El uso de grficos de barras es til para aplicaciones estadsticas, mientras que los grficos en escalera aplican generalmente a seales cuantificadas o seales digitales.

Grficas continuas en dos dimensiones El trazado de grficas de seales en tiempo continuo se realiza mediante la funcin plot( ). Esta funcin maneja varios parmetros que es importante observar:
16. Grfica 16. Algunas capacidades grficas de Matlab. Trazado de imgenes en dos y tres dimensiones

Primero, se debe definir una variable rango y una variable dominio. Por ejemplo, si se definie la funcin seno:
t = 0:0.01:5; y = sin(2*pi*t);

al hacer la grfica mediante el comando:


plot(y);

traza la funcin sin(2t). Se debe hacer claridad que solamente se est graficando el rango de la seal, es decir, si se observa el dominio de esta funcin, se puede ver cmo esta termina en 500. Este valor corresponde a los 501 puntos definidos por el clculo de la funcin seno sobre
9
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

el vector de tiempo definido, mas no es la grfica de la funcin seno contra tiempo. Al realizar esta observacin se puede concluir que si en la funcin plot solamente se pasa como parmetro el rango de la funcin definida, Matlab tomar como domino de dicha funcin el nmero de puntos que la definen. Por ejemplo, la tabla de dominio versus rango de la funcin para los primeros siete valores ser: POSICIN 0 1 2 3 4 5 6 : DOMINIO t 0 0.01 0.02 0.03 0.04 0.05 0.06 : RANGO y 0 0.0628 0.1253 0.1874 0.2487 0.3090 0.3681 :

17. Grfica 17. Trazado de la funcin sin(2t) sin un dominio definido. Obsrvese que el dominio que Matlab selecciona automticamente es la posicin correspondiente a cada valor en el rango, por eso el punto final es el 500

En pantalla se observa una grfica de la posicin versus el rango y no del dominio versus el rango. Para evitar este inconveniente, se realiza:
plot(t,y);

obtenindose la verdadera grfica de dominio versus rango (grfica 18) Si se define una nueva funcin para compararla con la anterior:
y1 = sin(3*pi*t+2*pi/3);

y se realiza su grfica,
plot(t,y1);

este nuevo grfico sobreescribir al anterior. Existe entonces una forma para que el segundo grfico se trace sobre el que est previamente graficado: antes de utilizar el comando plot, se utiliza el comando hold. Esta funcin tiene dos parmetros: on y off. Cuando se utiliza:
hold on;

18. Grfica 18. Trazado de la funcin anterior con un dominio definido. Obsrvese que en este caso cada valor rango corresponde con el que se haya definido como dominio, por lo que la grfica es correcta

las grficas que se encuentren antes se mantienen en pantalla, hasta que se cancele esta funcin con:

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

10

hold off;

una vez hecho esto, la siguiente grfica que se realice con el comando plot, borrar las anteriores antes de trazarse. Se puede observar en la figura 19 las grficas simultneas de sin(2t) y de sin(3t+2-3). Un problema con la superposicin de imgenes es que Matlab utiliza el mismo color para cada funcin, por lo que con solamente dos funciones en pantalla, ya se presentan confusiones entre una y otra seal. Para esto, son tiles los:
Grfica 19. Grfica 19. Dos imgenes simultneas obtenidas mediante el comando hold on. Si no se utilizase este comando, el efecto que se obtiene es que al ordenar a Matlab graficar la segunda funcin, esta borra lo que se haya trazado antes, para posteriormente ser dibujada

Parmetros de Plot La funcin plot maneja varios parmetros como colores, continuidad de las lneas y marcas especiales en los puntos evaluados en el dominio. Esta tlima caracterstica apica porque a pesar de estar realizando una grfica en tiempo continuo, en realidad es tiempo discreto, como se mencion anteriormente, solamente que Matlab interpola entre dos puntos de datos. Los parmetros deben ir entre comillas sencillas y seguidos uno del otro. Los parmetros son los siguientes: COLORES y m c r g b w MARCAS EN EL PUNTO DOMINIO-RANGO . Punto o Crculos x Marcas de cruz x + Marcas de cruz + s Cuadrados * Asteriscos ^><v Tringulos (arriba, derecha, izquierda o abajo) d Rombos CONTINUIDAD DE LA LNEA Continua : Punteada -. Lnea punto -Lneas consecutivas

20. Grfica 20 Trazado de sin(2t) con color rojo y lnea discontinua (lnea punto), y la misma funcin, pero de color negro, punteada y con marcas de asterisco en cada interseccin de dominio con rango

11

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Se puede observar un grfico de la misma funcin pero con diferentes parmetros en la figura 20:
plot(n,y,'r.-.');

y
stem(n,y,'k*:');

Grficas discretas en dos dimensiones Para el trabajo de seales en tiempo discreto, se cambia el comando plot por el comando stem. Este no realiza la interpolacin entre puntos del dominio, sino que solamente marca aquellos que tengan una relacin directa dominio-rango. Esta funcin tambin puede utilizar como nico parmetro el rango de una funcin, pero ocurrira lo mismo que con plot: el grfico se realizara del rango y tomando como dominio las posiciones de cada valor. Es por eso que es conveniente utilizar tanto el dominio como el rango de una funcin al hacer una grfica con stem. Sea la funcin:
n = 0:0.1:2; y = n;
21. Grfica 21. Trazado de una funcin con plot y con stem. Obsrvese que plot(n,y) realiza una interpolacin entre los puntos definidos en el dominio, mientras que stem(n,y) no la realiza

si el grfico se realiza con plot, el resultado es una lnea recta, mientras que si se realiza con stem, se obtienen los puntos de manera discreta (figura 21):
stem(n,y);

Si se agrega el parmetro 'filled' despus del rango, los crculos de la grfica aparecen rellenos:
stem(n,y,'filled');

La funcin stem recibe los mismos parmetros que plot. Un ejemplo se puede observar en la figura 22:
stem(n,y,'b^:','filled');

22. Grfica 22. Grfica discreta modificada para trazar las lneas en color negro (b), terminadas en tringulos hacia arriba (^) y punteada (:). Adicionalmente, cada tringulo se rellena con la opcin filled.

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

12

Otros tipos de grficos en dos dimensiones Como se muestra en la figura 23, Matlab puede realizar: Grficos de Barras Verticales, con el comando bar( ), y horizontales con el comando barh( ). El uso de ambos comandos debe tener, por conveniencia, la especificacin el dominio y del rango de la funcin:
n = 0:1:10; y = n; bar(n,y);

o tambin:
barh(n,y);

Ambos comandos pueden recibir un tercer parmetro, que es el color, como se defini para plot y stem. Por ejemplo:
barh(n,y,'b');
Grfica 23. Grficos de barras verticales y horizontales 23.

Diagramas escalonados Es un tipo de grfico que aplica para seales cuantificadas, como por ejemplo:

0,1 < x < 2 1,2 < x < 3 f ( x) = 2,3 < x < 4 1,4 < x < 5 4,5 < x < 6
la cual puede ser definida como:
24. Grfica 24. Diagrama en escalera para una funcin definida a trozos o una seal cuantificada

y = [0 1 2 1 4 4];

para ser graficada mediante el comando stairs:


stairs(y);

Igualmente, se debe recordar el uso de un dominio y un rango cuando sea necesario.

13

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Este comando soporta un tercer parmetro, que es el de definicin de tipo de lnea (continua, punteada, etc.) como se define para plot y stem. Trabajo con ventanas Ocurre con frecuencia que se desea tener en pantalla ms de una ventana, cada una con un grfico independiente. Para realizar esto, Matlab utiliza el comando figure. Las ventanas de grficos son interpretadas por el programa como figuras, y cada una tiene asignado un nmero, para diferenciarlas de las dems. Si el comando se utiliza solo:
figure;
25. Grfica 25. Apertura de una nueva ventana de grficos con el comando figure. Obsrvese que el nmero que identifica esta ventana es consecutivo del nmero de identificacin de la ventana anterior, que para este caso son 1 y 2.

Matlab abre una nueva ventana, cuyo nmero es el consecutivo de la anterior. Por ejemplo, si al iniciar una sesin en Matlab se escriben las rdenes:
n = 0:1:10; y = n; bar(n,y);

y posteriormente se escribe:
figure;

Matlab abre una nueva ventana para grficos cuyo nmero ser el 2, dado que el grfico de barras quedar en la figura 1 (ejemplo en la figura 25). Es posible dar una numeracin arbitraria a las ventanas que se abren para realizar las figuras, pasndole a figure el nmero con el cual se desea que la nueva ventana sea identificada:
figure(5); figure(100);

26. Grfica 26. Apertura de ventanas de grficos con diferente numeracin. Obsrvese que a pesar de haber cuatro ventanas de grficos, se pueden numerar de manera arbitraria: 1,2,5 y 100.

El efecto obtenido se puede visualizar en la grfica 26. Una vez comprendido el concepto de ventanas, se pueden visualizar de manera independiente los efectos de los comandos plot, stem, bar y stairs sobre una misma funcin:

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

14

El siguiente conjunto de comandos:


n = 0:1:10; y = n; plot(n,y); figure; stem(n,y); figure; bar(n,y); figure; stairs(n,y);

Genera las cuatro ventanas que se observan en la grfica 27. Varios grficos en una misma ventana En algunos casos es ms conveniente tener dos o varios grficos en una misma ventana, por ejemplo para diagramas de magnitud y fase de una seal. Para este caso, se utiliza el comando subplot.
27. Grfica 27. Cuatro ventanas independientes mostrando los resultados de operar plot (ventana 1), stem (ventana 2), bar (ventana 3) y stairs(ventana 4) sobre la misma funcin

El objetivo con subplot es dividir la ventana activa en una matriz de mxn y sobre la i-sima posicin, realizar el grfico. Previo al uso de subplot se debe utilizar figure, de tal forma que se abra una ventana, luego se divida y finalmente s se grafique sobre ella con plot, stem, etc. Un ejemplo aclarar mejor este concepto: sea la funcin compleja cos(2t) + i*sin(2t), se desea graficar en la misma ventana el diagrama de magnitud (comando abs) y de fase (comando angle), y en otra ventana la parte real e imaginaria de la misma funcin. Primero, se define la funcin:
t = 0:0.01:5; y = cos(2*pi*t)+i*sin(2*pi*t);

a continuacin, se abre la primera ventana:


figure;

Sobre esta ventana se hace la matriz de subgrficos. Por ejemplo, de dos filas por una columna. Luego se define en cual subgrfico se desea trazar la funcin de magnitud:
15
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

subplot(2,1,1);

Filas

Columnas

Subgrfico

y finalmente se da la orden de graficar:


plot(t,abs(y));

Este primer grfico se observa en la figura 28. Posteriormente, para realizar el grfico de fase, se utiliza nuevamente la orden subplot, pero esta vez, se define que sobre el segundo subgrfico se trazar la siguiente imagen:
subplot(2,1,2);
28. Grfica 28. Diagrama de magnitud de cos(2t)+i*sin(2t) en la subgrfica 1 de la ventana

obsrvese que se mantiene constante el nmero de filas y de columnas (2,1), mientras que el nmero de subgrfico s se vara (de 1 a 2). Se da la orden de graficar la fase:
plot(t,angle(y));

Observndose el resultado en la figura 29. Ahora, para el trazado de la parte real (comando real) e imaginaria (comando imag) en otra ventana, la secuencia de comandos sera:
figure; subplot(1,2,1); plot(t,real(y)); subplot(1,2,2); plot(t,imag(y));
29. Grfica 29. Grfica de fase de cos(2t)+i*sin(2t) en la subgrfica 2 de la ventana

Obsrvese que en este caso, la ventana se divide en dos columnas por una fila, obtenindose el resultado de la grfica 30. El ejemplo final, sera realizar las cuatro grficas (magnitud, fase, parte real y parte imaginaria) en una misma ventana:

30. Grfica 30. Ventana nmero 2 con la parte real e imaginaria de cos(2t)+i*sin(2t), cada una en una subgrfica con distribucin de dos columnas por una fila

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

16

figure; subplot(2,2,1); plot(t,abs(y)); subplot(2,2,2); plot(t,angle(y)); subplot(2,2,3); plot(t,real(y)); subplot(2,2,4); plot(t,imag(y));

Para obtener la ventana de la grfica 31. Manejo de Ejes en dos dimensiones


31. Grfica 31. Una ventana con de dos filas por dos columnas: en el subgrfico 1 se dibuj la magnitud; en el subgrfico 2 la fase; en el subgrfico 3, la parte real; y en el subgrfico 4, la parte imaginaria

Sea la funcin y=e2t, con t definida entre 0 y 10, la grfica se puede observar en la figura 32:
t = 0:0.01:10; y = exp(2*t); plot(t,y);

32. Grfica 32. Grfica de e2t. Obsrvese que se pierde resolucin en la parte final de la figura.

para este tipo de grficas, en las que el rango posee magnitudes relativamente diferentes (valores muy pequeos al prinicipio y valores muy grandes al final), es conveniente realizar un manejo manual de los ejes de la funcin, tanto en x como en y. Para esto, se utiliza el comando axis. Este comando permite redefinir los ejes sobre los cuales se traz la imagen mediante la introduccin de un vector con los nuevos puntos de inicio y de fin en el dominio, y con los nuevos puntos de inicio y fin en el rango. Como es un vector, va entre parntesis cuadrados [ ]. Para este ejemplo, si se desea solamente visualizar el rango entre 8 y 10 en el dominio, y entre 0 y 4.5x108 en el rango, se escribe:
axis([8 10 0 4.5E8]);

y el resultado visual se observa en la figura 33.

Adicionales en los Grficos en 2D Una caracterstica til en los grficos es el uso de una grilla. Esta generalmente se emplea cuando se desea tener un mejor detalle visual en un grfico.

33. Grfica 33. Mejora de los detalles de la funcin con la redefinicin del rango de los ejes de la imagen con el comando axis

17

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Por defecto para cada figura, la grilla se mantiene apagada (no se visualiza). Para encenderla, una vez creado el grfico, se escribe:
grid on;

Si no se desea visualizar la grilla, se apaga, mediante:


grid off;

Para dar una mejor presentacin a un grfico, se pueden utilizar los comandos title, xlabel y ylabel, para agregarle ttulo a la figura, al eje del dominio y al eje del rango, respectivamente. Los ttulos se agregan una vez creada la figura:
title('Funcin tangente'); xlabel('Dominio de la funcin'); ylabel('Rango de la funcin');
34. Grfica 34. Diagrama de la funcin tan(x) con la grilla activa mediante grid on

Una vez realizada la figura y el grfico respectivo, es posible hacer acercamientos (o zoom) a la imagen, mediante el comando zoom.. Este comando opera de manera similar a grid, mediante los parmetros on y off. Cuando se utiliza:
zoom on;

Ttulo del rango con la funcin ylabel

Ttulo de la figura con la funcin title

se activa el acercamiento para la figura activa. Su uso es sencillo, solamente basta con poner el cursor sobre el punto en el que se desea hacer el acercamiento y hacer click con el botn izquierdo del mouse. Otra forma de hacer un acercamiento, es creando un recuadro sobre el rea que se desea acercar, haciendo click con el botn izquierdo del mouse, y, sin soltarlo, se mueve hasta crear dicho recuadro. Una vez terminada la operacin, el zoom se apaga con:
zoom off;
Ttulo del dominio con la funcin xlabel 35. Grfica 35. Figura con ttulos

Cuando el acercamiento queda mal hecho, se puede volver al punto inicial con:
zoom out;

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

18

PROGRAMACIN EN MATLAB

Matlab incorpora la mayora de sus funciones en los archivos propios del programa, pero otras, son implementadas a partir de las anteriores y se almacenan en archivos con extensin .m Estos archivos .m se pueden clasificar en dos tipos: scripts y funciones: Los scripts son secuencias de rdenes que generalmente son utilizadas en la lnea de comandos, como por ejemplo:
figure; subplot(2,2,1); plot(t,abs(y)); grid on; subplot(2,2,2); plot(t,angle(y)); grid on; subplot(2,2,3); plot(t,real(y)); grid on; subplot(2,2,4); plot(t,imag(y)); grid on;

Obviamente es bastante engorroso repetir una y otra vez los mismos comandos cada vez que se cambia alguno de los valores de x o de y. Para esto, se crea un script, se almacena en el computador y luego simplemente se llama desde la lnea de comandos. Por ejemplo, si la lista de comandos anteriormente mencionada se almacena en un archivo llamado miscript, para ejecutarlo, se escribira:
miscript;

La contraparte de los scripts son las funciones. Estas se caracterizan, adems de tener comandos internos, por recibir unos parmetros de entrada y generar unas salidas. Por ejemplo, se puede tener una funcin que devuelva xy, para cualquier valor de x y de y:
respuesta = potencia(x,y);

19

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Como se puede observar, en una funcin, los parmetros de entrada van separados por comas y la asignacin de la(s) salida(s) se realiza mediante el signo =. Matlab incorpora un editor, en el cual se agregan los comandos y/o las funciones que conforman el nuevo archivo. Este editor almacena los archivos de Matlab, aunque con el tiempo, el lector se dar cuenta que estos son de tipo plaintext o de texto plano, es decir, tambin se pueden hacer en un editor como el Bloc de Notas de Windows o el Editor de MS-DOS. La ventaja que tiene el editor, es que maneja colores para diferenciar los comandos de las funciones y de los comentarios del programa. Adicionalmente, permite correr un programa paso por paso o en modo continuo. Para ejecutar el Editor de Matlab, se entra al men File -> New -> M-file o simplemente se Mhace click en el botn de Nuevo. Scripts Para realizar un script, simplemente se escribe la serie de comandos que se desea ejecutar en Matlab. Por ejemplo, si se tiene la variable t y la variable y del ejemplo de subgrficos (pag. 15), las cuales son cambiadas por el usuario, pero que siempre se desean graficar con la misma secuencia de comandos, se abre el Editor de Matlab y se escribe en la ventana dicha secuencia (figura 37). Posteriormente, se graba con un click en el botn de Guardar o mediante File -> Save El archivo no ave. se puede guardar en cualquier sitio del disco duro, debe encontrarse dentro de algn directorio vlido para Matlab, por ejemplo, el directorio bin\ toolboxes\general\ \bin\ o dentro del directorio \toolboxes\general\ Finalmente, se ejecuta llamndolo desde la lnea de comandos, con el nombre con el cual fue grabado (sin la extensin):
miscript;
38. Grfica 38. Grabacin de un script de Matlab. En este ejemplo, el script se llama miscript.m y se ubic dentro del directorio \bin\

36. Grfica 36. Pantalla del Editor de Matlab (el asistente es de Office, no confundir !!)

37. Grfica 37. Varios comandos consecutivos forman un script

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

20

Funciones Una funcin generalmente lee uno o varios parmetros de entrada y, generalmente, da una o varias respuestas. Se menciona generalmente, porque no siempre se da el caso en el que hayan entradas o en el que hayan salidas. A diferencia de los scripts, que comienzan directamente con los comandos a ejecutar, una funcin siempre se encabeza con la estructura: function [o1, o2, ... on] = nombre(i1, i2, ... im) donde la palabra function debe ir antecediendo a las salidas (o1, o2, ... on), las cuales van entre parntesis cuadrados, e igualadas (mediante =) al nombre de la funcin (debe ser el mismo nombre con el cual se llamar el archivo guardado) y las entradas de la funcin (i1, i2, ... im), entre parntesis circulares y como las entradas, separadas por comas. No necesariamente m = n, lo que indica que no necesariamente el nmero de entradas debe ser igual al nmero de salidas. En la grfica 39 se puede visualizar una funcin que grafica en pantalla la seal seno, de acuerdo a los parmetros ingresados (amplitud, frecuencia en Hz y fase); adems devuelve la frecuencia en rad/s. El procedimiento para realizarla es el siguiente: Primero, se define el encabezado estndar de las funciones. El archivo se va a llamar sinplot, por lo que este nombre se utiliza en la definicin. Adems, van las entradas y la salida:
function [a] = sinplot(A,f,phase)

39. Grfica 39. Una funcin se define por tener entradas y salidas. En esta grfica, la funcin tiene tres entradas y una salida

40. Grfica 40. Llamado desde la lnea de comandos de la funcin definida en la grfica 39

Los encabezados de definicin de funciones no llevan ; Posteriormente, se define la secuencia de comandos:


figure; x = 0:0.05:10; a = 2*pi*f; y = A*sin(2*pi*f*x); plot(x,y);

Primero, se crea una figura independiente con figure. Luego se define el dominio de la seal
21
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

(x = 0:0.05:10). La variable de retorno, a, se asigna directamente. Posteriormente se crea el vector de rango y, y finalmente se grafica. Cabe anotar que estos comandos s llevan ; al final de cada lnea, para evitar el eco en la lnea de comandos. Finalmente, para ejecutar la funcin, se llama desde la lnea de comandos de Matlab. El resultado de la frecuencia en rad/s se asigna a una variable llamada frecuencia:
frecuencia = sinplot(2, 1, 0)

Este comando, ejecuta la funcin sinplot para el trazado de una seal sinusoidal de amplitud 2, frecuencia 1 Hz y 0 rad de fase. En la variable frecuencia queda asignado el clculo de 2**1, es decir, 6.2832 rad/s.

para Comandos de Matlab para Control de Flujo de programas Matlab incluye comandos internos similares a los que se encuentran en los lenguajes de programacin de alto nivel, como condicionales, ciclos, entre otros. Se denominan de control de flujo de programas porque determinan la forma en que se ejecuta una secuencia, si se ejecuta un algoritmo u otro, si se solicita una entrada de usuario, etc. Estos comandos pueden ser utilizados tanto en funciones como en scripts. Se presentan a continuacin los comandos ms usados en la programacin de Matlab: IF... ELSEIF... ELSE... END
If es el condicional por excelencia y posee la

siguiente sintaxis:
if expresin instrucciones y operaciones elseif expresin2 instrucciones y operaciones : else instrucciones y operaciones end

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

22

La expresin if es el inicio del condicional y siempre debe usarse. Cuando se hacen varias comparaciones con respecto a la misma variable, se utilizan los elseif, aunque no son necesarios. Adicionalmente, si la condicin no se cumple para el if y/o para los elseif (dependiendo si se utilizan o no), se puede utilizar el else. Un esquema condicional con if siempre se debe terminar con un end. Modificando la funcin que grafica la seal seno, se puede tener que si el usuario ingresa una frecuencia negativa, el programa genere un error o que de lo contrario, realice la grfica:
if f<=0
error('La frecuencia es...');

indica que si la variable f (de frecuencia) es menor o igual a cero, genere un aviso de error mediante error, para que se informe al usuario y se salga del if. De lo contrario,
else figure; x = 0:0.05:10; a = 2*pi*f; y = A*sin(2*pi*f*x); plot(x,y);

41. Grfica 41. Funcin para graficar la seal seno modificada con el uso de un condicional if

ejecuta la secuencia de graficado


end

finalmente, se cierra el if. Los operadores de comparacin para determinar si una expresin en verdadera o no, son los siguientes: COMPARADOR == < > <= >= ~= DESCRIPCIN Igual a... Menor que.. Mayor que... Menor o igual a... Mayor o igual a... Diferente de...

Es posible tener dentro de un condicional if varias comparaciones, conectadas mediante operadores lgicos. Por ejemplo, si se modifica nuevamente la funcin de trazado de la seal
23
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

seno, se puede hacer que solamente reciba valores de fase reales. Esto se realiza agregando la lnea:
elseif f>0&phase~=0
error('La fase no es real');

como se observa en la grfica 42. Aqu el conector lgico utilizado es & el cual opera como una AND, es decir, que ambas expresiones se deben cumplir para que se entre a la funcin de error. Los conectores lgicos son: CONECTOR & | DESCRIPCIN Y lgico O lgico

Adicionalmente se puede negar una expresin, antecediendo ~ Negacin


42. Grfica 42. Uso del condicional & dentro de la funcin para generar seales seno, que verifica que la frecuencia sea positiva y que la fase sea real

FOR... END La instruccin for se utiliza para generar ciclos finitos. Igual que el if, se debe terminar con un end. La sintaxis es la siguiente:
for variable = expresin instrucciones y operaciones end

El uso de los ciclos for dentro de Matlab debe restringirse a operaciones que no vengan integradas con el programa, ya que una funcin que lo contenga, se hace ineficiente en trminos de tiempo de ejecucin, si se utilizan muchos ciclos for. Por ejemplo, se puede calcular la suma de los componentes de un vector mediante el siguiente ciclo:
X = [1 1 1 1 1 1]; a = 0; for i=1:length(X) a = a + X(i); end

pero resulta ms eficiente:


Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

24

a = sum(X);

La funcin sum suma los componentes de un vector, solo que al estar implementada dentro del programa de Matlab, se ejecuta de manera ms eficiente que el ciclo for previamente mostrado. La expresin del ciclo i=1:length(X) indica que el contador i va a iniciar en 1 y termina cuando llegue a la longitud del vector X. Los incrementos se hacen de uno en uno. Para cambiar el incremento, por ejemplo de dos en dos, se especifica un tercer parmetro, entre la especificacin de inicio y de fin del ciclo:
for i=1:2:length(X)

De manera equivalente, si lo que se desea es que el contador descienda de uno en uno, el parmetro de incremento se pone negativo; por ejemplo, para recorrer el vector desde el final hasta el inicio:
43. Grfica 43. Script para calcular la suma de los componentes de un vector definido mediante un ciclo for. Este ejemplo es a modo didctico, ya que Matlab trae interno un comando para realizar esta funcin

for i=length(X):-1:1

SWITCH... CASE... OTHERWISE... END El operador switch se utiliza para tomar una variable de como referencia y compararla con cada valor presentado en cada case. Si ningn case contiene un valor igual al de la variable referenciada en switch, ejecuta la secuencia dentro del otherwise (opcional). Se cierra con un end. La sintaxis es la siguiente:
switch variable case valor1
instrucciones y operaciones

case valor2
instrucciones y operaciones

: otherwise
instrucciones y operaciones

end

Para comprender mejor este comando, el siguiente ejemplo consiste en un script que grafique la parte real o imaginaria de una funcin, dependiendo del estado de una variable definida en la lnea de comandos.

25

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Sea a la variable donde se almacena un valor r si se desea graficar la parte real o una i si se desea grafica la parte imaginaria de una funcin. Van entre comillas sencillas porque son caracteres, no variables.
a = 'r';

Ahora bien, si se llama al script que aparece en la grfica 44:


switch a

toma como variable de referencia a a. Es decir, va a tomar el valor contenido all y buscar en cada case uno que sea igual.
case 'r' plot(x,real(y));
44. Grfica 44. Script que utiliza un switch.. case.. para graficar la parte real o imaginaria de cualquier funcin definida en la lnea de comandos

en este caso, si la variable a contiene una r, grafica la parte real de la funcin definida para y.
case 'i' plot(x,imag(y));

si la variable a no contiene una r sino una i, grafica la parte imaginaria de la funcin definida para y.
otherwise
error('Ingrese un parmetro);

finalmente, si a no contiene ni una r ni una i, genera un error. Un ejemplo de la aplicacin sera as:
x = 0:0.05:10; y = exp(i*2*pi*x); a = 'i'; miscript;

este ejemplo se puede visualizar en la grfica 45.

45. Grfica 45. Aplicacin del script creado en la grfica 44. Como en este caso la variable a contiene el carcter i, el script grafica la parte imaginaria de la exponencial definida para la variable y en la lnea de comandos

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

26

WHILE... END... La instruccin while se utiliza para crear ciclos que se mantienen en ejecucin hasta que una condicin lgica se cumpla. La sintaxis es:
while expresin instrucciones y comandos end

La expresin lgica es de la misma forma que se utiliza en el condicional if. En el siguiente ejemplo (grfica 46), se generan nmeros aleatorios hasta 100. Si el nmero obtenido es menor que 50, se vuelve a generar otro, hasta que aparezca un nmero mayor de 50 y, cuando esto se cumple, se sale del ciclo:
46. Grfica 46. Generacin de nmeros aleatorios. Si el nmero generado es menor que 50 se vuelve a generar otro y as sucesivamente hasta obtener uno mayor de 50

i = 0;

inicializa la variable en donde se va a almacenar el nmero aleatorio. Esta variable se inicializa con un nmero menor de 50 para que la condicin del while se cumpla al menos una vez
while i < 50

siempre y cuando se cumpla que la variable i es menor de 50, ejecuta la siguiente instruccin
i = 100*rand;

asigna a la variable i un nmero aleatorio. La funcin rand genera nmeros aleatorios entre 0 y 1, por lo que al multiplicar por 100 se obtienen nmeros entre 0 y 100
end

cierra el ciclo y lo repite hasta que se cumpla la condicin. BREAK Esta instruccin se utiliza para romper ciclos frente a una condicin determinada. En el ejemplo de la figura 47, se crea un ciclo for que cuenta desde 1 hasta 1000000000, lo cual toma mucho tiempo; pero si en medio del ciclo va:
if i == 10 break; end

Grfica 47. Grfica 47. Ejemplo de break. Un conteo desde 1 hasta 1000000000 toma ms de diez minutos en Matlab, pero debido a la condicin if, que establece que si el contador llega a 5 se ejecute la instruccin break, el conteo se detiene en menos de un par de segundos

27

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

el resultado que se obtiene es que a pesar de que el conteo vaya hasta 1000000000, este se detendr cuando vaya en 10 a causa del if con la instruccin break. INPUT Esta instruccin solicita una entrada desde el teclado. La asignacin de dicha entrada se hace a una variable, de acuerdo a la siguiente sintaxis:
variable = input('texto de entrada');

Por ejemplo,
a = input('Cuntos gatos hay? ');

presenta el efecto de la grfica 48. En este caso, si se ingresa un nmero, la variable queda como variable numrica, es decir, si el usuario teclea un 5 y presiona la tecla [Enter], al hacer:
a + 10

48. Grfica 48. Uso del comando input

se obtiene
ans = 15

ya que, generalmente, 5 + 10 da 15. Ahora bien, si a input se agrega el parmetro


's': a = input('Cuntos gatos hay? ','s');

lo que se obtiene es que la variable de asignacin (en este caso a) sea tomada como una variable de caracteres y no de forma numrica, es decir, si el usuario ingresa un 5, se almacena este 5 como carcter, mas no como nmero, por lo que si el usuario hace:
a + 10

49. Grfica 49. Utilizando el parmetro 's' en el comando input, se tratan los nmeros como caracteres, por lo que al hacer a + 10, se obtiene 63, ya que el cdigo ASCII del carcter 5 es 53

se obtiene
ans = 63

ya que el cdigo ASCII del carcter 5 es el nmero 53, por lo que si se le agrega 10, se obtiene 63.
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

28

MENU Esta instruccin abre en pantalla una ventana con un men de botones, del cual se puede seleccionar una opcin. El ndice del botn presionado se almacena en la variable de asignacin. El uso de menu es as:
variable = menu('ttulo', 'opcin1', 'opcin2', ... 'n-opcin');

Por ejemplo (grfica 50), con la siguiente lnea:


a = menu('Seleccione un animal', 'Gato', 'Perro', 'Pjaro');

Grfica 50. Grfica 50. Men grfico con el comando men

aparece un men en pantalla. Si el usuario presiona el botn 'Gato', en la variable a se almacenar el ndice del botn, es decir un 1. Algo similar sucedera si se presiona el botn 'Pjaro', solamente que en la variable a se almacena el nmero 3. Otros comandos tiles Manejo de la Eficiencia A medida que se desarrollan funciones en Matlab, en ciertas aplicaciones es necesaria una alta eficiencia, como por ejemplo en aplicaciones en tiempo real. Para medir el tiempo de ejecucin de una o varias funciones, se utilizan los comandos tic y toc.
tic inicializa el contador de tiempo, por lo que los comandos subsiguientes sern tenidos en cuenta para el conteo de tiempo de ejecucin. toc detiene el contador de tiempo y devuelve el tiempo contado en segundos.

Por ejemplo:
tic; for i=1:1000000 end; toc;

devuelve:
elapsed_time = 2.1900

esto indica que el solo ciclo for, que cuenta desde 1 hasta 1000000 toma 2.19 segundos.
29
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

Limpieza de pantalla, variables y figuras Cuando aparece mucha informacin en la ventana de comandos, esta se puede limpiar mediante el comando clc. Se utiliza:
clc;

Ahora bien, este comando se confunde con alguna frecuencia con clear. Este comando se utiliza para limpiar las variables de la memoria de Matlab. Si se introduce solo:
clear;

elimina todas las variables. Si se utiliza acompaado del nombre de alguna variable:
clear a;

elimina de la memoria esa variable en particular, pero no las dems. Finalmente, para limpiar una figura, se utiliza comando clf:
clf;

este comando limpia lo que se haya trazado en la figura actual, mas no cierra la ventana. Clculo de las races de un polinomio Sea un polinomio de la forma: AN*XN + AN-1*XN-1 + ... + A1*X + A0 es posible calcular sus races mediante el comando roots, de la siguiente forma:
roots([AN AN-1 ... A1 A0])

Por ejemplo, para calcular las races de x2+2x+1, se introduce:


roots([1 2 1])

devuelve:
ans = -1 -1

que corresponden a:
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

30

x2+2x+1 = (x+1)(x+1) es decir, que x = -1 y x = -1. Variables en memoria A medida que se utilizan variables, estas se van almacenando en memoria. Generalmente cuando se utilizan muchas variables, el usuario va olvidando sus nombres. Para observar las variables que se encuentran en memoria, se utiliza el comando who:
who

Matlab reporta los nombres de las variables que se encuentran en memoria. Al utilizar el comando whos, se visualizan los nombres de las variables de una manera ms detallada. Por ejemplo, si se tiene una variable a con un nmero (por ejemplo 6) y una variable b con los caracteres gato, Matlab reportara:
whos
Name a b Size 1x1 1x4 Bytes 8 8 Class double array char array

Grand total is 5 elements using 16 bytes

Este reporte indica que cada variable ocupa 8 bytes en memoria; la variable a es de tamao 1x1, porque tiene un nmero, mientras que la variable b tiene un tamao de 1x4, ya que es solo una cadena de caracteres, que en este caso son cuatro; la clase de a es double, es decir, almacena nmeros, mientras que b es de clase char, porque almacena caracteres.

31

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

SONIDO EN MATLAB

En Matlab es posible leer archivos de sonido para tratarlos digitalmente y poder realizar diversos tipos de anlisis sobre ellos Los formatos de tipos de sonido soportados por Matlab son wav de Windows y au de Sun Microsystems. Generalidades de los sonidos Un sonido tpico se compone de los siguientes parmetros: Datos de amplitud Frecuencia de muestreo Bits de muestra

Los datos de amplitud conforman la informacin del sonido en tiempo, es decir, el nivel de volumen con el que fue almacenado o las variaciones del mismo. El sonido, tal como existe en el mundo real, es una onda cuya amplitud se caracteriza por infinitos puntos. Para poder leer digitalmente un sonido se debe tener en cuenta que un computador no puede manejar tal cantidad de informacin, por lo que es necesario tomar muestras de la onda cada tiempo. Si el tiempo con el que se toman las muestras de la seal de sonido se invierte, se obtiene la frecuencia de muestreo. Generalmente se manejan frecuencias de muestreo estndar: 8000, 11025, 22050 y 44100 Hz, las cuales se asocian a la calidad con que se oye el sonido a travs de algunos medios: Telfono, Radio, Cassette y Compact Disc respectivamente. Una vez se tienen las muestras cada cierto tiempo de la seal de onda, las amplitudes deben ser representadas de manera digital. Como los computadores manejan la informacin mediante bits (0's y 1's), los bits de muestra definen con cuntos bits se representarn los valores de amplitud obtenidos despus de tomar
Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana

32

las muestras. Por supuesto, mientras ms bits de muestra se tengan, mejor va a ser la resolucin de los valores de amplitud que se han tomado. Generalmente se utilizan estndares: 8, 16, 32 y 64 bits. Con 8 bits, por ejemplo, es posible manejar hasta 256 diferentes niveles de amplitud (28 = 256), con 16 hasta 65536 niveles de amplitud, y as sucesivamente. Archivos de sonido Una vez se conocen los conceptos de sonido, los archivos de sonido se leen mediante los comandos wavread y auread, utilizando la siguiente sintaxis:
[y, fs, bits] = wavread('Archivo.wav');

o
[y, fs, bits] = auread('Archivo.au');

Los parmetros asignados son:


y: Variable donde se almacenan los

valores de amplitud del sonido fs: Frecuencia con la cual se tomaron las muestras del sonido bits: Bits de muestra para representar las amplitudes

Por ejemplo,
[a,b,c] = wavread('gato.wav');

Si se observa el contenido de la variable a, se podr observar que, dependiendo de la longitud del archivo, ser la variable ms grande. La variable b contendr un solo valor numrico, al igual que la variable c. La ejecucin de un sonido se realiza con el comando sound:
sound(y, fs, bits);

Cuyos parmetros corresponden a los descritos para wavread y auread.

33

Gua Gua de Matlab Juan Ignacio Bueno G. / Pontificia Universidad Javeriana