Está en la página 1de 13

INGENIERÍA EN CONTROL Y AUTOMATIZACIÓN INDUSTRIAL

Asignatura:
CONTROL DIGITAL Practica 1
Docente:
Fabian León (Ing. Ph.D.)

Introducción a MATLAB
Resumen

El objetivo de la práctica es introducir una herramienta de software que se utilizará en este


curso y otros sucesivos: MATLAB (de MathWorks, www.mathworks.es). Aunque se trata de
una herramienta versátil y con muy distintas aplicaciones, estas sesiones están dirigidas al uso
de MATLAB para analizar y simular sistemas dinámicos y asistir en el diseño de sistemas de
control.

1. Introducción
Inicialmente pensado como herramienta de cálculo matemático, MATLAB se ha convertido en
una de las herramientas más utilizadas en diferentes áreas de conocimiento, que van desde la
ingeniería hasta el análisis estadístico o financiero.

Algunas de las aplicaciones más habituales de MATLAB son:

• Realización de cálculos matemáticos.

• Modelado y simulación.

• Desarrollo de algoritmos.

• Adquisición de datos.

• Análisis y procesado de datos y señales.

• Creación de gráficos científicos y de ingeniería.

• Desarrollo de aplicaciones.

MATLAB ha ido creciendo a base de incluir librerías especializadas en ramas de conocimiento


específicas: finanzas, tratamiento de señal, biología computacional, etc. En esta práctica nos
centraremos en el núcleo de MATLAB.
1.1 Componentes de MATLAB
MATLAB consta de cinco elementos fundamentales:

1. Entorno de desarrollo. Se trata de un conjunto de utilidades que permiten el uso de


funciones MATLAB y ficheros en general. Incluye el espacio de trabajo MATLAB y la
ventana de comandos.
2. La librería de funciones matemáticas MATLAB. Se trata de un amplio conjunto de
algoritmos que comprende funciones elementales (como la suma) y funciones más
sofisticadas (como la inversión de matrices, las transformadas de Fourier, o el método
Simplex).
3. Gráficos. MATLAB dispone de un conjunto de utilidades destinadas a visualizar
datos mediante gráficas y ofrece muchas posibilidades para ajustar su aspecto.
4. Lenguaje de programación. MATLAB incorpora un lenguaje de programación completo
con el que crear programas y funciones que hagan uso del resto de sus capacidades.
5. El interfaz de aplicación de MATLAB (API). Consiste en una librería que permite
escribir programas ejecutables independientes en C y otros lenguajes.

En esta práctica nos centraremos en el entorno de desarrollo, las librerías de funciones


matemáticas y las capacidades para generar gráficas.

Figura 1. Interfaz de usuario de MATLAB.

1.2. Puesta en marcha y organización de ventanas


MATLAB se puede arrancar haciendo doble clic sobre el icono del escritorio o a través del
menú Inicio. Se abrirá la ventana que presenta el aspecto de la figura 1. La figura muestra el
espacio de trabajo con la división en ventanas por defecto:

• La estructura del directorio donde nos encontramos (arriba a la izquierda)

• La historia de los comandos que se han tecleado (debajo a la izquierda)


• La ventana de edición de programas de MATLAB (arriba a la derecha)

• La línea de comandos, donde se teclean los comandos de MATLAB (abajo a la derecha)

1.3. Ayuda en línea


Si se ha instalado la ayuda, podemos acceder a ella en todo momento pulsando la tecla F1. La
documentación está organizada con un índice en forma de árbol y mediante enlaces. La ayuda
es muy útil, tanto a modo de introducción como de referencia para temas específicos. Si se
desea ver la ayuda específica asociada a un comando de MATLAB, se puede teclear “help
nombrecomando” en la línea de comandos de MATLAB.

2. Sintaxis básica en MATLAB


2.1. Creación y asignación de variables
Lo primero que hay que tener en cuenta es que en MATLAB todos los objetos son matrices. Por
ejemplo, un escalar es una matriz 1x1. Usando la línea de comandos podemos asignar un
nombre simbólico para identificar una matriz, por ejemplo:

» a=[10; 20; -15]; %Asignar

