Tutorial MatLab
Tutorial MatLab
Tutorial MatLab
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.
• 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
• Procesamiento de señales
• Sistemas de control
• Redes neuronales
• Lógica difusa
• Wavelets
• Simulación
Entorno de desarrollo:
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:
Interfaces Externas:
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
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.
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
>> num_real =
10.0100
>>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
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.
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.
-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 ARITMETICAS
Operación Símbolo
Adición +
Substracción -
Multiplicación *
División /ó\
Exponenciación ^
Complejo Conjugado ‘
Universidad Tecnológica de Chihuahua [EdSanSol® 1109220122] Página 6
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_izq = 47\3
div_izq=
0.0638
FUNCIONES
Para obtener la lista de las funciones más avanzadas y de las funciones disponibles para
matrices se usan los siguientes comandos:
>>help specfun
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
EJEMPLOS DE EXPRESIONES
Expresión Descripción
rho = (1+sqrt(5))/2 Se crea la variable de nombre rho, a la
cual se asigna el valor del resultado de la
rho =
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;
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
>> A = 1;
>> w = 10 * pi;
>> t = 0:0.001:1;
>> sq = A*square(w*t+rho);
>> plot(t,sq);
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.
A * sawtooth(w * t + Wdt)
>> A = 1;
>> w = 10 * pi;
>> t = 0:0.001:1;
>> plot(t,tri);
amplitud igual a la unidad, ciclo útil igual a 50% y una frecuencia angular igual a :
>> A = 1;
>> omega = pi / 4;
>>n = -10:10;
>>stem(n,x);
B * exp(-a*t);
B * exp( a * t);
>> B = 5;
>> a = 6;
>> t = 0:0.001:1;
>> plot( t, x );
>> B = 1;
>> a = 5;
>> t = 0:0.001:1;
>> x = B * exp( a * t );
>> plot( t, x ) ;
>> 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);
A * sin ( w0 * t + phi );
>> A = 4;
>> phi = pi / 6;
>> t = 0:0.001:1;
>> plot(t,coseno) ;
>> A = 0.5;
>> w0 = 20 * pi;
>> phi = pi / 2;
>> t = 0:0.001:1;
>> plot(t,seno);
>> A = 60;
>> w0 = 20 * pi;
>> phi = 0;
>> a = 6;
>>plot(t,expsen);
La versión discreta de la misma señal se puede obtener haciendo uso de los comandos
mostrados anteriormente de la siguiente manera:
>> a = -0.1;
>> w0 = 2 * pi / 12;
>> phi = 0;
>> z = x .* y;
>> tem(n,z)
Señal Paso:
Una señal paso de amplitud uno, puede ser generada con el siguiente comando.
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)
>> 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í:
1 21 1 21 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:
>> n = -10:10;
>> stem(n,delta);
>>delta=[zeros(1,10),1,zeros(1,10)];
>>t=-1:0.1:1;
>>plot(t,delta)
>> 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:
>> n1=0:30;
>> rampa1=n1;
>> 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
4. Una señal senosoidal con amortiguación exponencial esta definida por la siguiente
expresión:
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.
Transformada de
Series de Fourier
Fourier
Continuas
( FS )
( FT )
Continuas
Discretas
>> X=fft(x)/N
>>x=ifft(X)*N
Los comandos fft e ifft son computados usando un algoritmo rápido o numéricamente
eficiente, conocido como “Fast Fourier Transform”.
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 = fft(x)/24;
X=
Columns 1 through 5
Columns 6 through 10
Columns 11 through 15
Columns 16 through 20
Columns 21 through 24
>> t = 0:0.001:0.6;
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.
CONVOLUCIÓN
y = conv(x, h)
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:
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
>> h = ones(1,10);
>> x = ones(1,5);
>> n = 2:15;
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:
>> h = (-0.9).^[0:49];
>> u = ones(1,50);
>>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.
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 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).
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:
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 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);
>>prob2=sum(binopdf(0:3,25,0.2));
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:
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:
Nótese que la siguiente expresión muestra la forma general de una función de distribución
acumulativa para una variable aleatoria discreta.
prob = 1- poisscdf(1,0.25);
>> x = 0:15;
>> y = poisspdf(x,5);
>> plot(x,y,'+')
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