TUTORIAL BASICO PARA EL MANEJO DE SEALES CON
MATLABIntroduccin
MATLAB significa "MATrix LABoratory". Es un programa para clculo
tcnico y cientfico; sus clculos numricos se hacen en forma
matricial y dada su gran capacidad para realizar diferentes grficos
en dos y tres dimensiones y un lenguaje de programacin propio se ha
posicionado como una de las herramientas de mayor uso por parte de
la comunidad tcnica y cientfica.
MATLAB es un entorno de computacin y desarrollo de aplicaciones
totalmente integrado orientado para llevar a cabo proyectos en
donde se encuentren implicados elevados clculos matemticos y la
visualizacin grfica de los mismos. MATLAB integra anlisis numrico,
clculo matricial, proceso de seal y visualizacin grfica en un
entorno completo donde los problemas y sus soluciones son
expresados del mismo modo en que se escribiran tradicionalmente,
sin necesidad de hacer uso de programacin tradicional, es por esto
que MATLAB es una excelente herramienta de alto nivel para
desarrollar aplicaciones tcnicas, es fcil de utilizar y aumenta la
productividad de los programadores respecto a otros entornos de
desarrollo.
MATLAB en la actualidad dispone de una amplia cantidad de
programas de apoyo especializados, denominados Toolboxes, estos
extienden significativamente el nmero de funciones incorporadas en
el programa principal. Estos Toolboxes cubren en la actualidad
prcticamente casi todas las reas principales en el mundo de la
ingeniera y la simulacin, por ejemplo estn los 'toolbox' para
proceso de imgenes, procesamiento digital de seales, control
robusto, estadstica, anlisis financiero, matemticas simblicas,
redes neurales, lgica difusa, entre otros.
Combinando MATLAB con Signal Processing Toolbox, Wavelet Toolbox
y un conjunto de herramientas complementarias, se puede crear un
ambiente de anlisis personalizado de seales y desarrollo de
algoritmos DSP. Para simulacin y desarrollo de prototipos se puede
agregar el Simulink y el DSP Blockset para modelar y simular
sistemas DSP, y luego usar Real-Time Workshop para generar cdigo C
para su hardware designado.
MATLAB integra todos los requisitos claves de un sistema de
computacin tcnico: clculo numrico, grficos, herramientas para
aplicaciones especficas y capacidad de ejecucin en mltiples
plataformas como Windows 95/98/XP/NT, Macintosh, Unix y Linux.
Objetivo
Introducir al estudiante tanto de pregrado como de la
especializacin de la Carrera de Composicin con Medios
Electroacsticos de la Universidad Nacional de Quilmes en el manejo
correcto de MATLAB, ya que esta herramienta proporciona al
estudiante un medio de carcter nico, para resolver los problemas ms
complejos y difciles.
La Interfase de Matlab
Ventana Inicial de MATLAB Version 6.5 Release 13Command Window,
es la ventana principal donde se digitan todos los comandos, es
como si se tratase de la mesa de trabajo, aqu se puede apreciar el
prompt con el smbolo >>, por defecto este smbolo siempre
aparecer.
Command History es la ventana encargada de almacenar todos los
comandos que se escriben en el Command Window.
Workspace es la ventana encargada de almacenar todas las
variables ya sean Vectores, Matrices o ans (respuesta, de la
palabra en ingls answer) con sus correspondientes longitudes o
tamaos.Por defecto todos los archivos se guardan en un directorio
llamado Work, este directorio se encuentra dentro de MATLAB
(D:\MATLAB6p5\Work en Wndows, /usr/share/matlab en Unix o Linux),
siempre es importante saber donde voy a guardar mi trabajo, razn
por la cual al crear un directorio en otra posicin del disco duro,
hay que buscarlo y posicionarse en l por medio del Current
Directory.
Operaciones bsicas con Matlab
En el siguiente apartado se expondrn los elementos bsicos para
tener en cuenta al momento de trabajar con Matlab.
Vectores y Matrices
Clculos
Creacin de vectores y matrices
Operaciones
Grficos
Primero es importante resaltar algunas particularidades del
programa:
Matlab es dependiente del contexto, es decir, las letras
maysculas y minsculas son diferentes, por ejemplo X es diferente de
x, Var es diferente de var, plot es diferente de PLOT.
La comilla sencilla ' se emplea para ingresar texto en una
funcin, como por ejemplo ejemplo: title('Esta grfica corresponde a
una seal digital'). En un teclado espaol estndar este carcter se
encuentra en la tecla de la interrogacin.
El signo = se emplea para asignar un valor a una variable.
Ejemplo: y=5 (En la variable y se almacena el valor 5).
El punto y coma (;) al final de una instruccin se emplea para
indicar a MATLAB que realice el clculo sin presentar en pantalla el
procedimiento o el resultado.
Cualquier tipo de comentario o mensaje se escribe precedido por
el carcter %. Ejemplo: %As se escriben los comentarios o
mensajes.
Con la ayuda podemos obtener una informacin ms detallada en
cuanto a la sintaxis y comandos, basta con escribir help seguido
del comando en el prompt. Ejemplo: help plot
Vectores y Matrices
Dado que Matlab fue programado para anlisis matricial, se hace
indispensable hablar sobre los conceptos bsicos de los vectores y
matrices.
Una matriz es un arreglo rectangular de nmeros y su tamao esta
dado por m x n, siendo m el nmero de filas y n el nmero de
columnas.
Arreglo Matricial
El elemento aij, es el nmero que aparece en la fila i y la
columna j de la matriz.
Un Vector Fila es un conjunto ordenado de n nmeros escritos de
la siguiente forma
Vector Fila
Un Vector Columna es un conjunto ordenado de n nmeros escritos
de la siguiente forma
Vector Columna
Para sumar dos matrices es condicin necesaria que sean de igual
tamao. Para multiplicarlas es necesario que el nmero de columnas de
la primera sea igual al nmero de columnas de la segunda.
Para multiplicar una matriz por un vector, la longitud de la
fila de la matriz (es decir, el nmero de columnas) debe ser igual a
la longitud del vector columna, o la longitud de la columna de la
matriz debe ser igual a la longitud del vector fila.
Clculos
Las operaciones o clculos que no se asignan a una variable
especfica, se asignan por defecto a la variable ans (answer).
>>7+10+3 ans = 20
Las operaciones se evalan por orden de prioridad: primero las
potencias, despus las multiplicaciones y divisiones y, finalmente,
las sumas y restas. Las operaciones de igual prioridad se evalan de
izquierda a derecha:
>>10/2*4 ans = 20 >>10/(2*4) ans = 1.2500
En el siguiente ejemplo se genera un matriz de dimensin 1x1. A
una variable x se asigna el valor 7, el punto y coma al final
indica que no se debe presentar el resultado
>> x=7;
Por ejemplo aqu no aparece ans con su respuesta.
Para visualizar el contenido de una variable se escribe el
nombre de la variable
>> x ans= 7
Recuerde que al poner un ; al final no se presentan lo
resultados, ms sin embargo igualmente la variable ans tendr el
resultado.Para visualizar la longitud del vector, se emplea el
comando length(variable)>> length(x) ans= 1
Para visualizar la dimensin del arreglo, se emplea el comando
size(variable)>> size(x); ans= 1 1
La operacin x=7 en el rea de trabajo de Matlab se vera de la
siguiente forma
Ventana de trabajo
Obsrvese que en la ventana Command Window se realizaron tres
ejecuciones: la asignacin valor a la variable x (x=7), la ejecucin
del comando length y la ejecucin del comando size.
En la ventana Command History se almacena todo lo que se ha
escrito, por ejemplo las variables y los comandos.
En la ventana Workspace aparece el tamao de las variables, por
ejemplo la dimensin de x es 1x1.Creacin de vectores y matrices
Los componentes de un vector o matriz siempre deben ir entre
corchetes
>> vectorfila= [ 1 2 3 4 5 6 7] vectorfila = 1 2 3 4 5 6 7
>> vectorcolumna = [1; 2; 3; 4] vector columna= 1 2 3 4
Las filas deben ir separadas por punto y coma
>> Matriz= [1 2 3; 4 5 6; 7 8 9] matriz= 1 2 3 4 5 6 7 8
9
Acceso a posiciones
Para posicionarse en el valor 6 de la variable Matriz
determinada en el ejemplo anterior y que corresponde a la segunda
fila con tercera columna tres, se indica entre parntesis la
posicin. En el siguiente ejemplo se asigna el valor de la posicin
iniciada a la variable posicion.>>posicion=Matriz(2,3) ans =
6
Si se deseara asignar toda la tercera fila como un solo vector
entonces se cambiara el parmetro correspondiente a la columna por
el caracter : con lo cual se indica que corresponde a todas las
columnas.
>> fila=Matriz(3,:) ans = 7 8 9
Similar al caso anterior, si se desea la tercera columna en su
totalidad entonces se reemplaza el parmetro de la fila por el
caracter : con lo cual se indica que corresponde a todas las
filas.
>> columna=Matriz(:,3) ans = 3 6 9
Creacin de Rangos
La definicin de rangos en Matlab se especifica segn la sintaxis
Variable=Cominezo:Intervalo:FinalPara ms informacin digitar en el
prompt help colonSi se desea declarar un vector con un rango de 1 a
5 con intervalo de a uno se emplea la siguiente declaracin
>> n=1:5 ans = 1 2 3 4 5
Si se quiere declarar un vector con un rango de 0 a 20 con
intervalo de a dos
>>n=0:2:20 ans = 0 2 4 6 8 10 12 14 16 18 20
Operaciones
Las operaciones de suma, resta, divisin y multiplicacin utilizan
los operadores +, -, /, * respectivamente.
Suma de vectores
>>vector1= [1 2 3 ]; >> vector2= [3 4 5;]; >>
suma= vector1 + vector2 ans = [4 6 8]
Multiplicacin de matrices y vectores
>> vector1= [1 2 3 ]; >> vector2= [3 4 5]; >>
vector1.*vector2 ans = 3 8 15 >> Matriz = [1 2 3;1 2 3; 1 1 1
]; >> vector= [3 ;4 ;5]; >> Matriz * vector ans = 26 26
12
Transposicin de vectores
>> vector = [3;4;5] ans = 3 4 5 >> vector' ans = 3 4
5
Grficos
Consideremos el ejemplo de graficar la funcin x^2:
>> x=0:0.1:1; % x es un vector, que empieza en 0, con
incrementos de 0.1 y finaliza en 1 >> y=x.^2; >> plot
(y),title(' Grafica de la funcin x^2') >> grid on %permite
visualizar las cuadriculas
Grfica de x2Definicin de funciones con M-files
Un M-File es un archivo que contiene una lista de comandos a ser
ejecutados por MATLAB. Casi todas las funciones presentes en el
programa estn definidas en un archivo de este tipo en un directorio
especial.
Tambin es posible crear archivos de este tipo con los cuales
definir funciones propias para emplearlas posteriormente, es decir,
se pueden crear con el objetivo de programar nuevas rutinas en
MATLAB. El vocabulario que aqu que se escribe es expresado en
trminos de otras funciones existentes. Es importante tener en
cuenta que toda funcin tiene que ser identificada por un nombre
diferente a las ya existentes en MATLAB pues MATLAB no maneja
sobrecarga de funciones.
Las sintaxis es la siguiente:
Palabra reservada function [variables de salida] = Nombre de la
funcin (Parmetros de entrada) % informacin que se presentar como
ayuda % con el comando help 'Nombre de la funcin'
Estructura del programa, donde se utilizan variables que se
destruyen una vez utilizadas y/o funciones definidas en
Puede guardase este archivo en el directorio de trabajo para no
tener necesidad de agregar elementos extras.
A diferencia de los lenguajes de programacin formales, Matlab
permite ms de una variable de salida. Para retornar este valor no
se emplea algn comando como return sino que se asigna dicho nombre
de variable durante la ejecucin al dato que se desea retornar.
[suma, resta, multiplicacion, division]=comandos(var_a, var_b)
%COMANDOS retorna la suma, resta, multiplicacin y divisin de dos
variables. var_a = primera variable var_b = segunda variable suma =
resultado de la suma resta = resultado de la resta multiplicacion =
resultado de la multiplicacin divisin = resultado de la divisin
% $Revision: 1.1 $ $Date: 2004/20/06 19:12:36 $
suma=var_a+var_b; resta=var_a-var_b; multiplicacion=var_a*var_b;
division=var_a/var_b;
Hay que anotar un detalle especial. Al emplear el carcter ; al
final de un comando se indica que no debe presentar el resultado y
si en la funcin anterior no se indicara esto entonces se
presentaran todos los comandos durante la ejecucin de la
rutina.
Anlisis de una Onda Seno
Para poder generar ondas senosoidales que involucren parmetros
tales como amplitud, frecuencia, frecuencia de muestreo, tiempo y
ngulo de fase, hay que definir la funcin senosoidal. El siguiente
es el cuerpo de la funcin.
function [x]=senosoidal(amplitud,frecuencia,fm,tiempo,fase)
%SENOSOIDAL crea una senosoidal %SENOSOIDAL(amp,fr,ph,samp,t)
crea una senosoidal %amp = amplitud %fr = frecuencia %ph = fase
%samp = frecuencia de muestreo %t = tiempo de muestreo
% Copyright (c) 2004 by Antonio Quintero % $Revision: 1.1 $
$Date: 2004/20/06 19:12:36 $
for n=0:fm*tiempo-1 angulo=2*pi*frecuencia/fm;
x(n+1)=amplitud*sin((angulo*n)+fase); % Como los vectores empiezan
en 1, x arranca una % posicin despus end
Para verificar que la funcin senosoidal qued guardada en la
carpeta Work, escribir pwd, esta funcin devuelve todo el path de la
funcin (D:\MATLAB6p5\Work\senosoidal.m) y al escribir dir debe
aparecer la funcin senosoidal.m
Siempre es importante tener en cuenta el teorema fundamental de
muestreo el cual dice que para representar digitalmente una seal
que contiene componentes de frecuencia hasta x Hz es necesario usar
una frecuencia de muestreo de al menos 2x muestras por segundo.
Vamos ahora a analizar dos ondas senosoidales que solo varan en
su frecuencia, las dos seales van a tener los siguientes parmetros:
una amplitud de 0.5, 1000 de frecuencia de muestreo durante 1
segundo y con un ngulo de fase 0; las dos ondas solo se van a
diferenciar en sus frecuencias, una es a 440 Hz y la otra es a 441
Hz; se pide: graficar las ondas hasta Nyquist y graficar sus
correspondientes espectros.
Nota: Para poder representar digitalmente estas seales, la
frecuencia de muestreo debera ser como mnimo para 440 Hz, 880 Hz y
para 441 Hz, 882 Hz, para nuestro ejemplo se esta tomando solo la
mitad de la frecuencia de muestreo, la cual es 500 Hz, esta
frecuencia corresponde a la frecuencia de Nyquist.
A una variable x1 se asigna el resultado de la funcin sinusoidal
con todos sus parmetros>> x1=senosoidal(0.5,440,500,1,0);
A una variable x2 se asigna el resultado de la funcin sinusoidal
con todos sus parmetros
>> x2=senosoidal(0.5,441,500,1,0);
A una variable x se asigna el resultado de la suma de las dos
ondas senosoidales>> x=x1+x2;
A una variable xx se asigna el resultado de la multiplicacin de
las dos ondas senosoidales>> xx=x1.*x2;
Para poder graficar todas las ondas con sus resultados, se
utiliza el comando subplot(cantidad de figuras, posicin, numero de
la figura), seguido del comando plot(figura) y un ttulo para el
grfico.
>> subplot(4,1,1),plot(x1),grid on,zoom,title('Onda Seno
440 Hz') >> subplot(4,1,2),plot(x2),grid on,zoom,title('Onda
Seno 441 Hz') >> subplot(4,1,3),plot(x),grid
on,zoom,title('Onda Seno 440 Hz + Onda Seno 441 Hz') >>
subplot(4,1,4),plot(xx),grid on,zoom,title('Onda Seno 440 Hz * Onda
Seno 441 Hz')
Grficas de cada onda (440, 441, 440+441, 440*441)
Los siguientes son los sonidos que resultaron de la anterior
prctica:
440
441
440+441
440*441
El siguiente paso corresponde al anlisis de los espectros de
cada una de estas ondas.
Primero se asigna a una variable espx el valor absoluto de la
transformada rpida de Fourier de la funcin seno a 440 Hz almacenada
anteriormente en la variable x1
>> espx1=abs(fft(x1));
Seguidamente se hace el mismo proceso para las otras ondas
generadas.
>> espx2=abs(fft(x2)); >> espx=abs(fft(x)); >>
espxx=abs(fft(xx));
Ahora se grafican las respuestas en una sola grfica
>> subplot(4,1,1),plot(espx1),grid on,zoom,title('Espectro
Onda Seno 440 Hz') >> subplot(4,1,2),plot(espx2),grid
on,zoom,title('Espectro Onda Seno 441 Hz') >>
subplot(4,1,3),plot(espx),grid on,zoom,title('Espectro de la Onda
Seno 440 Hz + Onda Seno 441 Hz') >>
subplot(4,1,4),plot(espxx),grid on,zoom,title('Espectro de la Onda
Seno 440 Hz * Onda Seno 441 Hz')
Grficas de los espectros de cada onda (440, 441, 440+441,
440*441)
Las grficas expresan las simetras de las energas de todas las
ondas.
Hay otra manera de graficar los espectros por medio de la funcin
stem(varible), esta funcin muestra la figura en forma de barras de
tal manera que en algunos casos es ms fcil observar que sucede en
la grfica.
En la siguiente figura se muestra un zoom hecho en cada grfica
con el fin de poder establecer en que valores estn exactamente los
espectros.
>> subplot(4,1,1),stem(espx1),grid on,zoom,title('Espectro
Onda Seno 440 Hz') >> subplot(4,1,2),stem(espx2),grid
on,zoom,title('Espectro Onda Seno 441 Hz') >>
subplot(4,1,3),stem(espx),grid on,zoom,title('Espectro de la Onda
Seno 440 Hz + Onda Seno 441 Hz') >>
subplot(4,1,4),stem(espxx),grid on,zoom,title('Espectro de la Onda
Seno 440 Hz * Onda Seno 441 Hz')
Grficas de los espectros de cada onda (440, 441, 440+441,
440*441)
Ya con todos estos datos, se podra preguntar cul es la
frecuencia de anlisis, definida por la frecuencia de muestreo sobre
la longitud de la seal y su intervalo de muestreo, definida a su
vez como la unidad sobre la frecuencia de muestreo.
Optimizacin del forEl proceso de convertir un bucle for en una
operacin matricial o vectorial se llama vectorizar, en MATLAB es
importante evitar los bucles for si se usan para hacer operaciones
sobre elementos de un vector, en este caso la programacin es
ineficiente debido a que los bucles for son interpretados en Matlab
lo cual hace lento el proceso, este bucle se debe utilizar como
ltima opcin, no con motivos de calculo, sino en operaciones de
control solamente.
Hay algunas funciones definidas en MATLAB que son de mucha
ayuda:
sum, se utiliza para sumar dos vectores. zeros(m,n), es una
matriz con ceros ones(m,n), es una matriz con unos
Por ejemplo para sumar los elementos de un vector fila se puede
obtener multiplicando dicho vector por un vector columna de
ceros.
Si se quiere crear una matriz que tenga 10 filas, donde cada una
es una copia de x y el resultado se multiplica por un vector fila
x.
xx=ones(10,1)*x %x es un vector fila de longitud L %xx es una
matriz formada por el producto externo 10XL
CondicionalesLos condicionales en MATLAB devuelven 0 si la
condicin es falsa y 1 si la condicin es verdadero, son los
siguientes
EqEqual==
neNot equal~=
ltLess than
leLess than or equal=
Por ejemplo:
[1 2 3 4 5 6] < 4
devuelve
[1 1 1 0 0 0]
Vectorizar la funcin Clipfunction [y]= clip (matriz,
limite_inf,limite_sup)
%Versin relenta %CLIP crea La funcin clip % clip(x,lo,hi)
recorta los elementos que se encuentran por encima del %limite
superior y por debajo del limite inferior de la matriz x . % x =
matriz o vector de entrada % lo = lmite inferior %hi = limite
superior
% $Revision: 1.1 $ $Date: 2004/20/06 19:12:36 $
[M,N]= size(x); for m:1:M for n=1:N if x(M,N)>hi x(M,N)=hi
else if x(M,N)< lo x(M,N)=lo end; end; y=x
Aqu se puede apreciar el siguiente problema, se est utilizando
un doble for para recorrer todos los elementos de la matriz.
Con las operaciones vectoriales se puede optimizar utilizando
los condicionales que devuelven true o false, o sea uno o cero, los
cuales pueden ser empleados como valores numricos y emplearlos como
mascaras (a travs de la multiplicacin) para seleccionar partes de
la matriz x.
Por ejemplo ([xhi]) es una tautologa y por lo tanto todos sus
valores son 1
function [y]= clip (matriz, limite_inf,limite_sup)
%Versin rpida %CLIP crea La funcin clip % clip(x,lo,hi) recorta
los elementos que se encuentran por encima del %limite superior y
por debajo del limite inferior de la matriz x . % x = matriz o
vector de entrada % lo = lmite inferior %hi = limite superior
% $Revision: 1.1 $ $Date: 2004/20/06 19:12:36 $
y= (x.*[xhi]); y= (y.*[x>=lo]) +(lo .*[x