Esto es una asignación de un vector columna que llevará el nombre “a” (a su derecha aparece
un comentario, indicado con “%”, útiles solo cuando escribimos programas en MATLAB).

Los objetos pueden crearse en cualquier momento. Para ello basta con asignarles un valor
mediante una asignación, como en el ejemplo previo. Los identificadores —nombres—
empleados para designar cada matriz son de libre elección, pero no pueden comenzar con un
número ni contener espacios en blanco.

En las sentencias previas aparece el signo punto y coma (;) al final de cada comando. Este
símbolo sirve para separar unos comandos de otros cuando escribimos varios comandos en
una sola línea. Además, si escribimos un comando aislado (sin ’;’) y pulsamos ENTER, MATLAB
proporcionará siempre una salida en respuesta al comando:

» a= [10; 20; -15]


a = 10
20
−15

Sin embargo, si escribimos el comando seguido de ’;’, no se mostrará la respuesta en


pantalla. Cuando los comandos forman parte de un programa es conveniente emplear ’;’ para
evitar llenar la pantalla con información innecesaria.

Una vez creado un objeto de MATLAB, éste pasa a formar parte del espacio de trabajo
ocupando una porción la memoria (workspace). Puedes consultar el listado de la variables
existentes en el espacio de trabajo mediante el comando whos (ver ayuda). A veces
necesitaremos eliminar objetos que ya no se utilicen para liberar memoria; para ello se emplea
el comando clear (ver ayuda).
2.2. Sintaxis de vectores y matrices
Las matrices (y vectores como caso particular de las mismas) se expresan en MATLAB
empleando corchetes ([ ]) y separando las filas con espacio o coma (,) y las columnas con punto
y coma (;). Empleando estos comandos se pueden crear matrices del siguiente modo:

» mat=[1 2 3; 4 5 6; 7 8 9]
mat = 1 2 3
456
789
Cuando se trata de un escalar, podemos prescindir de los corchetes:

» rad=3.1415;

Los elementos de las matrices pueden ser reales o complejos. En este último caso se emplea la
letra i para √-1. Como ejemplo podemos definir el vector fila v = [2 + 3i, -5i, 3]:

» v=[2+3i, -5i, 3]

El acceso a elementos de una matriz previamente definida puede realizarse especificando la


fila y columna del elemento que nos interesa entre paréntesis.

» mat(2,3) % Acceso al elemento (2,3) de la matriz mat

Dentro de los paréntesis podemos usar variables y operaciones más complejas.

2.3. Operaciones de rango


En MATLAB existe un operador muy útil que la mayoría de lenguajes de programación no
incorporan, el operador de rango (:). Supongamos que queremos crear un vector con todos los
números enteros entre 1 y 10, bastará con usar el operador con la expresión:

» a=1:10
a = 1 2 3 4 5 6 7 8 9 10

La sintaxis general del operador de rango es: valor mínimo:incremento:valor máximo. Así,
para generar todos los números entre 1 y 2 en incrementos de 0.2 escribiremos:

» a=1:0.2:2
a = 1.0000 1.2000 1.4000 1.6000 1.8000 2.0000

Una segunda aplicación del operador de rango es el acceso a submatrices o subvectores.


Supongamos que hemos definido la matriz mat anteriormente mencionada:

» mat=[1 2 3; 4 5 6; 7 8 9];

Para acceder a la submatriz comprendida entre los elementos (2,1) y (3,2) bastará con escribir:

» mat(2:3,1:2)
ans= 4 5 7 8
Se puede usar el término end para indicar que el rango se extiende hasta el último elemento
del vector o matriz:
» a(4:end)

Para obtener los 3 últimos elementos del vector a podemos usar el siguiente comando:

» a((length(a)-2):end)

2.4. Operaciones básicas con MATLAB


Una vez definidos los objetos con sus identificadores, podemos realizar operaciones
aritméticas entre ellos. Para las operaciones vectoriales y matriciales, MATLAB verificará la
coherencia de las dimensiones de los operandos antes de dar un resultado. Como ejemplo
podemos definir dos vectores v1y v2y calcular un tercer vector v3a partir de ellos:

» v1=[2+3i, -5i, 3];


