You are on page 1of 40

| Introducción | Objetivo

|

Introducción
MATLAB significa "MATrix LABoratory". Es un programa para cálculo técnico y científico; sus cálculos
numéricos se hacen en forma matricial y dada su gran capacidad para realizar diferentes gráficos en dos
y tres dimensiones y un lenguaje de programación propio se ha posicionado como una de las
herramientas de mayor uso por parte de la comunidad técnica y científica.
MATLAB es un entorno de computación y desarrollo de aplicaciones totalmente integrado orientado para
llevar a cabo proyectos en donde se encuentren implicados elevados cálculos matemáticos y la
visualización gráfica de los mismos. MATLAB integra análisis numérico, cálculo matricial, proceso de
señal y visualización gráfica en un entorno completo donde los problemas y sus soluciones son
expresados del mismo modo en que se escribirían tradicionalmente, sin necesidad de hacer uso de
programación tradicional, es por esto que MATLAB es una excelente herramienta de alto nivel para
desarrollar aplicaciones técnicas, es fácil 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 número de funciones incorporadas en el
programa principal. Estos Toolboxes cubren en la actualidad prácticamente casi todas las áreas
principales en el mundo de la ingeniería y la simulación, por ejemplo están los 'toolbox' para proceso de
imágenes, procesamiento digital de señales, control robusto, estadística, análisis financiero, matemáticas
simbólicas, redes neurales, lógica difusa, entre otros.
Combinando MATLAB con Signal Processing Toolbox, Wavelet Toolbox y un conjunto de herramientas
complementarias, se puede crear un ambiente de análisis personalizado de señales y desarrollo de
algoritmos DSP. Para simulación 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 código C
para su hardware designado.
MATLAB integra todos los requisitos claves de un sistema de computación técnico: cálculo numérico,
gráficos, herramientas para aplicaciones especificas y capacidad de ejecución en múltiples plataformas
como Windows 95/98/XP/NT, Macintosh, Unix y Linux.
Volver al inicio

Objetivo
Introducir al estudiante tanto de pregrado como de la especialización de la Carrera de Composición con
Medios Electroacústicos de la Universidad Nacional de Quilmes en el manejo correcto de MATLAB, ya
que esta herramienta proporciona al estudiante un medio de carácter único, para resolver los problemas
más complejos y difíciles.
Volver al inicio

La Interfase de Matlab

Ventana Inicial de MATLAB Version 6.5 Release 13
Command 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 símbolo >>, por defecto este símbolo 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 inglés answer) con sus correspondientes longitudes o tamaños.
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, razón por la cual al crear un directorio en otra posición
del disco duro, hay que buscarlo y posicionarse en él por medio del Current Directory.
Volver al inicio

Operaciones básicas con Matlab
En el siguiente apartado se expondran los elementos básicos para tener en cuenta al momento de
trabajar con Matlab.

Vectores y Matrices

Cálculos

Creación de vectores y matrices

Operaciones

Gráficos

Primero es importante resaltar algunas particularidades del programa:

Matlab es dependiente del contexto, es decir, las letras mayúsculas y minúsculas 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 función, como por ejemplo
ejemplo: title('Esta gráfica corresponde a una señal digital'). En un teclado español estándar
este caracter se encuentra en la tecla de la interrogación.

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 instrucción se emplea para indicar a MATLAB que realice el
cálculo 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.

Con la ayuda podemos obtener una información más detallada en cuanto a la sintaxis y
comandos, basta con escribir help seguido del comando en el prompt. Ejemplo: help plot
Volver al inicio

Vectores y Matrices
Dado que Matlab fue programado para análisis matricial, se hace indispensable hablar sobre los
conceptos básicos de los vectores y matrices.
Una matriz es un arreglo rectangular de números y su tamaño esta dado por m x n, siendo m el número
de filas y n el número de columnas.

Arreglo Matricial
El elemento aij, es el número que aparece en la fila i y la columna j de la matriz.
Un Vector Fila es un conjunto ordenado de n números escritos de la siguiente forma

Vector Fila
Un Vector Columna es un conjunto ordenado de n números escritos de la siguiente forma

