Tutorial MatLab

33
Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 1 PRESENTACIÓN Este sitio web esta dedicado a la presentación de un tutorial básico acerca de el programa MATLAB y su uso en los temas concernientes al Análisis de Señales. Por cuestiones de navegación el sitio web ha sido diseñado usando Marcos (Frames), Espera el autor, los lectores conocedores de diseño web no se molesten por hacer uso de este método. El tutorial cuenta con un menú de navegación en la parte Izquierda que permitirá acceder fácilmete a cualquier tema del tutorial.

Transcript of Tutorial MatLab

Page 1: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 1

PRESENTACIÓN

Este sitio web esta dedicado a la presentación de un tutorial básico acerca de el programa

MATLAB y su uso en los temas concernientes al Análisis de Señales. Por cuestiones de

navegación el sitio web ha sido diseñado usando Marcos (Frames), Espera el autor, los

lectores conocedores de diseño web no se molesten por hacer uso de este método. El

tutorial cuenta con un menú de navegación en la parte Izquierda que permitirá acceder

fácilmete a cualquier tema del tutorial.

Page 2: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 2

Que es MATLAB?

Matlab® es un lenguaje de alto funcionamiento para computación técnica, Este integra

computación, visualización, y programación, en un entorno fácil de usar donde los

problemas y las soluciones son expresados en la más familiar notación matemática. Los

usos más familiares de Matlab son:

• Matemática y Computación

• Desarrollo de algoritmos

• Modelamiento , simulación y prototipado

• Análisis de datos, exploración y visualización

• Graficas científicas e ingenieriles

• Desarrollo de aplicaciones, incluyendo construcción de interfaces graficas de usuario

MATLAB es un sistema interactivo cuyo elemento básico de almacenamiento de

información es la matriz, que tiene una característica fundamental y es que no necesita

dimensionamiento. Esto le permite resolver varios problemas de computación técnica

(especialmente aquellos que tienen formulaciones matriciales y vectoriales) en una fracción

de tiempo similar al que se gastaría cuando se escribe un programa en un lenguaje no

interactivo como C o FORTRAN

El nombre MATLAB simboliza Matriz Laboratorio o Laboratorio de Matrices. Matlab fue

originalmente escrito para proveer fácil acceso el softrware de matrices desarrollado por los

proyectos LINPACK y EISPACK, hoy, los mores de matlab incorporan las librerías

LINPACK y BLAS,

Matlab se ha desarrollado sobre un periodo de años con entradas provenientes de muchos

usuarios, en los entornos universitarios, matlab es la herramienta instructiva estándar para

cursos avanzados e introductorios en matemáticas, ingeniería y ciencia. En la industria

Matlab es la herramienta escogida para investigación de alta productividad, desarrollo y

análisis.

Matlab presenta una familia de soluciones a aplicaciones específicas de acoplamiento

rápido llamadas ToolBoxes. Los toolboxes son colecciones muy comprensibles de

funciones MATLAB, o archivos de matlab (M-files) que extienden el entorno de MATLAB

para resolver clases particulares de problemas, Algunas áreas en las cuales existen

toolboxes disponibles son:

• Procesamiento de señales

• Sistemas de control

• Redes neuronales

• Lógica difusa

• Wavelets

• Simulación

Page 3: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 3

El Sistema MATLAB

El sistema Matlab consiste de cinco partes principales:

Entorno de desarrollo:

Es el conjunto herramientas y módulos que ayudan a usar las funciones y archivos de

matlab. Muchas de esas herramientas son interfaces graficas de usuario. Esto incluye, el

escritorio de matlab, la ventana de comandos, el historial de comandos, un editor y un

depurador, navegadores para revisión de la ayuda, el espacio de trabajo o workspace y los

archivos.

La librería de funciones matemáticas: esta es una gran colección de algoritmos

computacionales que van desde funciones eleménteles como la suma, la función seno y

coseno, y la aritmética de números complejos hasta funciones mucho mas sofisticadas

como inversas de matrices, autovalores de matrices, funciones de bessel, y transformadas

radiadas de Fourier.

El lenguaje MATLAB:

Es un lenguaje de alto nivel para matrices con sentencias para control de flujo, creación de

funciones y estructuras de datos, funciones de entrada/salida y algunas características de

programación orientada por objetos, Este lenguaje permite tanto la programación a pequeña

escala para la creación rápida de programas, como programación a larga escala para la

realización de aplicaciones complejas.

Gráficas:

Matlab cuenta con módulos extensivos para la visualización de vectores y matrices en

forma de graficas, así como para realizar comentarios e impresión de estas gráficas. Matlab

incluye funciones de alto nivel para la visualización de datos en dos y tres dimensiones,

procesamiento de imágenes, animación, y creación de gráficos de presentación. Matlab

también incluye funciones de bajo nivel que permiten personalizar completamente la

apariencia de los gráficos así como construir interfaces graficas de usuario para las

aplicaciones.

Interfaces Externas:

Las interfaces externas son un conjunto de librerías que permiten la programación en

lenguaje C y FORTRAN de programas que interactúen con matlab. Estas librerías proveen

facilidades para realizar llamadas de rutinas desde Matlab.

Page 4: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 4

Ayuda para MATLAB

Matlab provee documentación extensiva, tanto en formato impreso como en línea para

ayudar a los usuarios a aprender todas sus características. La ayuda online de Matlab

provee información orientada a tareas e información de referencia acerca de todas las

características de Matlab.

Para ver la documentación online de Matlab seleccione la opción “Ayuda de MatLab” del

menú Ayuda en la barra de menús de Matlab.

EXPRESIONES

Como la mayoría de lenguajes de programación, Matlab soporta la creación de expresiones

matemáticas, pero en contraste con los lenguajes de programación, las expresiones en