» v2= [0, 1, 7];
» v3=v1+2*v2+[1, 1, 1]

La figura 2 ilustra las operaciones aritméticas y lógicas básicas que se pueden realizar en
MATLAB. Estas operaciones se aplican indistintamente a escalares, vectores y matrices. En Las
más usadas son: +, -, *. (Multiplicación de dos vectores punto a punto), /. (División de vectores
punto a punto). Si no se incluye el punto en * ó /, MATLAB realiza la operación de manera
matricial.

Es posible usar MATLAB directamente como una calculadora, tecleando las expresiones en
línea de comandos para obtener el resultado de las mismas, pero también se pueden agrupar
las operaciones:

» 12*24.8 % A modo de calculadora


ans = 297.6000
» a=1, b=5, c=0.5
» x1=-b+sqrt(b’2-4*a*c)/(2*a); % Agrupando operaciones

Figura 2. Operaciones aritméticas y lógicas en MATLAB.


2.5. Uso de funciones matemáticas
Muchas operaciones que se realizan con MATLAB son llamadas a funciones. Las funciones
procesan información, por lo que poseen datos de entrada y de salida (ambos pueden ser
matrices). Los datos de entrada se especifican entre paréntesis, y si son varios, separados por
comas. Por ejemplo, la siguiente función calcula la raíz cuadrada de su único valor de entrada,
el vector fila [4, 2]:

» sqrt([4 2])
ans= 2.0000 1.4142

Las figuras 3, 4, 5 y 6 muestran ejemplos de funciones disponibles en MATLAB. Las funciones


pueden ser parte del paquete básico de MATLAB, pertenecer a una librería o haber sido
escritas por el usuario (este último caso lo veremos más adelante).

Figura 3. Funciones elementales de MATLAB: Exponenciales.

Figura 4. Funciones elementales de MATLAB: Ajuste y Redondeo.

Figura 5. Funciones elementales de MATLAB: Operaciones Matriciales.


Figura 6. Funciones elementales de MATLAB: Trigonometría.

2.6. Almacenamiento en ficheros


MATLAB permite almacenar en el disco las variables del espacio de trabajo. De este modo es
posible parar una sesión de trabajo o guardar las variables resultado en un archivo. La orden
más común para almacenar datos es save (ver detalles en la figura 7). Para recuperar las
variables almacenadas previamente en un archivo usamos la función load (ver detalles en la
figura 8).

Figura 7. Funciones para almacenar la información en ficheros.


Figura 8. Funciones para recuperar la información almacenada en ficheros.

3. Programando en MATLAB: uso de scripts


Hasta ahora hemos usado MATLAB introduciendo los comandos uno a uno en la línea de
comandos, pero es mucho más práctico agrupar la secuencia de comandos en un programa o
“script” de MATLAB. Si una secuencia de comandos se almacena en un archivo de texto
(MATLAB script file o M-file) con la extensión “.m”, invocar el nombre del archivo desde la
línea de comandos tiene el mismo efecto que introducir de forma secuencial toda los
comandos incluidos en el archivo. Para facilitar la creación y depuración de estos
programas, controlando la corrección de la sintaxis, MATLAB dispone de un editor de texto
propio (ver sección 1).

La ventaja de usar “scripts” es que nos permiten almacenar la secuencia de comandos que
hemos usado en nuestros cálculos, pudiendo replicarlos cuando queramos. Además, mediante
estos programas o “scripts” podemos explotar el lenguaje de programación incluido en
MATLAB para la realización de bucles (for, while), ejecuciones condicionales (if, switch),
creación de funciones, etc. La combinación de este lenguaje con las funciones matemáticas y
de representación gráfica es lo que hace de MATLAB una herramienta tan potente y flexible.

4. Gráficos en MATLAB
Visualizar la evolución temporal de sus señales es útil para estudiar el comportamiento
dinámico de un sistema. La operación más habitual es representar la señal de salida del
sistema frente a una señal de entrada. En este apartado se muestra como representar
gráficamente una señal de la cual se conoce su expresión en función del tiempo. Al disponer
de dicha expresión, se puede obtener una representación de la señal como un vector de
puntos, cada uno de los cuales corresponde al valor de la señal en un determinado instante de
tiempo. Cuanto mayor sea el número de puntos obtenidos para un mismo tramo de la
evolución temporal de la señal, mejor será la representación de la señal continua. El comando
básico para generar gráficos es el comando plot.