Vector Columna
Para sumar dos matrices es condición necesaria que sean de igual tamaño. Para multiplicarlas es
necesario que el número de columnas de la primera sea igual al número de columnas de la segunda.
Para multiplicar una matriz por un vector, la longitud de la fila de la matriz (es decir, el número 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

Cálculos
Las operaciones o cálculos que no se asignan a una variable específica, se asignan por defecto a la
variable ans (answer).
>>7+10+3
ans = 20
Las operaciones se evalúan por orden de prioridad: primero las potencias, después las multiplicaciones y
divisiones y, finalmente, las sumas y restas. Las operaciones de igual prioridad se evalúan de izquierda a
derecha:
>>10/2*4
ans = 20
>>10/(2*4)
ans = 1.2500
En el siguiente ejemplo se genera un matriz de dimensión 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, más 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 dimensión del arreglo, se umplea el comando size(variable)

4] vector columna= 1 2 3 4 Las filas deben ir separadas por punto y coma >> Matriz= [1 2 3. En la ventana Workspace aparece el tamaño de las variables.>> size(x). se indica entre paréntesis la posición. por ejemplo la dimensión de x es 1x1. ans= 1 1 La operación x=7 en el área de trabajo de Matlab se vería de la siguinte forma Ventana de trabajo Obsérvese que en la ventana Command Window se realizaron tres ejecuciones: la asignación valor a la variable x (x=7). Volver al inicio Creación 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. En la ventana Command History se almacena todo lo que se ha escrito. 2. En el siguiente ejemplo se asigna el valor de la posición inicada a la variable posicion. la ejecución del comando length y la ejecución del comando size. . 4 5 6. 3. por ejemplo las variables y los comandos. 7 8 9] matriz= 123 456 789 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.