matlab tienen la capacidad de involucrar matrices y operaciones entre ellas. Las

expresiones se construyen con la combinación de varios bloques básicos los cuales son:

Números

Variables

Operadores

Funciones

NUMEROS

Matlab usa para la representación de los números, notación decimal convencional, con un

punto de separación decimal opcional y la precedencia de un signo más (+) o menos (-). La

notación científica en Matlab hace uso de la letra e para especificar un factor de escala de

una potencia de 10.

Existen tres tipos de números en Matlab:

Números Enteros

Números Reales

Números complejos

Los números enteros son ingresados a Matlab sin el punto de separación decimal. A

continuación se muestra un ejemplo:

>> num_entero = 10

>> num_entero =

10

Page 5: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 5

Cuando el valor que se ingresa, esta acompañado por el punto decimal, este es almacenado

cono un numero real. Por ejemplo:

>> num_real = 10.01

>> num_real =

10.0100

Los números complejos en Matlab son representados en la forma rectangular. De manera

que todo numero tienen una parte real y una parte imaginaria. La unidad imaginaria en

Matlab se denota con los caracteres “i” o “j”. Por ejemplo.

>>i

Ans=0+1.0000i

Todos los números son almacenados internamente usando el formato long especificado por

el estándar de punto flotante de la IEEE. Los números en punto flotante tienen una

precisión finita de 16 dígitos decimales significativos y un rango entre 10-308

y 10+308

La manera en que son almacenados estos números por la maquina en que se esta usando el

sistema matlab esta fuera del alcance de este tutorial, sin embargo puede hacerse referencia

a la documentación técnica disponible en el sitio Web de Matlab www.matlab.com.

VARIABLES

Matlab no requiere ninguna declaración de tipo o de dimensión para crear las variables.

Cuando matlab encuentra un nombre nuevo de variable, automáticamente crea la variable y

separa la cantidad apropiada de memoria para realizar el almacenamiento de la variable. Si

la variable ya existe, Matlab cambia su contenido y si es necesario separa nuevo espacio de

memoria para su almacenamiento. Por ejemplo la siguiente expresión

num_estudiantes = 25

Crea una matriz de 1 fila x 1 columna, llamada “num_estudiantes” y almacena el valor de

25 en la única posición existente.

Los nombres de las variables consisten de una letra seguida por cualquier número de letras

dígitos ó guiones Bajos ( _ ). Matlab usa únicamente los primeros 31 caracteres del nombre

de una variable. Los nombres de las variables en Matlab son sensibles a las mayúsculas y

minúsculas, de esta manera una variable llamada num tiene un espacio de almacenamiento

diferente a una variable llamada Num.

Page 6: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 6

Existen dos constantes en Matlab las cuales denotan los números reales más pequeño y más

grande que se puede usar, dichas constantes son realmin y relamas respectivamente.

Para observar los valores de estas tan solo es necesario escribir sus nombres el la ventana

de comandos de la siguiente manera.

>> realmin

ans = 2.2251e-308

Matlab posee tres constantes mas para la representación de cantidades que no son

consideradas números como tal. Estas cantidades son:

Infinito negativo

Infinito Positivo

Cantidades indefinidas.

Y las respectivas constantes son:

-Inf

Inf

NaN

Las dos primeras variables de la lista son las representaciones IEEE para el infinito

positivo y negativo. La cantidad infinito se genera por un desborde en las operaciones o por

una división por cero. La variable NaN, es una abreviación de la frase en ingles “Not a

Number”, que significa “No numero”. Esta cantidad es obtenida como resultado de

operaciones aritméticas indefinidas tales como ó ∞ - ∞.

OPERACIONES ARITMETICAS

La lista de operaciones básicas aritméticas en matlab incluye se describe en la siguiente

lista.

Operación Símbolo

Adición +

Substracción -

Multiplicación *

División / ó \

Exponenciación ^

Complejo Conjugado ‘

Page 7: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 7

Matlab posee dos operadores de división:

División Derecha /

División Izquierda \

El resultado que producen dichos operadores no son los mismos, por ejemplo:

>> div_derecha = 47/3

div_derecha =

15.6667

>>div_izq = 47\3

div_izq=

0.0638

FUNCIONES

Matlab provee un gran numero de funciones matemáticas elementales, como Valor

Absoluto, Raíz Cuadrada, Seno, Coseno, Etc. El control de resultados en matlab se realiza

con seguridad, por ejemplo, al calcular la raíz cuadrada o el logaritmo de un número

negativo, no resulta la operación en un error como ocurre en las calculadoras

convencionales o sistemas clásicos de cálculos. El resultado de este tipo de operaciones es

controlado automáticamente por matlab y como resultado se obtiene el número complejo

que se obtiene al realizar la operación teóricamente. Matlab también provee muchas de las

más avanzadas funciones matemáticas, como las funciones de Bessel y funciones Gamma.

Para obtener una lista de las funciones elementales en matlab se debe escribir el siguiente

comando:

>> help elfun

Para obtener la lista de las funciones más avanzadas y de las funciones disponibles para

matrices se usan los siguientes comandos:

>>help specfun

>> help elmat

Algunas de las funciones, como Raíz Cuadrada, y Seno, son llamadas funciones Built In.

Estas funciones son parte del núcleo principal de Matlab de manera que están programadas

para funcionar de manera muy eficiente. Por lo tanto el acceso a la implementación

computacional de estas funciones no esta disponible y su funcionamiento no puede ser

modificado. Otras funciones como Gamma o Seno Hiperbólico Inverso, están

implementadas con el lenguaje de programación de Matlab en archivos llamados M-Files, a

los cuales se puede acceder completamente, por lo tanto es posible ver el código fuente que

Page 8: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 8

implementa dichas funciones y también es posible realizar modificaciones sobre el código