Vamos a representar la señal sinusoidal cuya expresión temporal es la siguiente:

y(t)=3⋅sen(5⋅t), parat≥0
La secuencia de comandos siguiente permite obtener un vector de muestras de la señal
sinusoidal correspondiente a los 10 primeros segundos de su evolución temporal, tomando
una muestra de la señal cada 0.01 segundos:

» T=[0:0.01:10]; % Vector de tiempos


» Y=3*sin(5*T); % Señal sinusoidal

la variable resultante Y será un vector de 1001 elementos, de forma que el elemento que
ocupa la posición i (esto es, Y(i)) corresponde al instante de tiempo (i-1)*0.01. Las dimensiones
de los vectores generados pueden comprobarse con el comando whos. A partir de los datos
en el vector Y puedes comprobar que el valor de la señal en t=7.3 segundos es -2.795. El vector
Y es una representación numérica de la señal sinusoidal, a partir de la cual podemos obtener
una representación gráfica de la señal mediante el comando plot:

» plot(T,Y);

El primer vector indica el eje horizontal de la gráfica, que a menudo será el vector de tiempos.
El segundo vector corresponde al eje vertical y contiene la información de la señal a
representar. Una vez obtenida la representación gráfica se puede emplear el zoom para
analizar con mayor detalle la señal representada. Comprueba, por ejemplo, que el valor de la
señal en t=7.3 segundos coincide con el obtenido a partir del vector.

El comando plot también permite especificar distintos tipos de trazados y colores. Consulta la
ayuda (help plot) para más información. En la figura 9 se enumeran otros comandos
relacionados con la representación gráfica de señales en MATLAB. Consulta su ayuda para
conocer su sintaxis.

Figura 9. Comandos de representación de gráficos

5. Escribir funciones
Hemos visto que muchas operaciones en MATLAB son llamadas a funciones, y que la potencia
y versatilidad de MATLAB reside en que ofrece un amplio abanico de éstas (desde funciones
matemáticas básicas hasta funciones muy especializadas de cálculo estadístico, tratamiento de
señal, matemática financiera, etc). Además MATLAB permite al usuario programas sus propias
funciones.
Para crear una función en MATLAB tenemos que escribir la función en un script M-file. El
nombre del archivo será el nombre de la función, y el script tiene que incluir una cabecera
específica en su primera línea. La sintaxis de esa primera línea es la que sigue:

function [out1, out2, ...] = funname(in1, in2, ...)

Esta cabecera define una función llamada funname que acepta entradas in1, in2, etc. y
devuelve las salidas out1, out2, etc. El nombre de la función debe coincidir con el nombre del
M-file.

Un ejemplo de una función es el siguiente:

function [mean,stdev] = stat(x)


n = length(x);
mean = sum(x)/n;
stdev = sqrt(sum((x-mean).^2/n));

Esta función toma un vector como entrada y devuelve la media de sus valores y su desviación
típica. Una vez definida la función y el archivo stat.m, podemos usarla desde la consola de
comandos, desde un script, o desde otra función, como si se tratase de una función propia de
MATLAB:
» x = [1 2 3 4 8 3 1 3] % Definimos un vector cualquiera
» [a,b]=stat(x) % Calculamos su media y desviación

Crear funciones propias permite compartirlas y reutilizar código de forma cómoda. (Cuando
los programas crecen en tamaño y complejidad, dividirlos en subrutinas es necesario para
mantener su legibilidad y que puedan depurarse errores.)
Actividad Práctica 1
GENERACIÓN Y GRAFICACIÓN DE SEÑALES DISCRETAS

OBJETIVOS
1. Comprender como se simulan señales discretas en el tiempo usando MATLAB®

2. Generar señales exponenciales, sinusoidales, cuadrada y escalón, y visualizarlas en forma


discreta.

3. Revisar las diferentes modalidades que existen para graficar una señal.

