Professional Documents
Culture Documents
Introduccin
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 especificas y capacidad de ejecucin en mltiples plataformas
como Windows 95/98/XP/NT, Macintosh, Unix y Linux.
Volver al inicio
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.
Volver al inicio
La Interfase de Matlab
Vectores y Matrices
Clculos
Operaciones
Grficos
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 caracter se encuentra en la tecla de la interrogacin.
El signo = se emplea para asignar un valor a una variable. Ejemplo: y=5 (En la varibale 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 caracter %. Ejemplo: %As
se escriben los comentarios o mensajes.
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.
Volver al inicio
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 umplea el comando size(variable)
>> size(x);
ans= 1 1
La operacin x=7 en el rea de trabajo de Matlab se vera de la siguinte 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.
Volver al inicio
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 inicada 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 : Final
Para mas informacin digitar en el prompt help colon
Si 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
Volver al inicio
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]
26
26
12
Transposicin de vectores
>> vector = [3;4;5]
ans =
3
4
5
>> vector'
ans = 3 4 5
Volver al inicio
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 x2
Volver al inicio
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 caracter ; 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
coamdnos durante la ejecucin de la rutina.
Volver al inicio
%
%
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')
para
una
sumar
matriz
dos
con
vectores.
ceros
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
Condicionales
Los condicionales en MATLAB devuelven 0 si la condicin es falsa y 1 si la condicin es verdadero, son
los siguientes
Eq
ne
lt
gt
le
ge
Equal
Not equal
Less than
Greater than
Less than or equal
Greater than or equal
==
~=
<
>
<=
>=
Por ejemplo:
[1 2 3 4 5 6] < 4
devuelve
[1 1 1 0 0 0]
Efecto Clipping
El Clipping ocurre cuando una seal excede los lmites del diseo, causando distorsin por sus altos
componentes de frecuencia.
En esta grfica se puede ver cmo la seal se corrige, eliminando los componentes altos de frecuencia,
razn por la cual los componentes que estn por encima de 1 y por debajo de -1 se pierden.
por
defecto
16
Bits.
Por ejemplo, para guardar el sonido capturado anteriormente se emplear el siguiente comando:
wavwrite(y,Fs,16,'sonido_uno.wav')
Para escuchar o manipular vectorialmente un sonido almacenado en formato wav se utilizan dos
comandos.
wavread('File.wav')
sound(Var)
Para el ejemplo anterior File es el nombre del archivo que se desea escuchar, los valores de amplitud
deben estar en el rango [-1,+1].
La variable Var corresponde al vector que se desea escuchar cuya frecuencia de muestreo por defecto
ser de 8192 Hz.
Si se utiliza sound(var,Fs) el resultado ser un sonido con una frecuencia de muestreo definida por el
usuario. Se asume que los valores estn dentro del rango [-1,1] ya que los valores que estn fuera del
rango son clipeados.
Si se emplea sound(var,Fs,Bits) sonar con una frecuencia de muestreo definida por el usuario y
determinados nmero de Bits por muestra.
Por ejemplo, para escuchar la seal guardada anteriormente como sonido_uno, se asigna a una
variable s el comando wavread y luego se escucha con el comando sound.
s= wavread('sonido_uno.wav');
sound(s,44100)
Si se desean conocer los datos de un archivo en formato wav, como los valores del vector, su frecuencia
de muestreo o el nmero de bits NBits por muestra, se emplea la siguientes sintaxis:
[y,Fs,NBits]=wavread('file.wav')
FFT
Si se desea obtener la transformada rpida de Fourier, se utiliza la sentencia x=abs(fft(vector a
trabajar)) en donde abs se refiere al valor absoluto o a la magnitud. Por su parte fft(x) es la transformada
discreta de Fourier de un vector x.
Los archivos violin.wav y flauta.wav se almacenaron anteriormente con el comando wavwrite. Se
necesita hacer una grfica espectral de sus seales, adems se desea saber cul fue el tamao de las
muestras y si las seales capturadas tienen uno o dos canales (Dimensin Vectorial).
v=wavread('violin.wav');
f=wavread('flauta.wav');
sound(v)
sound(f)
espv=abs(fft(v));
espf=abs(fft(f));
subplot(2,1,1),plot(espv),grid on,zoom,title('Espectro de un violin')
subplot(2,1,2),plot(espf),grid on,zoom,title('Espectro de una flauta')
una
seal
muestra
42860
97064
vectorial
monofnica.
Convolucin
Si se desea obtener la Convolucin entre dos vectores (seales) se utiliza la funcin conv(Vector1,
vector2).
Los archivos chivo.wav y shamen.wav se almacenaron anteriormente con un editor de ondas. Se necesita
hacer una grfica de la convolucin de estas dos seales.
chivo=wavread('chivo.wav');
shamen=wavread('shamen.wav');
convolucion=conv(chivo,shamen);
subplot(3,1,1),plot(chivo),title('chivo.wav'),grid on, zoom on
subplot(3,1,2),plot(shamen),title('shamen.wav'),grid on, zoom on
subplot(3,1,3),plot(convolucion),title('convolucion.wav'),grid on, zoom on
Deconvolucin
Si se desea obtener la deconvolucin de dos vectores (seales) se utiliza la funcin deconv(Vector1,
vector2) en donde Vector1 es el vector que tiene la seal compleja (convolucionada) y Vector2 es el
vector que se desea extraer de la seal compleja (convolucin).
Los archivos aplausos.wav y dingdong.wav se almacenaron anteriormente con un editor de ondas. Estas
dos seales se convolucionaron obtenindose una seal compleja. Se dese extraer el sonido del Aplauso
de tal manera que solo quede el sonido del Ding Dong. Una vez hecho esto graficar todas las seales
involucradas.
aplausos=wavread('aplausos.wav');
ding_dong=wavread('dingdong.wav');
convolucion=conv(aplauso,ding_dong);
deconvolucion= deconv(convolucion, aplausos);
subplot(4,1,1),plot(aplausos),title('aplausos.wav'),grid on, zoom on
subplot(4,1,2),plot(ding_dong),title('dingdong.wav'),grid on, zoom on
subplot(4,1,3),plot(convolucion),title('convolucion'),grid on, zoom on
subplot(4,1,4),plot(deconvolucion),title('deconvolucion del sonido aplausos, queda el sonido ding
dong'),grid on, zoom on
Espectros de las ondas ding dong, aplausos, su convolucin y la extraccin por deconvolucin
Compare la grfica del ding dong con la grfica despus de la convolucin.
Se deja al estudiante la grabacin del resultado de la deconvolucin en un archivo de sonido. Puede
descargar el archivo de muestra.
Ventaneo
Se utiliza con el fin de evitar que las discontinuidades introducidas al analizar solo una fraccin de la seal
o al introducir muestras con valor de cero introduzcan componentes de alta frecuencia en el espectro, que
son mas bien un artificio de las discontinuidades introducidas y no de la seal. Ya que la transformada
rpida de Fourier asume que la seal es peridica, es conveniente siempre hacerle un procedimiento de
ventaneo a la seal con la que se quiere trabajar.
MATLAB cuenta con diferentes tipos de ventanas como:
Hamming
Hanning
Bartlett
Blackman
Boxcar
Triangular
Gauss
Blackmanharris
Kaiser
Dolph-Chebyshev
Ventana Hamming
w=wavread('danih.wav');
h=hamming(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana hamming')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana hamming')
esp=abs(fft(x);
plot(esp),title('Espectro con la Ventana Hamming'),grid on, zoom on
Ventana Hanning
w=wavread('danih.wav');
h=hanning(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana hanning')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana hanning')
esp=abs(fft(x);
plot(esp),title('Espectro con la Ventana Hanning'),grid on, zoom on
Ventana Bartlett
w=wavread('danih.wav');
h=bartlett(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana bartlett')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana bartlett')
Ventana Blackman
w=wavread('danih.wav');
h=blackman(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana blackman')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana blackman')
Ventana Boxcar
w=wavread('danih.wav');
h=boxcar(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana boxcar')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana boxcar')
Ventana Triangular
w=wavread('danih.wav');
h=triang(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana triangular')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana triangular')
Ventana Gauss
w=wavread('danih.wav');
h=gausswin(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana gausswin')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana de Gauss')
Ventana Blackmanharris
w=wavread('danih.wav');
h=blackmanharris(length(w));
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana blackmanharris')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana blackmanharris')
Ventana Kaiser
w=wavread('danih.wav');
h=kaiser(length(w), 0.2);
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana kaiser')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana kaiser')
Ventana Dolph-Chebyshev
w=wavread('danih.wav');
h=chebwin(length(w), 10);
x=w.*h;
subplot(3,1,1),plot(w),grid on, zoom,title('hola.wav')
subplot(3,1,2),plot(h),grid on, zoom,title('ventana Dolph-Chebyshev')
subplot(3,1,3),plot(x),grid on, zoom,title('multiplicacion de hola con la ventana de Dolph-Chebyshev')