fuente para de esta manera cambiar la implementación computacional de la función.

EJEMPLOS DE EXPRESIONES

Los siguientes comandos son ejemplos de expresiones y sus valores de resultado.

Expresión Descripción

rho = (1+sqrt(5))/2

rho =

1.6180

Se crea la variable de nombre rho, a la

cual se asigna el valor del resultado de la

siguiente expresión matemática

a = abs(3+4i)

a =

5

Se crea una variable de nombre a, a la

cual se asigna el valor absoluto del

numero complejo 3 + 4 i. Como se puede

la función valor absoluto aplicada a un

numero complejo da como resultado la

Norma de dicho numero

z = sqrt(besselk(4/3,rho-i))

z =

0.3730+ 0.3214i

Calculo de otra variable haciendo uso de

las funciones avanzadas de Bessel

gran_num = exp(log(realmax))

gran_num =

1.7977e+308

Se calcula la siguiente expresión, lo cual

genera un número muy grande como

resultado.

muy_grande = pi*gran_num

muy_grande =

Inf

El número anterior, multiplicado por el

número π da como resultado un número

que es mayor que la constante relmax lo

cual genera un desborde y la cantidad

resultante es Infinito.

El objeto básico usado en MATLAB es una matriz numérica con la posibilidad de

almacenar números complejos. Los datos encontrados en el estudio de señales y sistemas

son siempre, muy bien representados en forma de matrices. En esta sección se usará

MATLAB para la generación de señales elementales como lo son las señales

exponenciales, senoidales, etc.

El ToolBox de procesamiento de señales de MATLAB posee una larga variedad de

funciones para la generación de señales, estas señales requieren de una representación

vectorial de la variable tiempo, de manera continua o discreta. Para realizar una simulación

Page 9: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 9

de un intervalo continuo, se usa un vector de valores discretos con un intervalo de muestreo

muy pequeño.

El siguiente comando genera un vector llamado t de valores que representan la variable

tiempo, con un intervalo de muestreo de 1ms entre 0 y 1seg.

t = 0:0.001:1;

Para generar un vector llamado n de valores que representan la variable tiempo para una

señal discreta en el intervalo de 0 a 1000, se puede usar el siguiente comando.

n = 0:1000;

Después de creado el vector que representa la variable tiempo, es posible iniciar el

desarrollo de alguna señal de interés.

En MATLAB una señal discreta en el tiempo se representa exactamente, porque los valores

de la señal son representados como los elementos de un vector. Sin embargo las señales de

tiempo continuo en MATLAB son tan solo aproximaciones. La aproximación consiste de

un vector cuyos elementos son muestras de la verdadera señal de tiempo continuo. Cuando

se usa esta técnica para la representación de señales continuas es importante escoger el

intervalo de muestreo lo suficientemente pequeño para asegurar que las muestras capturan

todos los detalles de la señal.

SEÑALES PERIODICAS

La generación de señales periódicas tales como ondas cuadradas y triangulares es una

actividad muy fácil de realizar en MATLAB. Consideremos primero la generación de una

onda cuadrada de amplitud A, frecuencia fundamental w (medida en radianes por segundo)

y ciclo útil rho. Recordemos que el ciclo útil es la fracción de cada periodo en donde la

señal es positiva.

Para generar dicha señal se puede usar el siguiente conjunto de comandos:

>> A = 1;

>> w = 10 * pi;

>> rho = 0.5;

>> t = 0:0.001:1;

>> sq = A*square(w*t+rho);

>> plot(t,sq);

Page 10: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 10

El resultado se puede observar en la siguiente gráfica:

En la segunda línea, pi es una función interna de matlab que calcula el número más cercano

a la constante PI en formato de coma flotante. El último comando es usado para ver la señal

generada. El comando plot dibuja líneas conectando los valores sucesivos de la señal y así

da la apariencia de una señal en tiempo continuo.

Consideremos ahora la generación de una onda triangular de amplitud A, frecuencia

fundamental w y ancho Wdt . El periodo de la onda triangular será T con el máximo valor

de la señal ocurriendo en t = WT . El comando básico para generar esta señal es:

A * sawtooth(w * t + Wdt)

El listado complete de comandos sería:

>> A = 1;

>> w = 10 * pi;

>> Wdt = 0.5;

>> t = 0:0.001:1;

>> tri = A*sawtooth(w * t + Wdt);

>> plot(t,tri);

Page 11: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 11

El resultado se puede visualizar en la siguiente gráfica.

Como se menciono anteriormente, una señal generada en MATLAB es inherentemente de

naturaleza discreta. Para visualizar una señal en tiempo discreto se puede hacer uso del

comando stem. Específicamente stem( n , x ), bosqueja los datos contenidos en el vector x

como una señal de tiempo discreto con los valores de tiempo definidos por el vector n. Los

vectores n y x deben tener dimensiones compatibles, es decir deben tener el mismo número

de elementos. El siguiente ejemplo genera una señal cuadrada en tiempo discreto de

amplitud igual a la unidad, ciclo útil igual a 50% y una frecuencia angular igual a :

>> A = 1;

>> omega = pi / 4;

>> rho = 0.5;

>>n = -10:10;

>>x = A*square(omega*n +rho);

>>stem(n,x);

El resultado se puede ver en la siguiente gráfica:

Page 12: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 12

SEÑALES EXPONENCIALES

Las señales exponenciales se pueden clasificar según su comportamiento en decrecientes y

crecientes. El comando en MATLAB para generar una señal exponencial decreciente es:

B * exp(-a*t);

Para generar una señal exponencial creciente se usa el comando:

B * exp( a * t);

En ambos casos el parámetro a es positivo. El siguiente ejemplo muestra la generación de

una señal exponencial decreciente:

>> B = 5;

>> a = 6;