EXPERIMENTO
Genere un archivo .m nuevo. Escriba cada instrucción y ejecútela para ver su funcionamiento.
Al terminar la práctica podrá ejecutar todas las instrucciones y mostrar los resultados a su
profesor. Se le sugiere separe zonas de ejecución usando la instrucción pause.

SEÑALES DISCRETAS
Antes de continuar borre todos los valores que se encuentran almacenados en memoria:

>>clear

Esta instrucción también puede emplearse para borrar una sola variable. Por ejemplo:

>>clear w

o más de una variable:

>>clear x, v1, v2

Para generar una señal discreta en el tiempo x[n], primero se debe definir un vector índice
temporal 'n' apropiado. Por ejemplo, para producir una curva exponencial decreciente
x[n]=0.9n en el intervalo escriba:

>>n=[-10:10]

La curva exponencial decreciente x[n] se obtiene escribiendo:

>>x=(0.9).^n;

Donde '.^ ' representa la operación de elevar 0.9 a cada uno de los elementos de n. A
continuación grafíquela.

>>stem(n,x)

Obtenga una exponencial creciente:

>>w=(1.11).^n;

Grafíquela:

>>stem(n,w)
Genere y grafique la señal par x3[n]=0.9|n|

>>x3=(0.9).^abs(n);
>>stem(n,x3);

Calcule y grafique la sinusoidal compleja y[n]=ejπn/5-π/3.

>>y=exp(j*pi*n/5-pi/3);
>>stem(n,y);

Genere dos sinusoidales reales.

>>v1=cos(pi*n/5-pi/3);
>>v2=sin(pi*n/5+pi/4);

Grafíquelas usando el comendo subplot en una nueva figura:

>>figure
>>subplot 211
>>stem(n,v1);
>>subplot 212
>>stem(n,v2);

GENERACIÓN DE ESCALÓN UNITARIO DISCRETO


>>x = ones (1,11); % define once valores de 1's
>>axis ([ 0 10 0 2]); % define valores de ejes
>>plot (x,'ro') % grafica círculos de color rojo
>>xlabel ('k') % asigna rotulo al eje x
>>ylabel ('x(k)') % asigna rotulo al eje y
>>title (‘ESCALON UNITARIO DISCRETO’)

GENERACIÓN DE LA RAMPA UNITARIA DISCRETA


>>k = 0:10; % define valores de k
>>x = k; % función rampa para x
>>axis([0 10 0 10]); % define ejes
>>grid % rejilla para grafica
>>plot(k, x,'ro') % grafica x en función de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k)'); % rotulo para eje y
>>title('RAMPA UNITARIA DISCRETA')

GENERACION DE LA FUNCION POTENCIAL x(k) = 2k


>>k=linspace(0,5,20); % define valores de k
>>x=2.^ k; % función potencial
>>grid % rejilla para grafica
>>plot(k, x,'ro') % grafica x en función de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k)'); % rotulo para eje y
>>title('POTENCIAL DISCRETA')

GENERACION DE LA FUNCION EXPONENCIAL x(k) =e-2k


>>k = linspace (1,5,20); % define valores de k con espaciamiento lineal
>>x = exp(-2*k); % función exponencial
>>grid % rejilla para grafica
>>plot(k, x,'bo') % grafica x en función de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k)'); % rotulo para eje y
>>title('EXPONENCIAL DISCRETA')

GENERACION DE LA FUNCION SENO: x(k) = sen(wkT)


>>k = linspace(1,20); % define valores de k con espaciamiento lineal
>>x = sin(k); % función exponencial
>>grid % rejilla para grafica
>>plot(k, x,'bo') % grafica x en función de k
>>xlabel('k'); % rotulo para eje x
>>ylabel('x(k) =seno(k)'); % rotulo para eje y
>>title('SENOIDAL DISCRETA')

Ejercicios
Calcule y grafique las siguientes señales

a) y[n]=ejπn/5-π/3
b) y[n]= -ejπn/5-π/3- cos(π*n/5-π/3)
c) y[n]= (ejπn/5-π/3- cos(π*n/5-π/3))/( sin(π*n/5+π/4))

También podría gustarte