FACULTAD DE INGENIERÍA DE SISTEMAS Y
ELECTRÓNICA
Trabajo de investigación
“Procesamiento de audio con Matlab”
Autor:
Huarancca Sulca, Leonardo 1410725
Carrera:
INGENIERÍA MECATRÓNICA
Profesor: Orellana Ambrosio, Miguel Ángel
Lima, 2018
pág. 1
INDICE
INTRODUCCIÓN---------------------------------------------------------------------------- Pág. 3
OBJETIVO GENERAL--------------------------------------------------------------------- Pág.
OBJETIVOS ESPECÍFICOS-------------------------------------------------------------Pág.
1. DEFINICIÓN----------------------------------------------------------------------------- Pág.
1.1. SONIDO---------------------------------------------------------------------- Pág.
1.2. Matlab------------------------------------------------------------------------ Pág.
1.2.1. Características de Matlab para procesar audio.
1.3. Cargar sonidos a matlap
1.3.1. Formato wav
1.3.2. Estándares de audio
1.4. Modos de carga de archivos wav.
2. COMANDOS
2.1. comando wavread
2.1.1. Sintaxis
2.1.2. AUDIOREAD
2.2. COMANDO AUDIOPLAYER
2.2.1. Sintaxis
2.3. COMANDO SIZE
2.3.1. Sintaxis
2.4. COMANDO PLOT
2.4.1. Sintaxis
2.5. COMANDO SOUND
2.5.1. Sintaxis
3. DESARROLLO
4. APLICACIONES
4.1. Recorte del audio
4.2. Inversión de la señal
4.3. Control de la velocidad de reproducción del audio
pág. 2
5. CODIGO COMPLETO
6. Bibliografía
pág. 3
INTRODUCCIÓN
El procesamiento de sonido es uno de los estudios más extensos en el rubro
digital, ya que este fenómeno se encuentra en todo nuestro ambiente, por ello de
siglos atrás se fueron investigando y creando equipos electrónicos los cuales son
capaces de transmitir un sonido a diferentes frecuencias y varias el volumen
sonoro. En esta investigación se utiliza el software Matlab y sus herramientas
para procesar un sonido el cual se editará de tres formas para poder apreciar las
diferentes aplicaciones que tiene, así también se logra visualizar y escuchar el
sonido.
Objetivo general
Investigar el funcionamiento de un procesamiento de sonido con Matlab.
Objetivos específicos
Desarrollar tres tipos de procesamiento de audio.
pág. 4
Describir los comandos de cada procesamiento.
Visualizar y escuchar los cambios del audio procesado.
1. DEFINICIÓN
1.2. SONIDO.
Es un fenómeno que el hombre logra percibir y obtener gran cantidad de
información, el cual es producido por el aire donde se genera el movimiento
de una onda de presión también llamada onda acústica. La parte que logra
captar este fenómeno es el órgano auditivo el cual capta la onda acústica el
cual se descompone en frecuencias y se transforma en estímulos
eléctricos, en donde el cerebro se encarga de procesar este sonido.
Por otro lado para imitar este sistema que nuestro cuerpo lo interpreta, se
crearon los micrófonos el cual se encarga de capturar el sonido, donde
convierte la onda acústica en señales eléctricas, del mismo modo para
percibir estos sonidos se utilizan altavoces el cual hace lo contrario
convierte la señal eléctrica en una onda acústica.
Para poder captar estas ondas y trasmitir a la computadora se convierte las
señales eléctricas que provienen del micrófono en señales digitales como
se muestra en la figura 1.
Figura 1. Conversión de señal analogía a digital.
1.3. Matlab
Matlab proviene de las abreviaturas Matrix LaBoratory, el cual es un
software que ayuda a la solución matemática con datos en la computadora,
pág. 5
las funciones de matlab con muy variadas y pueden ejecutarse mediante
comando y utilzarse para desarrollar programas, así mismo este software
cuenta con una plataforma de ayuda online a la hora de presentarse
errores o a la falta de conocimiento de alguno de ellos, tambein se puede
ejecutar la opción help seguido del comando, ejemplo ( help wavread ).
Para la investigación se utilizó MATLAB R2014a en el cual se enfocara
sobre el tema de procesamiento de sonidos.
Figura 2
Figura 3
1.3.1. Características de Matlab para procesar audio.
Este software ofrece lo que se requiere para el ingreso y salidad de audio.
Cuenta con funciones de alto nivel para el tratamiento de señales.
Logra procesar a tiempo real los audios
Al concluir la programación se puede confiar del software y lograr
implementar en algún sistema físico.
pág. 6
1.4. Cargar sonidos a matlap
Para lograr reproducir un sonido en matlab existen varias formas, pero
antes de ello se debe de tener un archivo de audio en formato wav el cual
es aceptado por el software..
1.4.1. Formato wav
También llamado Waveform Audio File Format (wav) este formato
cuenta sin comprensión de datos el cual es propiedad de Microsoft e
IBM el cual es usado para almacenar sonidos en formatos digitales,
este admite archivos mono y estéreo con diversa resoluciones y
velocidades de muestreo, para la condición de muestreo se usa el
protocolo PCM que se encarga de convertir la señal analógica en digital
por medio de un tren de impulsos.
El estándar que se considera es de 44100 Hz de muestreo y 16 bits de
resolución.
Figura 4. Condiciones de muestreo
1.4.2. Estándares de audio
Muestreo:
8 kHz (telefonía)
22,05 kHz (comunicación por radio)
32 kHz (video miniDV)
44,1 kHz (CD)
48 kHz (Audio profesional y televisión digital)
pág. 7
96 kHz (Audio de alta definición, DVD y blu-ray)
Resolución:
8 bits (típico audio de los juguetes)
16 bits (CD y archivos que emplean PCM)
24 bits (Alta calidad de audio - Estudio de grabación)
1.5. Modos de carga de archivos wav.
Existen dos formas de cargar el audio, primero copiar el archivo wav en la
carpeta predeterminada de Matlab el cual se encuentra en la carpeta de
“documento”, así a la hora de abrir el programa nos mostrara el archivo
como se muestra en la figura 4.
Figura 4. Módulo de archivos cargados a Matlab
Por otro lado, la siguiente forma de subir este archivo, es crear un carpeta
dentro de ella se debe de encontrar el archivo wav, posteriormente con la
opción de este icono se puede cargar el archivo buscando la dirección
de ruta.
2. COMANDOS
2.1. comando wavread
Para que el programa lea el audio se usa el comando “wavread” donde
matlab explica el modo de uso y como alternativa brinda la opción del
comando auread
pág. 8
2.1.2 Sintaxis
y = wavread ('nombre de archivo')
[y, Fs, bits] = wavread ('nombre de archivo')
[...] = wavread ('nombre de archivo', N)
[...] = wavread ('nombre de archivo', [N1 N2])
[...] = wavread ('nombre de archivo', 'tamaño')
Donde:
Wavread: admite datos multicanal, con hasta 32 bits por muestra, y
admite la lectura de archivos de 24 y 32 bits .wav.
y = wavread('filename'): carga un archivo WAVE especificado por la
cadena filename, devolviendo los datos muestreados en y. La
.wavextensión se adjunta si no se da ninguna extensión. Los valores
de amplitud están en el rango [-1,+1].
[y,Fs,bits] = wavread('filename'): devuelve la frecuencia de muestreo
( Fs) en Hertz y el número de bits por muestra ( bits) utilizados para
codificar los datos en el archivo.
[...] = wavread('filename',N): devuelve solo las primeras Nmuestras
de cada canal en el archivo.
[...] = wavread('filename',[N1 N2]): devuelve solo muestras a
N1través N2de cada canal en el archivo.
siz = wavread('filename','size'): devuelve el tamaño de los datos de
audio contenidos en el archivo en lugar de los datos de audio reales,
devolviendo el vector siz = [samples channels].
[Link]. AUDIOREAD: Matlab presentó una actualización de este comando el
cual es audioread.
[Link].1. Syntax
[y,Fs] = audioread(filename)
[y,Fs] = audioread(filename,samples)
pág. 9
[y,Fs] = audioread(___,dataType)
Donde:
[y,Fs] = audioread(filename) lee datos del archivo nombrado
filename, y devuelve datos muestreados y, y una frecuencia
de muestreo para esos datos Fs,.
[y,Fs] = audioread(filename,samples) lee el rango
seleccionado de muestras de audio en el archivo, donde
sampleses un vector del formulario [start,finish].
[y,Fs] = audioread(___,dataType) retornos de datos
muestreados en los datos de la gama correspondiente a la
dataTypede 'native'o 'double', y pueden incluir cualquiera de
los argumentos de entrada en sintaxis anteriores.
Ejemplo de ejecución de comando
Cree un archivo WAVE a partir del archivo de ejemplo
[Link] vuelva a leerlo en MATLAB®.
Cree un .wavarchivo WAVE (wav) en la carpeta actual.
load [Link]
filename = '[Link]';
audiowrite(filename,y,Fs);
clear y Fs
Lea los datos de nuevo en MATLAB usando audioread.
[y,Fs] = audioread('[Link]');
Reproduce el audio.
sound(y,Fs);
pág. 10
6.2. COMANDO AUDIOPLAYER
Crea un objeto para reproducir audio
2.2.1. Sintaxis
player = audioplayer(Y,Fs)
player = audioplayer(Y,Fs,nBits)
player = audioplayer(Y,Fs,nBits,ID)
player = audioplayer(recorder)
player = audioplayer(recorder,ID)
Donde:
player = audioplayer(Y,Fs)Crea un objeto para señal , utilizando
frecuencia de muestreo . La función devuelve un identificador para el
objeto, .audioplayerYFsaudioplayerplayer
player = audioplayer(Y,Fs,nBits)Utiliza nBitsbits por muestra para
señal Y.
player = audioplayer(Y,Fs,nBits,ID)utiliza el dispositivo de audio
identificado por IDpara salida.
player = audioplayer(recorder)crea un objeto utilizando el objeto
grabador de audio .audioplayerrecorder
player = audioplayer(recorder,ID)crea un objeto desde recorderque
utiliza el dispositivo de audio identificado por IDpara salida.
2.3. COMANDO SIZE
Nos muetra el tamaño de la matriz y su sintaxis es:
2.3.1. Sintaxis
sz = size(A)
pág. 11
szdim = size(A,dim)
[m,n] = size(A)
[sz1,...,szN] = size(A)
Donde:
sz = size(A)devuelve un vector de fila cuyos elementos contienen la
longitud de la dimensión correspondiente de A. Por ejemplo, si A es una
matriz de 3 por 4, devuelve el vector . La longitud de es .size(A)[3
4]szndims(A)
Si A es una tabla o un calendario, devuelve un vector de fila de dos
elementos que consiste en el número de filas y el número de variables
de [Link](A)
2.4. COMANDO PLOT
Este comando permite poder visualizar los gráficos de cada señal de audio.
2.4.1. Sintaxis
plot(X,Y)
plot(X,Y,LineSpec)
plot(X1,Y1,...,Xn,Yn)
plot(X1,Y1,LineSpec1,...,Xn,Yn,LineSpecn)
plot(Y)
plot(Y,LineSpec)
plot(___,Name,Value)
plot(ax,___)
h = plot(___)
pág. 12
2.5. COMANDO SOUND
convierte la matriz de datos de la señal a sonido.
2.5.1. Sintaxis
sound(y)
sound(y,Fs)
sound(y,Fs,nBits)
Donde:
sound(y): envía la señal de audio y al altavoz a la frecuencia de muestreo
predeterminada de 8192 hz.
sound(y,Fs): envía la señal de audio y al altavoz a la frecuencia de
muestreo Fs.
sound(y,Fs,nBits): Utiliza nBitsbits por muestra para señal de audio y.
3. DESARROLLO
Para iniciar el procesamiento de sonido se cargó el audio con el nombre [Link]
y a continuación se describe el proceso de funcionamiento del código.
Carga de archivo
pág. 13
1. Se inicia la lectura de la señal del audio aplicando el comando wavread.
[s Fs]=wavread('[Link]');
2. Con el siguiente comando se logra reproducir el contenido del audio
sound(s,Fs)
Al ejecutar estos dos comando en el modulo WORKSPACE se podrán
visualizar dos datos:
s: señal, este también se representa con la letra “y” el cual se visualiza en los
comandos.
Fs: frecuencia de muestreo
Además se puede visualizar el número de muestras:
Fs=44100
S=266364
Analizando esta tabla, se puede observar que la señal (s) tiene dos columnas (x2)
donde tiene dos canales: canal R (1) y canal L (2) que vendrían a ser izquierda y
derecha.
pág. 14
Obteniendo estos valores se procede a dividir las columnas para poder trabajar
con una señal.
canal_R=s(:,1);
canal_L=s(:,2);
Luego tenemos que obtener el tiempo de reproducción del audio, para ello se
utiliza la siguiente función el cual se divide la longitud de la señal entre la
frecuencia de muestreo
pág. 15
tiempo=size(s,1)/Fs;
Donde los valores:
1: significa obtener la longitud de las filas.
2: se utiliza para sacar la longitud de las columnas
Al ejecutar esta función se obtiene el siguiente valor.
Así se determina el tiempo de reproducción de nuestro audio
Para poder visualizar las señales ploteamos de la siguiente manera.
plot(s);
plot(canal_L);
plot(canal_R);
plot(s)
pág. 16
plot(canal_L)
plot(canal_R
pág. 17
Continuando, graficaremos en función del tiempo para hallar el longitud de x con
respecto al tiempo.
x=0:1/Fs:tiempo;
Esta función se interpreta de la siguiente forma: desde cero con paso de 1 entre la
frecuencia de muestreo hasta tiempo, el ejecutar el código arroja el siguiente valor
Ploteamos esta función pero con respecto al canal_L
plot(x,canal_l);
Como el valor de x es un valor más que la muestra de nuestra señal en nuestra
función de ploteo iniciamos desde 2 hasta el final (end).
plot(x(2:end),canal_L)
Como se muestra en la figura se aprecia que hay un espacio vacío (6-7), para ello
agregamos la función límites para que nos muestra la gráfica desde 0 hasta el
tiempo final de nuestro audio como en la siguiente grafica.
xlim([0 tiempo])
pág. 18
4. APLICACIONES
Al obtener las gráficas del audio y la reproducción de este, se procede a
aplicar las siguientes modificaciones que se pueden realizar al audio “dos
wav”.
4.1. Recorte del audio
Con el siguiente código se puede recortar el audio, para corroborar se
utilizan las funciones de audioplayer y ploteo, que nos permiten visualizar y
escuchar el audio.
s_r=canal_L(1:100000);
player=audioplayer(s_r,Fs);
play(player);
plot(s_r)
pág. 19
S_r: señal de recorte
En este caso se opto el recorte hasta la longitu de muestreo de 100000 con
paso 1 del canal_L.
4.2. Inversión de la señal
Con este código se puede invertir el audio que genera un sonido peculiar
dependiendo del audio introducido.
s_inv=canal_R(end:-1:1); %inversión de la señal en el
canal_R desde el final(end) con paso de -1 hasta 1.
player=audioplayer(s_inv,Fs); %audio invertido
play(player); %reproducción del audio invertido
plot(s_inv); %muestra de la gráfica del audio
invertido
pág. 20
4.3. Control de la velocidad de reproducción del audio
Este código permite controlar la velocidad de reproducción del audio, al
modificar el valor de paso a paso del canal.
%diezmacion
s_di=canal_L([Link]nd); %diezmacion de la señal en el
canal_L desde el inicio con paso de 1 hasta el final(end).
player=audioplayer(s_di,Fs); %audio diezmado
play(player); %reproduccion del audio
plot(s_di); %muestra de la grafica
pág. 21
5. CODIGO COMPLETO
%lectura de señal de audio
[s Fs]=wavread('[Link]');
%reproduccion de audio
sound(s,Fs)
%separacion de columnas
canal_R=s(:,1);
canal_L=s(:,2);
%tiempo de la señal
tiempo=size(s,1)/Fs;
%ploteo de la señal
plot(s);
plot(canal_L);
plot(canal_R);
x=0:1/Fs:tiempo;
plot(x,canal_l);
plot(x(2:end),canal_L)
xlim([0 tiempo])
%recorte de señal
s_r=canal_L(1:100000);
player=audioplayer(s_r,Fs);
play(player);
plot(s_r);
%inversion de la señal
s_inv=canal_R(end:-1:1); %inversion de la señal en el canal_R
desde el final(end) con paso de -1 hasta 1.
player=audioplayer(s_inv,Fs); %audio invertido
play(player); %reproduccion del audio invertido
plot(s_inv); %muestra de la grafica del audio invertido
pág. 22
%diezmacion
s_di=canal_L([Link]nd); %diezmacion de la señal en el
canal_L desde el inicio con paso de 1 hasta el final(end).
player=audioplayer(s_di,Fs); %audio diezmado
play(player); %reproduccion del audio
plot(s_di); %muestra de la grafica
pág. 23
Bibliografía
Zanuy, M. F. (2000). Tratamiento digital de voz e imagen y aplicación a la
multimedia. Marcombo.
Oppenheim, A. V., Willsky, A. S., & Nawab, S. H. (1998). Señales y
sistemas. Pearson Educación.
MATLAB.(2018,octubre).Manual help.
[Link]
Moya, J. P. A. (2011). Procesamiento digital de señales.
pág. 24