>> t = 0:0.001:1;

>> x = B * exp( -a * t ); % señal exponencial decreciente.

>> plot( t, x );

Siendo el resultado como sigue:

Page 13: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 13

Para la generación de una señal exponencial creciente se puede usar el siguiente ejemplo:

>> B = 1;

>> a = 5;

>> t = 0:0.001:1;

>> x = B * exp( a * t );

>> plot( t, x ) ;

Existen casos particulares en los que la base de la operación de exponenciación no es el

número irracional e, puede ser cualquier otro número. Para estos casos se usa una notación

diferente la cual esta basada en la utilización del símbolo ^. Observando el ejemplo que

sigue se nota que r es un número mientras que n es un vector, por lo tanto se usa una

combinación del símbolo exponenciación con el carácter “.” Lo cual significa que a cada

valor del vector le será aplicada la función.

El siguiente ejemplo genera la señal:

>> B = 1;

>> r = 0.85;

>> n = -10:10;

>> x = B * r .^ n;

>> stem( n , x );

SEÑALES SENOISOIDALES.

MATLAB también contiene funciones trigonométricas que pueden ser usadas para generar

señales senosoidales. Una señal coseno de amplitud A, frecuencia w0 (medida en radianes

por segundo) y ángulo de fase phi (en radianes) se obtiene usando el comando:

A * cos ( w0 * t + phi);

Page 14: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 14

Alternativamente se puede usar la función seno para generar una señal senosoidal usando el

siguiente comando:

A * sin ( w0 * t + phi );

En seguida se muestran ejemplos para cada uno de las señales respectivamente:

>> A = 4;

>> w0= 20 * pi;

>> phi = pi / 6;

>> t = 0:0.001:1;

>> coseno = A * cos( w0 * t + phi);

>> plot(t,coseno) ;

>> A = 0.5;

>> w0 = 20 * pi;

>> phi = pi / 2;

>> t = 0:0.001:1;

>> seno = A * sin( w0 * t + phi);

>> plot(t,seno);

SEÑALES SENOIDALES CON AMORTIGUACIÓN EXPONENCIAL.

En todos los comandos de generación de señales descritos anteriormente, se ha generado la

amplitud deseada de las señales, realizando una multiplicación por un escalar A. Esta

operación se describe usando el símbolo asterisco “*”. Supongamos que se desea

multiplicar una señal senosoidal por una señal exponencial para producir como resultado

una señal con amortiguación exponencial. La siguiente ecuación describe mejor el supuesto

caso:

Page 15: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 15

Debido a que tanto la componente senosoidal de la señal como la exponencial son vectores,

el procedimiento para la generación de la señal final requiere de una multiplicación de dos

vectores elemento por elemento. En MATLAB este tipo de multiplicación se representa

usando el símbolo punto (.) seguido por el símbolo asterisco (*). Así el comando para

generar la ecuación anterior sería;

A * sin( w0 * t + phi) .* exp ( -a * t);

Y un ejemplo completo sería:

>> A = 60;

>> w0 = 20 * pi;

>> phi = 0;

>> a = 6;

>> expsen = A * sin( w0 * t + phi) .* exp ( -a * t);

>>plot(t,expsen);

Dando como resultado la siguiente gráfica:

La versión discreta de la misma señal se puede obtener haciendo uso de los comandos

mostrados anteriormente de la siguiente manera:

Page 16: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 16

>> A = 10;

>> a = -0.1;

>> w0 = 2 * pi / 12;

>> phi = 0;

>> n = -10 : 10;

>> x = A * sin( w0 * n + phi);

>> y = exp( a * n);

>> z = x .* y;

>> tem(n,z)

SEÑALES IMPULSO, PASO Y RAMPA.

En MATLAB, el comando ones(M, N) genera una matriz de unos de tamaño M x N, y el

comando zeros(M, N) es una matriz de ceros del mismo tamaño. Se puede hacer uso de

estas dos matrices para generar dos señales comúnmente usadas.

Señal Paso:

Una señal paso de amplitud uno, puede ser generada con el siguiente comando.

U = [zeros(1, 10), ones(1, 11)];

Para la versión continua creamos un vector que represente el tiempo el cual tenga muestras

de un intervalo separados por valores muy pequeños mientras que para la representación de

esta señal en tiempo discreto creamos un vector que represente el tiempo el cual debe tener

valores separados por una unidad.

Los comandos y los resultados para ambos tipos de señal se muestran a continuación:

>> u=[zeros(1,10),ones(1,11);

>> t=-1:0.1:1;

>> plot(t,u)

Page 17: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 17

>> u=[zeros(1,10), ones(1,11)];

>> n=-10:10;

>> stem(n,u)

De los comandos anteriores es de notar que para poder usar las funciones plot() y stem(), es

requisito que los vectores (t y u) ó (n y u) tengan iguales dimensiones. Por esta razón el

vector u se forma como una composición de diez ceros y 11 unos, debido a que los arreglos

t y n, tienen dimensión 21 dado que incluyen un elemento central el cual es el número cero.

Para probar este hecho, se puede hacer uso de otra función de MATLAB llamada size()

que devuelve como resultado un vector con las dimensiones de la matriz que se le pasa

como parámetro así:

>> size(n)

ans =

1 21

>> size(u)

ans =

1 21

>> size(t)

ans =

1 21

Señal Impulso:

La versión discreta de la señal impulso se puede también generar con ayuda de las

funciones zeros() y ones(), realizando una composición como sigue:

>> delta = [ zeros( 1 ,10 ), 1 , zeros( 1 ,10 ) ];

>> n = -10:10;

>> stem(n,delta);

Page 18: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 18

Una versión continua podría evidentemente generarse usando la misma técnica que se usó

en el apartado anterior, sin embargo es necesario aumentar el número de muestras a fin de

maximizar la pendiente de la señal, en seguida se verán dos ejemplos con diferentes

número de muestras en el mismo intervalo de tiempo, como se puede ver la

correspondencia entre las dimensiones de los vectores se mantienen así que al aumentar el

tamaño de muestras del vector que representa el tiempo es necesario aumentar el valor de

ceros y de unos con el cual se esta creando la señal.

En el ejemplo se puede ver que a mayor numero de muestras, la pendiente de la señal se

hace mayor y la aproximación a la señal verdadera es más cercana.

>>delta=[zeros(1,10),1,zeros(1,10)];

>>t=-1:0.1:1;

>>plot(t,delta)

>> delta = [ zeros( 1 , 1000 ), 1 , zeros( 1 , 1000 ) ];

>> t=-1:0.001:1;

>> plot(t,delta)

Señal Rampa

Para generar la señal rampa, tan solo es necesario recordar que esta función puede ser

creada, como la composición de una recta Y(x) = x a partir de cero y de la recta Y(x) = 0

para valores de x menores de cero, así la versión discreta y continua se muestran a

continuación:

Page 19: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 19

>> rampa1=n1;

>> n1=0:30;

>> rampa1=n1;

>> rampa = [zeros(1,29),rampa1];

>> stem(n,rampa)

>> t1=0:0.1:10;

>> rampa1=t1;

>> rampa=[zeros(1,101),rampa1];

>> t2=-10:0.1:0;

>> t=[t2,t1];

>> plot(t,rampa)

EXPERIMENTOS

1. Desarrollar un conjunto de comandos MATLAB para aproximar las siguientes

señales periódicas en tiempo continuo, dibujando 5 ciclos de cada una:

a. Onda Cuadrada, de amplitud 5 Volts, frecuencia fundamental 20 Hz y ciclo

útil del 60%.

b. Señal diente de sierra, amplitud 5 Volts y frecuencia fundamental 20Hz

2. La solución a una ecuación diferencial esta dada por la siguiente expresión:

Page 20: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 20

Usando MATLAB, grafique la solución de la ecuación en el siguiente intervalo

[0,5] con una frecuencia de muestreo de 100 Hz

3. Repita el problema número dos para la siguiente expresión:

4. Una señal senosoidal con amortiguación exponencial esta definida por la siguiente

expresión:

Donde el parámetro a es variable y toma valores sobre el siguiente conjunto: 500,

750, 1000. Usando MATLAB, investigar el efecto de variar dicho parámetro en la

señal en el intervalo [-2,2].

REPRESENTACIONES DE FOURIER PARA LAS SEÑALES

Existen cuatro representaciones distintas de Fourier, cada una aplicable a diferentes tipos

de señales. Estas cuatro clases están definidas por las propiedades de periodicidad de una

señal y si el tiempo es de tipo continuo o discreto. Las señales periódicas tienen

representación en series de Fourier. La Serie de Fourier (FS) aplica a señales periódicas de

tiempo continuo mientras que la Serie Discreta de Fourier (DTFS) aplica a señales

periódicas de tiempo discreto. Las señales no periódicas tienen representación en forma de

transformada. Si la señal es continua en el tiempo y no periódica, la representación es

llamada Transformada de Fourier (FT). Si la señal es discreta en el tiempo y no periódica

entonces la representación usada es la transformada de Fourier en tiempo discreto (DTFT).

La siguiente tabla ilustra la relación entre las propiedades de tiempo de una señal y la

representación de Fourier adecuada.

Tiempo Periódicas No periódicas

Continuas

Series de Fourier

( FS )

Transformada de

Fourier

( FT )

Discretas

Series discretas de

Fourier

( DTFS )

Transformada discreta

de Fourier

( DTFT)

Page 21: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 21

La siguiente tabla muestra las relaciones matemáticas utilizadas para calcular las

representaciones de Fourier.

Tiempo Periódicas No periódicas

Continuas

Series de Fourier

Transformada de Fourier

Discretas

Series discretas de Fourier

Transformada discreta de Fourier

La Transformada Discreta de Fourier (DTFS)

La DTFS es la única representación de Fourier que es de valor discreto tanto en el tiempo

como en la frecuencia y de esta manera implícitamente conveniente para una

implementación computacional en MATLAB. Las expresiones utilizadas para esta

representación son fácilmente implementables en MATLAB como archivos. Sin embargo

los comandos built-in de MATLAB fft y ifft pueden también ser utilizados para evaluar la

DTFS. Dado un vector llamado x de longitud N representando un periodo de una señal

periódica x[n]. el comando:

>> X=fft(x)/N

Produce un vector llamado X de longitud N que contiene los coeficientes de la DTFS.

Matlab asume que el periodo evaluado en la señal es desde 0 hasta N-1, de manera que el

primer elemento de x y X corresponden a x[0] y X[0] respectivamente, mientras que los

últimos elementos corresponden a x[N-1] y X[N-1]. Nótese que la división por N es

completamente necesaria, debido a que el comando fft evalúa la siguiente expresión sin

realizar la división por N.

Page 22: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 22

Similarmente, dados los coeficientes de una DTFS en un vector llamado X el comando:

>>x=ifft(X)*N

Produce un vector x que representa un periodo de la señal en el tiempo. Nótese que el

comando ifft debe estar multiplicado por N para evaluar la siguiente ecuación.

Los comandos fft e ifft son computados usando un algoritmo rápido o numéricamente

eficiente, conocido como “Fast Fourier Transform”.

Considere el siguiente ejemplo:

Determinar los coeficientes DTFS para la siguiente señal:

La señal tiene un periodo de 24, de manera que tan solo se hace necesario definir un

periodo y evaluar sobre este periodo la DTFS. Los comandos usados para realizar dicho

cálculo son:

>> n = 0:23;

>> x = ones(1,24) + sin( (n * pi / 12) + (3 * pi / 8 ) );

>> X = fft(x)/24;

El resultado teórico del ejemplo es el siguiente:

Page 23: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 23

El resultado obtenido mediante los comandos presentados anteriormente es:

X =

Columns 1 through 5

1.0000 0.4619 - 0.1913i 0.0000 + 0.0000i -0.0000 + 0.0000i -0.0000 + 0.0000i

Columns 6 through 10

-0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i -0.0000 -

0.0000i

Columns 11 through 15

-0.0000 - 0.0000i -0.0000 - 0.0000i 0 -0.0000 + 0.0000i -0.0000 + 0.0000i

Columns 16 through 20

-0.0000 + 0.0000i 0.0000 - 0.0000i 0.0000 + 0.0000i 0.0000 + 0.0000i -0.0000 +

0.0000i

Columns 21 through 24

-0.0000 - 0.0000i -0.0000 - 0.0000i 0.0000 - 0.0000i 0.4619 + 0.1913i

Como se puede ver, tres componentes tienen valor diferente de cero.

Un uso común de la transformada de Fourier, es encontrar las componentes frecuenciales

de una señal en el dominio del tiempo que esta contaminada con ruido. Considérese dos

señales senoidales que tienen frecuencias fundamentales de 50Hz y 120Hz, luego

considérese estas señales contaminadas con ruido aleatorio. Los comandos para generar una

señal con las especificaciones anteriormente mostradas son los siguientes:

>> t = 0:0.001:0.6;

>> x = sin ( 2 * pi * 50 * t ) + sin ( 2 * pi * 120 * t );

>> y = x + 2 * randn ( size ( t ) );

>> plot( 1000 * t (1:50), y (1:50) )

Page 24: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 24

Es de gran dificultad identificar las componentes de frecuencia mirando la señal original.

Sin embargo al realizar la conversión de esta señal al dominio de la frecuencia, la

identificación de estas componentes se hace más sencilla. La conversión de la señal al

dominio de la frecuencia se hace calculando la Transformada R ápida de Fourier, tomando

para el cálculo los primeros 512 puntos de la señal. El espectro de potencia es una medida

de la potencia a varias frecuencias, y este puede ser calculado con los siguientes comandos.

>>Pyy = Y .* conj (Y) / 512;

Para realizar la gráfica se puede tener en cuenta que la información que aparece en el

arreglo Pyy es por propiedades de la transformada, simétrica con respecto a la frecuencia

media, es decir que si tenemos 512 puntos de muestra, la señal que esta almacenada en el

arreglo es simétrica con respecto a la muestra 256, por lo tanto dibujar las ultimas 256

muestras del arreglo será completamente innecesario. De manera que para visualizar el

espectro de potencia los comandos deben ser como se muestran a continuación:

>> f = 1000*(0:256)/512;

>> plot(f,Pyy(1:257))

Para ver todas las muestras y entender la característica de simetría descrita anteriormente se

pueden utilizar los siguientes comandos:

>> f = 1000*(0:511)/512;

>> plot(f,Pyy)

Del espectro de potencia se puede visualizar que las componentes con mayor frecuencia se

encuentran a los 50 y 120 Hz respectivamente. Comprobando así que las señales de las

cuales se formo la señal contaminada con ruido tienen estas frecuencias fundamentales.

Page 25: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 25

Los computadores digitales son ideales para la implementación de descripciones en el

dominio del tiempo de sistemas discretos, porque naturalmente el computador almacena y

manipula secuencias de números. Por ejemplo, la suma de convolución describe la relación

entre la entrada y la salida de un sistema de tiempo discreto, y es fácilmente evaluada en un

computador como la suma de productos de números. En contraste, los sistemas de tiempo

continuo, son descritos en términos de funciones continuas, las cuales no son fácilmente

representadas o manipuladas en un computador digital. Por ejemplo, la salida de un sistema

en tiempo continuo esta descrita por la integral de convolucion. La evaluación de la integral

de convolucion con un computador requiere el uso de integración numérica o de técnicas de

manipulación simbólica, ambas fuera del alcance de este tutorial. Por lo tanto la

exploración con Matlab se centra en el estudio de sistemas en tiempo discreto.

Una segunda limitación en la exploración de señales y sistemas es la que se impone por la

memoria finita o por la capacidad de almacenamiento finita que es inherente en un

computador digital. Por lo tanto se manejaran únicamente señales de duración finita. Por

ejemplo si la respuesta al impulso de un sistema tiene duración infinita y la entrada es de

duración infinita, entonces la suma de convolución equivale a la suma de un infinito

número de productos. Aun si fuese posible almacenar señales de longitud infinita en el

computador, la suma infinita podría no ser calculada en una cantidad finita de tiempo.

Debido a esta limitación, el comportamiento de un sistema en respuesta una señal de

longitud infinita podría a menudo ser inferida de su respuesta a una señal de longitud finita

que presente ciertas particularidades.

CONVOLUCIÓN

Es de recordar que la suma convolución expresa la salida de un sistema de tiempo discreto

en términos de la entrada y la respuesta al impulso del sistema. Matlab tiene una función

llamada conv que evalúa la convolución de señales de tiempo discreto de duración finita. Si

x y h son vectores representado señales, entonces el siguiente comando de Matlab genera

un vector llamado y representando la convolución de la señales representadas por x y h.

y = conv(x, h)

El número de elementos en el vector y es dado por la suma de el numero de elementos en x

y h menos uno. Nótese que se debe conocer el tiempo de origen de las señales

representadas por x y h con el fin de determinar el tiempo de origen de la convolución. En

general, si el primer elemento de x corresponde al tiempo n=kx y el primer elemento de h

corresponde a n=kh, entonces el primer elemento de y corresponde al tiempo n= kx+kh.

Para ilustrar este hecho, considere el siguiente ejemplo:

Page 26: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 26

Asuma el sistema LTI el cual tiene la siguiente respuesta al impulso.

Determine la salida de este sistema en respuesta a la siguiente entrada.

Aquí el primer elemento diferente de cero en la respuesta al impulso del sistema ocurre en

el tiempo n = -1 y el primer elemento de la entrada x ocurre en el tiempo n = 0. La anterior

convolución se puede calcular en Matlab de la siguiente manera:

>> h = [1, 2, 1]; >> x = [2, 3, -2]; >> y = conv(x,h) y = 2 7 6 -1 -2 >> n = -1:3; >> stem(n,y);

El primer elemento en el vector y corresponde al tiempo n = 0 + (-1 ) = -1.

En el siguiente ejemplo, se determinará la salida de un sistema con respuesta al impulso

dada por:

Y entrada

Se puede en este caso usar el comando conv para calcular la respuesta del sistema. En este

caso, la respuesta al impulso consiste de diez unos consecutivos comenzando en el tiempo

Page 27: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 27

n = 0, y la entrada consiste de cinco unos consecutivos comenzando en el tiempo n = 2.

Estas señales pueden ser definidas en Matlab usando los siguientes comandos:

>> h = ones(1,10);

>> x = ones(1,5);

La salida se obtiene y es graficada usando los siguientes comandos:

>> n = 2:15;

>> y = conv(x, h);

>> stem(n, y);

En este ejemplo, el primer elemento del

vector y corresponde al tiempo n = 2 + 0

como se muestra en la siguiente figura.

RESPUESTAS EN ESTADO ESTABLE A ENTRADAS ESCALÓN UNITARIO

La respuesta escalón, es la salida de un sistema en respuesta a una señal de entrada escalón

unitario. Esta respuesta es infinita en general. Sin embargo, es posible evaluar los primeros

p valores de la respuesta escalón usando la función conv.

Si la respuesta al impulso es cero para los tiempos n<kh, entonces el cálculo se realiza

convolucionando los primeros p valores de h[n] con una señal paso de longitud p. Es decir

se construye un vector h’ con los primeros p valores diferentes de cero de la respuesta al

impulso h, luego se define una señal paso de duración p con el siguiente comando

u=ones(1,p), y entonces se evalúa la siguiente convolución s = conv(u,h). El primer

elemento de s corresponde a el tiempo kh y los primeros p valores de s representan los

primeros p valores de la respuesta paso. Los valores sobrantes de s no corresponden a la

respuesta paso.

Por ejemplo se podría determinar los 50 primeros valores de la respuesta paso del sistema

con la siguiente respuesta al impulso:

Page 28: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 28

Con a = 0.9 los comandos de Matlab serían:

>> h = (-0.9).^[0:49];

>> u = ones(1,50);

>> s= conv(u, h);

El vector s tienen 99 valores, los primeros 50 corresponden a la respuesta impulso y es

mostrada en la siguiente figura usando el siguiente comando:

>>stem([0:49],s(1:50));

En este ultimo comando se pasan a la función stem dos parámetros diferentes a los

mostrados en los anteriores ejemplos, el primero es un vector anónimo de 50 posiciones

desde 0 hasta 49 que representa el tiempo, se dice que el vector es anónimo puesto que no

se le ha definido algún nombre. El segundo parámetro es el vector s que se había calculado

anteriormente, pero en este caso se agrega la fracción de código (1:50) que indica a Matlab

que debe usar tan solo los elementos de s que están almacenados desde la posición 1 hasta

la 50.

Page 29: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 29

DISTRIBUCIONES DE PROBABILIDAD

La siguiente tabla muestra las distintas distribuciones de probabilidad disponibles en

Matlab tanto para variables continuas como para variables discretas.

Continuas Discretas

Beta Binomial

Exponencial Uniforme Discreta

Valor Extremo

Gamma Geométrica

Valor Extremo generalizada

Pareto Generalizada

Lognormal Hiper-Geométrica

Normal Binomial Negativa

Rayleigh Poisson

Uniforme

Chi-square

Chi-square no central

Weibull

En esta sección se provee una revisión de algunas distribuciones de probabilidad

comúnmente usadas. Se cubrirán dos distribuciones discretas muy importantes: La binomial

y la Poisson.

En Matlab existen dos sufijos que ayudan a clasificar las funciones entre aquellas que son

funciones de densidad de probabilidad y las que son funciones de distribución

acumulativas. La función de densidad de probabilidad usa el sufijo PDF de las siglas del

ingles (Probability Density Function). La función de distribución acumulativa usa el sufijo

CDF de las siglas del ingles (Cumulative Distribution Function).

Funciones de densidad de probabilidad

Para distribuciones discretas, la PDF es la probabilidad de observar un resultado particular.

Para distribuciones continuas la probabilidad de observar un valor particular es cero. Para

obtener estas probabilidades se debe integrar sobre un intervalo de interés, por ejemplo la

probabilidad de que el grosor de un video cassete este entre 1 y 2 mm, es la integral de la

función PDF apropiada desde uno hasta dos.

Page 30: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 30

Una función PDF tiene dos propiedades teóricas:

La función es positiva o cero para cualquier resultado.

La integral de una función PDF sobre su rango completo de valores es uno.

Funciones de distribución acumulativas

Si f en una función de densidad de probabilidad para una variable aleatoria X, la función de

distribución acumulativa o CDF asociada llamada F es:

El valor de una CDF de un valor x, es decir F(x), es la probabilidad de observar algún

resultado que sea menor o igual que x.

Una función CDF tiene las siguientes propiedades.

El rango de la función es de 0 hasta 1.

Si y>x, entonces el CDF de y es mayor o igual que el del CDF de x

Distribución Binomial.

Se tiene un experimento, cuyo resultado pueda ser identificado como “éxito” o “fracaso”.

Si X=1 denota un resultado de éxito y X=0 denota un resultado de fracaso, entonces se

puede escribir una función de probabilidad como se muestra a continuación:

Donde p representa la probabilidad de un resultado exitoso. Una variable aleatoria que se

rige a través de esta función de probabilidad donde se cumple que 0 < p < 1 es llamada una

variable aleatoria de Bernoulli.

Ahora, supóngase que se repite este experimento n veces, donde cada intento es

independiente (el resultado de un intento no influye en el resultado del otro) y donde el

experimento resulta en éxito con una probabilidad p. Si X denota el número de éxitos en los

n intentos, entonces X se rige por una distribución Binomial con parámetros (n, p).

Para calcular la probabilidad binomial, se usa la siguiente formula:

Page 31: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 31

Obsérvese el siguiente ejemplo el cual hace uso del Toolbox de Estadística de Matlab:

Existe un 20% de oportunidad que un adulto Americano sufra de un desorden psiquiátrico.

Aleatoriamente se muestrean 25 adultos Americanos. Si X representa el número de

personas las cuales tienen un desorden psiquiátrico, entonces X es una variable aleatoria

Binomial con parámetros (25, 0.20). Se esta interesado en la probabilidad de que máximo 3

de las personas encuestadas tengan tal desorden.

Para resolver este problema se puede hacer el uso de la función binocdf, para determinar P(

X ≤ 3 ) de la siguiente manera:

>>prob = binocdf(3,25,0.2);

También se puede calcular la suma de los valores individuales de la función de

probabilidad desde X=0 hasta X=3 así:

>>prob2=sum(binopdf(0:3,25,0.2));

Ambos comandos retornan la probabilidad de 0.234

Los siguientes comandos generan una grafica de una pdf binomial para n=10 y p= 1/2

>> x = 0:10;

>> y = binopdf(x,10,0.5);

>> plot(x,y,'+')

Distribución de Poisson.

Una variable aleatoria X es una variable aleatoria que se rige por la distribución de Poisson

con un parámetro λ, con λ>0, si satisface la siguiente expresión:

Page 32: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 32

La distribución de Poisson puede ser usada en muchas aplicaciones. Ejemplos de estas

situaciones en las cuales se involucra una variable aleatoria discreta son:

El numero de errores tipográficos en una página.

El numero de vacantes en una compañía durante un mes.

El numero de defectos en una longitud de cable.

La distribución de Poisson es a menudo usada para aproximar la Binomial. Cuando n es

largo y p es pequeño de manera que n*p es un numero moderado entonces el numero de

éxitos que ocurren pueden ser aproximados por una variable aleatoria de Poisson con el

parámetro λ=n*p.

El siguiente ejemplo muestra el uso de las funciones de Matlab para el cálculo de

probabilidades con la distribución de Poisson.

Mientras se estuvo preparando este texto, se realiza la revisión ortográfica con un asistente

de ayuda El asistente arrojo los resultados y se determino que los errores por página se

rigen por la distribución de Poisson con parámetro λ=0.25. En seguida se calcula la

probabilidad de que una página tenga al menos dos errores:

Esta probabilidad se puede calcular con la función posscdf de la siguiente manera.

Nótese que la siguiente expresión muestra la forma general de una función de distribución

acumulativa para una variable aleatoria discreta.

Luego la expresión P(X=0) + P(X=1) es la función de distribución acumulativa en la cual el

parámetro a de la ecuación anterior es igual a 1. Luego el comando para el cálculo de la

probabilidad será el siguiente:

prob = 1- poisscdf(1,0.25);

El siguiente listado de comandos muestra el uso de la función poisspdf

>> x = 0:15;

>> y = poisspdf(x,5);

>> plot(x,y,'+')

Page 33: Tutorial MatLab

Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 33

Bibliografía

Getting Started with MATLAB®

The Language of Technical Computing

Version 7

www.mathworks.com

Creating Graphical User Interfaces

MATLAB®

The Language of Technical Computing

Version 1

www.mathworks.com

Getting Started with MATLAB Edward Neuman

Department of Mathematics

Southern Illinois University at Carbondale

[email protected]

Analysing Random Processes using

MATLAB at the Master’s Level

John Soraghan. Department of Electronic and Electrical Engineering. University of

Strathclyde

Signals and Systems with MATLAB® Applications.Second Edition.

Steven T. Karris.

Orchard Publications

www.orchardpublications.com

Aprenda Matlab 5.3 como si estuviera en primero

Javier García de Jalón · José Ignacio Rodríguez · Alfonso Brazález

Escuela Técnica Superior de Ingenieros Industriales

Universidad Politécnica de Madrid

Madrid Febrero 2001

Signal and Systems Simon Haykin - Barry Van Veen

Wiley -1999

Computational Statistic Handbook with Matlab

Wendy L Martinez. - Angel R Martionez.

Chapman and Hall / CRC- 2002

Bibliografía en Internet

1. http://www.pue.udlap.mx/~tesis/lep/palacios_n_jc/indice.html

2. users.ece.gatech.edu/~bonnie/book/TUTORIAL/tut_1.html

3. w3.impa.br/~zubelli/tutorial/

4. www.angelfire.com/la/hmolina/matlab1.html

5. www.math.ufl.edu/help/ matlab-tutorial/matlab-tutorial.html 6. www.math.utah.edu/lab/ms/matlab/matlab.html

7. www.monografias.com/trabajos13/tumatlab/tumatlab.shtml

8. www.abcdatos.com/tutoriales/tutorial/l4612.html

9. Libros relacionados

10. Documentacion tecnica