:) ans = 7 8 9 Similar al caso anterior. * respectivamente. >> columna=Matriz(:.5]. >> Matriz * vector ans = . >> vector= [3 . >> suma= vector1 + vector2 ans = [4 6 8] Multiplicación de matrices y vectores >> vector1= [1 2 3 ].3) ans = 3 6 9 Creación de Rangos La definición de rangos en Matlab se especifica según la sintaxis Variable = Cominezo : Intervalo : Final Para mas información 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 declaración >> 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.4 .3) ans = 6 Si se deseara asignar toda la tercera fila como un solo vector entonces se cambiaría el parámetro correspondiente a la columna por el caracter : con lo cual se indica que corresponde a todas las columnas. -. resta. 1 1 1 ]. >> vector2= [3 4 5. si se desea la tercera columna en su totalidad entonces se reemplaza el parámetro de la fila por el caracter : con lo cual se indica que corresponde a todas las filas.>>posicion=Matriz(2.1 2 3. Suma de vectores >>vector1= [1 2 3 ]. >> vector2= [3 4 5]. >> vector1. /.*vector2 ans = 3 8 15 >> Matriz = [1 2 3. división y multiplicación utilizan los operadores +.]. >> fila=Matriz(3.

^2.5] ans = 3 4 5 >> vector' ans = 3 4 5 Volver al inicio Gráficos Consideremos el ejemplo de graficar la función x^2: >> x=0:0. % x es un vector.title(' Grafica de la función x^2') >> grid on %permite visualizar las cuadriculas Gráfica de x2 Volver al inicio Definición de funciones con M-files .26 26 12 Transposición de vectores >> vector = [3. con incrementos de 0. >> plot (y). que empieza en 0.4.1:1.1 y finaliza en 1 >> y=x.

frecuencia. [suma. Volver al inicio Análisis de una Onda Seno Para poder generar ondas senosoidales que involucren parámetros tales como amplitud. El siguiente es el cuerpo de la función. division]=comandos(var_a. El vocabulario que aquí que se escribe es expresado en términos de otras funciones existentes. multiplicacion.tiempo. Matlab permite más de una variable de salida. Es importante tener en cuenta que toda función tiene que ser identificada por un nombre diferente a las ya existentes en MATLAB pues MATLAB no maneja sobrecarga de funciones. se pueden crear con el objetivo de programar nuevas rutinas en MATLAB. Para retornar este valor no se emplea algún comando como return sino que se asigna dicho nombre de variable durante la ejecución al dato que se desea retornar.t) crea una senosoidal % amp = amplitud % fr = frecuencia % ph = fase . A diferencia de los lenguajes de programación formales. multiplicación y división de dos variables.1 $ $Date: 2004/20/06 19:12:36 $ suma=var_a+var_b. hay que definir la función senosoidal. Hay que anotar un detalle especial. var_a = primera variable var_b = segunda variable suma = resultado de la suma resta = resultado de la resta multiplicacion = resultado de la multiplicación división = resultado de la división % $Revision: 1.fr. resta.ph. 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. var_b) %COMANDOS retorna la suma.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 están definidas en un archivo de este tipo en un directorio especial. function [x]=senosoidal(amplitud. multiplicacion=var_a*var_b.fm. Las sintaxis es la siguiente: Palabra reservada function [variables de salida] = Nombre de la función (Parámetros de entrada) % información que se presentará como ayuda % con el comando help 'Nombre de la función' Estructura del programa. resta=var_a-var_b. division=var_a/var_b. Al emplear el caracter . tiempo y ángulo de fase.fase) %SENOSOIDAL crea una senosoidal % SENOSOIDAL(amp. También es posible crear archivos de este tipo con los cuales definir funciones propias para emplearlas posteriormente.es decir. frecuencia de muestreo.samp.frecuencia. al final de un comando se indica que no debe presentar el resultado y si en la función anterior no se indicara esto entonces se presentarían todos los coamdnos durante la ejecución de la rutina. resta.

Vamos ahora a analizar dos ondas senosoidales que solo varían en su frecuencia.*x2. Nota: Para poder representar digitalmente estas señales. x(n+1)=amplitud*sin((angulo*n)+fase).440. escribir pwd. Para poder graficar todas las ondas con sus resultados.zoom.3).title('Onda Seno 441 Hz') >> subplot(4. esta frecuencia corresponde a la frecuencia de Nyquist. la cual es 500 Hz. una es a 440 Hz y la otra es a 441 Hz.title('Onda Seno 440 Hz * Onda Seno 441 Hz') .5. A una variable x1 se asigna el resultado de la función senosoidal con todos sus parámetros >> x1=senosoidal(0. seguido del comando plot(figura) y un título para el gráfico. A una variable xx se asigna el resultado de la multiplicación de las dos ondas senosoidales >> xx=x1.5.m Siempre es importante tener en cuenta el teorema fundamental de muestreo el cual dice que para representar digitalmente una señal que contiene componentes de frecuencia hasta x Hz es necesario usar una frecuencia de muestreo de al menos 2x muestras por segundo. 880 Hz y para 441 Hz.2).plot(xx).1. posición. las dos ondas solo se van a diferenciar en sus frecuencias.1.title('Onda Seno 440 Hz') >> subplot(4.plot(x1).zoom.zoom. % Como los vectores empiezan en 1.plot(x).grid on. las dos señales van a tener los siguientes parámetros: una amplitud de 0.grid on.4). >> subplot(4.1. 882 Hz. se utiliza el comando subplot(cantidad de figuras. x arranca una % posición después end Para verificar que la función senosoidal quedó guardada en la carpeta Work.500.1).0). A una variable x2 se asigna el resultado de la función senosoidal con todos sus parámetros >> x2=senosoidal(0.1 $ $Date: 2004/20/06 19:12:36 $ for n=0:fm*tiempo-1 angulo=2*pi*frecuencia/fm.5.grid on.0). la frecuencia de muestreo debería ser como mínimo para 440 Hz.m) y al escribir dir debe aparecer la función senosoidal.zoom. numero de la figura).title('Onda Seno 440 Hz + Onda Seno 441 Hz') >> subplot(4.1.441. esta función devuelve todo el path de la función (D:\MATLAB6p5\Work\senosoidal.1. se pide: graficar las ondas hasta nyquist y graficar sus correspondientes espectros.500. A una variable x se asigna el resultado de la suma de las dos ondas senosoidales >> x=x1+x2.% % samp = frecuencia de muestreo t = tiempo de muestreo % Copyright (c) 2004 by Antonio Quintero % $Revision: 1. para nuestro ejemplo se esta tomando solo la mitad de la frecuencia de muestreo.grid on.plot(x2). 1000 de frecuencia de muestreo durante 1 segundo y con un ángulo de fase 0.1.

plot(espx1).Gráficas de cada onda (440.2). 440+441.grid on. 441.title('Espectro Onda Seno 440 Hz') >> subplot(4. Seguidamente se hace el mismo proceso para las otras ondas generadas.1. Ahora se grafican las respuestas en una sola gráfica >> subplot(4.1). 440*441) Los siguientes son los sonidos que resultaron de la anterior práctica:  440  441  440+441  440*441 El siguiente paso corresponde al análisis de los espectros de cada una de estas ondas.grid on. >> espxx=abs(fft(xx)). >> espx=abs(fft(x)).plot(espx2).title('Espectro Onda Seno 441 Hz') .zoom.1. >> espx2=abs(fft(x2)). Primero se asigna a una variable espx el valor absoluto de la transformada rápida de Fourier de la función seno a 440 Hz almacenada anteriormente en la variable x1 >> espx1=abs(fft(x1)).zoom.

zoom.stem(espx).4). En la siguiente figura se muestra un zoom hecho en cada gráfica con el fin de poder establecer en que valores están exactamente los espectro.title('Espectro de la Onda Seno 440 Hz * Onda Seno 441 Hz') Gráficas de los espectros de cada onda (440.title('Espectro de la Onda Seno 440 Hz * Onda Seno 441 Hz') .grid on.zoom. esta función muestra la figura en forma de barras de tal manera que en algunos casos es más fácil observar que sucede en la gráfica.1.title('Espectro Onda Seno 440 Hz') >> subplot(4.stem(espx2).title('Espectro Onda Seno 441 Hz') >> subplot(4.3).grid on.plot(espxx). 441.1. 440*441) Las gráficas expresan las simetrías de las energias de todas las ondas.zoom.title('Espectro de la Onda Seno 440 Hz + Onda Seno 441 Hz') >> subplot(4. 440+441.1.grid on.zoom.4).>> subplot(4.1.zoom.stem(espx1).grid on.grid on.stem(espxx).1). >> subplot(4.title('Espectro de la Onda Seno 440 Hz + Onda Seno 441 Hz') >> subplot(4. Hay otra manera de graficar los espectros por medio de la función stem(varible).grid on.plot(espx).3).2).1.zoom.1.

es ones(m. ceros Por ejemplo para sumar los elementos de un vector fila se puede obtener multiplicando dicho vector por un vector columna de ceros. donde cada una es una copia de x y el resultado se multiplica por un vector fila x. definida por la frecuencia de muestreo sobre la longitud de la señal y su intervalo de muestreo. no con motivos de calculo. se podría preguntar cuál es la frecuencia de análisis.n). . Hay algunas funciones definidas en MATLAB que son de mucha ayuda: sum. Si se quiere crear una matriz que tenga 10 filas.n). se utiliza zeros(m. en MATLAB es importante evitar los bucles for si se usan para hacer operaciones sobre elementos de un vector. sino en operaciones de control solamente. 440*441) Ya con todos estos datos. Volver al inicio Optimización del for El proceso de convertir un bucle for en una operación matricial o vectorial se llama vectorizar. en este caso la programación es ineficiente debido a que los bucles for son interpretados en Matlab lo cual hace lento el proceso.Gráficas de los espectros de cada onda (440. definida a su vez como la unidad sobre la frecuencia de muestreo. 441. este bucle se debe utilizar como última opción. es una matriz con unos para una sumar matriz dos con vectores. 440+441.

N)< lo x(M. % x = matriz o vector de entrada % lo = límite inferior %hi = limite superior % $Revision: 1.N)=hi else if x(M. limite_inf. 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] Vectorizar la función Clip function [y]= clip (matriz. end.hi) recorta los elementos que se encuentran por encima del %limite superior y por debajo del limite inferior de la matriz x .N)>hi x(M.N)=lo end. se está utilizando un doble for para recorrer todos los elementos de la matriz. o sea uno o cero.1 $ $Date: 2004/20/06 19:12:36 $ [M.xx=ones(10.lo. los cuales pueden ser empleados como valores numéricos y emplearlos como mascaras (a través de la multiplicación) para seleccionar partes de la matriz x.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 condición es falsa y 1 si la condición es verdadero. Por ejemplo ([x<=hi] +[x>hi]) es una tautología y por lo tanto todos sus valores son 1 .N]= size(x). for m:1:M for n=1:N if x(M. Con las operaciones vectoriales se puede optimizar utilizando los condiconales que devuelven true o false.limite_sup) %Versión relenta %CLIP crea La función clip % clip(x. y=x Aquí se puede apreciar el siguiente problema.

ph.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.ph.*[x<lo]).fr. % Como los vectores empiezan en 1.samp.fase) %Versión sin for %SENOSOIDAL crea una senosoidal % SENOSOIDAL(amp.frecuencia.1 $ $Date: 2004/20/06 19:12:36 $ y= (x.*[x<=hi]) +(hi . .fr.lo. y= (y.hi) recorta los elementos que se encuentran por encima del %limite superior y por debajo del limite inferior de la matriz x . Vectorizar la función Senosoidal Originalmente ya habiamos definido la función senosoidal de la siguiente forma: function [x]=senosoidal(amplitud. x(n+1)=amplitud*sin((angulo*n)+fase).samp.fm.*[x>hi]).frecuencia. limite_inf.fm. x arranca una % posición después end Optimizando la función este sería el resultado: function [x]=senosoidal(amplitud.limite_sup) %Versión rápida %CLIP crea La función clip % clip(x.tiempo. % x = matriz o vector de entrada % lo = límite inferior %hi = limite superior % $Revision: 1. con la función etime y el número de operaciones en punto flotante con la función flops.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.tiempo.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).function [y]= clip (matriz. Para obtener más comprensión se le recomienda al lector consultar el operador : escribiendo help colon en le path de MATLAB.*[x>=lo]) +(lo .fase) %Versión con for %SENOSOIDAL crea una senosoidal % SENOSOIDAL(amp. angulo=2*pi*frecuencia/fm.1 $ $Date: 2004/20/06 19:12:36 $ n=0:1:fm*tiempo-1. también si se quiere comparar el tiempo de ejecución de las funciones relenta y rápida.

. En este caso la señal es exactamente una replica de la señal de entrada. definida en el rango [-1.1]. causando distorsión por sus altos componentes de frecuencia. Onda seno dentro del rango [-1 1] En la anterior gráfica se puede apreciar que la señal no excede los límites de una señal sinusoidal.Efecto Clipping El Clipping ocurre cuando una señal excede los límites del diseño.

Onda seno corregida .Onda seno con valores fuera del rango [-1 1] En la anterior gráfica se puede apreciar cómo la onda sobrepasa los niveles para los cuales está definida una onda senosoidal. En este caso la señal sobrepaso los niveles de la señal de entrada ocurriendo el efecto de Clipping.

NBits]=wavread('file. frecuencia de muestreo (admite 8000. s= wavread('sonido_uno. 22050 y 44100).'sonido_uno. se emplea la siguientes sintaxis: [y.wav') .Fs.Fs. Si no se especifican los NBits el programa asume Si no se determina una Fs.wav').wav') sound(Var) Para el ejemplo anterior File es el nombre del archivo que se desea escuchar. MATLAB cuenta con la función wavrecord(t*Fs. su frecuencia de muestreo o el número de bits NBits por muestra.Fs) el resultado será un sonido con una frecuencia de muestreo definida por el usuario. 24 o 32) y el nombre del archivo en el cual se grabará el sonido. sound(s.Fs.44100) Si se desean conocer los datos de un archivo en formato wav.Fs.+1]. Si se utiliza sound(var. eliminando los componentes altos de frecuencia. la frecuencia de muestreo.wav') Para escuchar o manipular vectorialmente un sonido almacenado en formato wav se utilizan dos comandos. Por ejemplo. 11025. se asigna a una variable s el comando wavread y luego se escucha con el comando sound.Bits) sonará con una frecuencia de muestreo definida por el usuario y determinados número de Bits por muestra.'Nombre. Fs. Hay que tener en cuenta que los valores de amplitud que estén fuera del rango [-1.1] ya que los valores que están fuera del rango son clipeados. Por ejemplo. Se asume que los valores están dentro del rango [-1. el programa asume por defecto 8000 Hz.16. por defecto 16 Bits. La variable Var corresponde al vector que se desea escuchar cuya frecuencia de muestreo por defecto será de 8192 Hz. con una frecuencia de muestreo de 11.Ch) cuyos parámetros corresponden al tiempo en segundos de captura de la señal. los valores de amplitud deben estar en el rango [-1.En esta gráfica se puede ver cómo la señal se corrige. Para guardar una señal capturada en formato wav se puede hacer uso de la función wavwrite(y. para escuchar la señal guardada anteriormente como sonido_uno. razón por la cual los componentes que están por encima de 1 y por debajo de -1 se pierden. Si se desea capturar una señal en stereo con 5 segundos de duración. el tipo de canal (1 para mono y 2 para stereo). para guardar el sonido capturado anteriormente se empleará el siguiente comando: wavwrite(y.wav') cuyos parámetros corresponden a la señal grabada. Si se emplea sound(var. como los valores del vector. 16. el número de bits (puede ser 8. wavread('File.Fs. y = wavrecord(5*Fs. Manejo de archivos de sonido Para capturar una señal por la entrada auxiliar de la tarjeta de sonido del computador.NBits. 2).+1] son clipeados.025 podemos emplear las siguients funciones: Fs = 11025.

wav') En la variable y se almacenan los valores del vector.wav'). en la variable Nbits se almacena el número de bits por muestra y en la variable Opts se almacena el resto de la información.zoom. además se desea saber cuál fue el tamaño de las muestras y si las señales capturadas tienen uno o dos canales (Dimensión Vectorial). en la variable Fs se almacena la frecuencia de muestreo y en la variable Nbits se almacena el número de bits por muestra del archivo con formato wav.wav'.'size') En la variable siz se almacena la dimensión del archivo en formato wav.1.Opts]=wavread('file.title('Espectro de una flauta') .title('Espectro de un violin') subplot(2.plot(espv).1.En la variable y se almacenan los valores del vector.NBits. f=wavread('flauta.1). subplot(2.Fs. Por su parte fft(x) es la transformada discreta de Fourier de un vector x. como el copyright o el título.Num) En donde la variable Num corresponde a la cantidad de muestras que se desean tomar del archivo. Los archivos violin.wav'). espf=abs(fft(f)).plot(espf). se emplea el siguiente comando[y.wav se almacenaron anteriormente con el comando wavwrite.wav'. se utiliza la sentencia x=abs(fft(vector a trabajar)) en donde abs se refiere al valor absoluto o a la magnitud. Si se desea obtener la información adicional contenida en un archivo de formato wav. en la variable Fs se almacena la frecuencia de muestreo.2).zoom. v=wavread('violin. sound(v) sound(f) espv=abs(fft(v)). FFT Si se desea obtener la transformada rápida de Fourier. se utiliza el siguiente comando: siz=wavread('file.grid on. Se necesita hacer una gráfica espectral de sus señales. Si se desea saber la dimensión de los canales del archivo en formato wav.grid on. Si se desean leer las primeras N muestras del archivo en formato wav se emplea el siguiente comando: [n]=wavread('file.wav y flauta.

2).grid on.shamen). zoom on subplot(3. Se necesita hacer una gráfica de la convolución de estas dos señales.wav'). lo que indica que es una señal monofónica una señal muestra 42860 97064 vectorial monofónica. vector2).wav').plot(shamen). zoom on .1). Convolución Si se desea obtener la Convolución entre dos vectores (señales) se utiliza la función conv(Vector1.3). Los archivos chivo. Tamaño de cada length(v) retorna length(f) retorna Dimensión size(v) retorna 42860X1. subplot(3. convolucion=conv(chivo.title('chivo.1.1.1. lo que indica que es size(f) retorna 97064X1.plot(chivo).title('convolucion.wav').wav se almacenaron anteriormente con un editor de ondas. chivo=wavread('chivo.wav').grid on.wav').Espectros de las ondas de violín y flauta En las gráficas se pueden observar la cantidad de componentes armónicas para estos dos instrumentos.grid on. zoom on subplot(3.plot(convolucion).wav y shamen. shamen=wavread('shamen.title('shamen.

2). shamen y su convolución Se deja al estudiante la grabación del resultado de la convolución en un archivo de sonido.title('Take. zoom on subplot(3.1.Espectros de las ondas chivo.title('convolucion.plot(take).plot(voice).grid on.wav y take.wav'). zoom on .grid on.3). take=wavread('take.1. Otro Ejemplo: Los archivos voice.wav').grid on.wav').wav se almacenaron anteriormente con un editor de ondas. voice=wavread('voice. subplot(3.1). Puede descargar el archivo de muestra.wav').wav'). convolucion=conv(voice. zoom on subplot(3.1.plot(Convolucion). Se necesita hacer una gráfica de la convolución de estas dos señales.title('Voice.take).

deconvolucion= deconv(convolucion.1.title('dingdong. ding_dong=wavread('dingdong.wav se almacenaron anteriormente con un editor de ondas.wav y dingdong.wav').wav'). Los archivos aplausos. queda el sonido ding dong').plot(deconvolucion). Puede descargar el archivo de muestra. zoom on subplot(4. zoom on subplot(4. Deconvolución Si se desea obtener la deconvolución de dos vectores (señales) se utiliza la función deconv(Vector1. subplot(4.plot(convolucion). Estas dos señales se convolucionaron obteniéndose una señal compleja. zoom on subplot(4.title('deconvolucion del sonido aplausos.1.4).grid on. convolucion=conv(aplauso.plot(ding_dong).title('convolucion'). take y su convolución Se deja al estudiante la grabación del resultado de la convolución en un archivo de sonido. Una vez hecho esto graficar todas las señales involucradas. aplausos=wavread('aplausos.grid on.title('aplausos.grid on.plot(aplausos).1).wav').1. Se dese extraer el sonido del Aplauso de tal manera que solo quede el sonido del Ding Dong.Espectros de las ondas voice. aplausos).3).2). vector2) en donde Vector1 es el vector que tiene la señal compleja (convolucionada) y Vector2 es el vector que se desea extraer de la señal compleja (convolución).wav').ding_dong).1.grid on. zoom on .

Puede descargar el archivo de muestra. es conveniente siempre hacerle un procedimiento de ventaneo a la señal con la que se quiere trabajar. Se deja al estudiante la grabación del resultado de la deconvolución en un archivo de sonido. que son mas bien un artificio de las discontinuidades introducidas y no de la señal.Espectros de las ondas ding dong. MATLAB cuenta con diferentes tipos de ventanas como:  Hamming  Hanning  Bartlett  Blackman  Boxcar  Triangular . Ventaneo Se utiliza con el fin de evitar que las discontinuidades introducidas al analizar solo una fracción de la señal o al introducir muestras con valor de cero introduzcan componentes de alta frecuencia en el espectro. Ya que la transformada rápida de Fourier asume que la señal es periódica. su convolución y la extracción por deconvolución Compare la gráfica del ding dong con la gráfica después de la convolución. aplausos.

x=w. h=hamming(length(w)).2).1).plot(w). Gauss  Blackmanharris  Kaiser  Dolph-Chebyshev Ventana Hamming w=wavread('danih.grid on.1.wav') subplot(3.1. zoom.grid on.plot(x). zoom.1.wav').title('multiplicacion de hola con la ventana hamming') Sonido y resultado después de pasarlo pro la ventana Hamming Ahora visualizamos el espectro . subplot(3.title('hola.grid on.*h. zoom.plot(h).3).title('ventana hamming') subplot(3.

plot(h). x=w.wav') subplot(3.plot(x).grid on.esp=abs(fft(x).1. plot(esp).title('hola. zoom.plot(w).grid on. subplot(3. zoom.1.grid on. zoom on Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante Ventana Hanning w=wavread('danih.1. zoom.3).*h.title('Espectro con la Ventana Hamming').title('ventana hanning') subplot(3.title('multiplicacion de hola con la ventana hanning') .wav').1).2).grid on. h=hanning(length(w)).

grid on.title('Espectro con la Ventana Hanning').Sonido y resultado después de pasarlo pro la ventana Hanning Ahora visualizamos el espectro esp=abs(fft(x). plot(esp). zoom on .

title('ventana bartlett') subplot(3.plot(h).2).Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante Ventana Bartlett w=wavread('danih.plot(w).*h.title('multiplicacion de hola con la ventana bartlett') .wav') subplot(3.wav'). h=bartlett(length(w)).grid on. zoom. subplot(3.1. x=w.1. zoom.grid on.grid on.1.plot(x).title('hola.1). zoom.3).

plot(esp). zoom on .Sonido y resultado después de pasarlo pro la ventana Bartlett Ahora visualizamos el espectro esp=abs(fft(x).grid on.title('Espectro con la Ventana Bartlett').

Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante Ventana Blackman w=wavread('danih.1.plot(x).title('hola.title('multiplicacion de hola con la ventana blackman') .wav'). zoom.*h. h=blackman(length(w)).grid on.3).1. x=w.wav') subplot(3.1. zoom.grid on.grid on.plot(w).2).plot(h). zoom.1).title('ventana blackman') subplot(3. subplot(3.

Sonido y resultado después de pasarlo pro la ventana Blackman Ahora visualizamos el espectro esp=abs(fft(x). zoom on . plot(esp).title('Espectro con la Ventana Blackman').grid on.

grid on.1).wav'). zoom. zoom.grid on. x=w. h=boxcar(length(w)).title('hola.wav') subplot(3.1.1.1.plot(h).grid on.plot(x).3).*h.title('ventana boxcar') subplot(3.2).title('multiplicacion de hola con la ventana boxcar') .Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante Ventana Boxcar w=wavread('danih. subplot(3.plot(w). zoom.

zoom on .grid on.Sonido y resultado después de pasarlo pro la ventana Boxcar Ahora visualizamos el espectro esp=abs(fft(x).title('Espectro con la Ventana Boxcar'). plot(esp).

plot(h).wav') subplot(3.3).title('hola.2).grid on. x=w.title('ventana triangular') subplot(3.1.Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante Ventana Triangular w=wavread('danih.1). zoom. h=triang(length(w)).title('multiplicacion de hola con la ventana triangular') .1.grid on.1. zoom.wav').grid on.*h. zoom.plot(x). subplot(3.plot(w).

zoom on .Sonido y resultado después de pasarlo pro la ventana Triangular Ahora visualizamos el espectro esp=abs(fft(x).title('Espectro con la Ventana Triangular'). plot(esp).grid on.

plot(x). zoom. zoom. x=w.Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante Ventana Gauss w=wavread('danih.grid on.title('hola.grid on.wav') subplot(3.1.grid on.3).2).title('ventana gausswin') subplot(3.1.title('multiplicacion de hola con la ventana de Gauss') .wav'). zoom. h=gausswin(length(w)).plot(w).1).1.*h. subplot(3.plot(h).

3).1.title('hola.wav') subplot(3.1. h=blackmanharris(length(w)). zoom.wav').1).Sonido y resultado después de pasarlo pro la ventana Gausswin Compare el sonido original con el sonido resultante Ventana Blackmanharris w=wavread('danih.2).grid on.plot(w).1.title('multiplicacion de hola con la ventana blackmanharris') .*h.plot(h).title('ventana blackmanharris') subplot(3. zoom.plot(x).grid on.grid on. zoom. subplot(3. x=w.

2). h=kaiser(length(w). x=w.1.plot(x).title('ventana kaiser') subplot(3.Sonido y resultado después de pasarlo pro la ventana blackmanharris Compare el sonido original con el sonido resultante Ventana Kaiser w=wavread('danih. subplot(3.*h.plot(h).grid on.grid on.2). zoom. zoom.1.grid on. 0. zoom.plot(w).1.wav').title('hola.3).title('multiplicacion de hola con la ventana kaiser') .1).wav') subplot(3.

grid on.Sonido y resultado después de pasarlo pro la ventana kaiser Ahora visualizamos el espectro esp=abs(fft(x). plot(esp). zoom on .title('Espectro con la Ventana kaiser').

grid on.grid on.title('multiplicacion de hola con la ventana de Dolph-Chebyshev') .plot(w).3).wav') subplot(3. h=chebwin(length(w). subplot(3. x=w.wav').title('ventana Dolph-Chebyshev') subplot(3.1.2).title('hola.plot(x). 10). zoom.Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante Ventana Dolph-Chebyshev w=wavread('danih.1).grid on. zoom.1.1.*h.plot(h). zoom.

title('Espectro con la Ventana Dolph-Chebyshev').Sonido y resultado después de pasarlo pro la ventana Dolph-Chebyshev Ahora visualizamos el espectro esp=abs(fft(x). plot(esp).grid on. zoom on .

Espectro del sonido después de pasarlo por la ventana Compare el sonido original con el sonido resultante .