Practica 2: MATLAB
http://www.ocw.espol.edu.ec/facultad-de-ingenieria-en-electricidad-ycomputacion/procesamiento-de-audio-y-video-1/Practica%202-%20MATLAB.html Utilizando los sonidos adjuntados, o cualquier cu alquier otros en formatos WAV o AU. Desarrollar las siguientes práctica en MATLAB:
Leer archivos WAV
Cargar el archivo road.wa. utilizando el siguiente comando: [road,fs]=wavread('road.wav'); Separar los canales del sonido estereo de la siguiente forma: left=road(:,1); right=road(:,2); Dibuje la onda: plot(road);
Primer procesamiento
Invertir el sonido usando el comando co mando flipup road_rev=flipud(road); escuchar el resultado: soundsc(road_rev,fs);
Efecto de ECO para el canal izquierdo
Primero creamos un nuevo vector del mismo tamaño que el canal izquierdo leftout = left; Especificamos el monto del retardo, especificado en la variable N que contiene el retardo en muestras, el retarno en tiempo t iempo será N/fs segundos
N=10000; Luego creamos el eco, mediante el siguiente código: for n=N+1:length(left) leftout(n)=left(n)+left(n-N); end Escuchamos el efecto de eco soundsc(leftout,fs);
Efecto de ECO con un sonido estéreo
Creamos un vector del mimso tamaño de road que va a contener el eco en estéreo out = road; Definimos el retardo N=10000; Creamos el eco estéreo for n=N+1:length(road) out(n,1)=road(n,1)+road(n-N,2); % eco de derecha a izquierda out(n,2)=road(n,2)+road(n-N,1); % eco de izquierda a derecha end Escuchamos el eco soundsc(out,fs);
Efecto de ECO recursivo
Vamos a elaborar una variacion de l tema anterior, sumamos la misma señal consigo mismo por 1000 muestras pero con una amplitud menor (0.8). Tome en cuenta que para el sonido
que vamos a utilizar en particular las muestras tienen un espacio de T=1/8192 segundos (fs2=8192 muestras por segundo). [lunch,fs2]=auread('lunch.au'); out=lunch; % nuevo arreglo N=1000; % monto del retardo N/8192 segundos for n=N+1:length(lunch) out(n)=.8*out(n-N)+lunch(n); % eco recursivo, ya que le sumo la misma onda end soundsc(out,fs2) % escuchamos un eco recursivo Pre-eco
[road,fs]=wavread('road.wav'); left=road(:,1); leftout = left; N=20000; for n=1:length(left)-N leftout(n)=0.5*left(n)+left(n+N); % Para que se escuche el efecto del eco end Control de tono digital
El siguiente programa o filtro digital, es diseñado para suavizar los componentes de altas frecuencias de la señal (treble). Este retiene los compone ntes de bajas frecuencias (bass). Aplicando este filtro digital tiene el mismo efecto de bajar e l control de treble de un radio. El diseño no es tan obvio. [hootie,fs]=wavread('hootie.wav'); % cargamos el so nido out=hootie; for n=2:length(hootie) out(n,1)=.9*out(n-1,1)+hootie(n,1); % izquierdo out(n,2)=.9*out(n-1,2)+hootie(n,2); % derecho
end Comparemos ambos sonidos, escuchamos el original: soundsc(hootie,fs); Escuchamos el sonido con e l filtro aplicado: sounds(out,fs); Este filtro también es conocido como filtro pasa bajo. Un pequeño cambio en el filtro digital, permite mejorar o estimular las altas frecuencias y suporimir las bajas. out=hootie; for n=2:length(hootie) out(n,1)=hootie(n,1)-hootie(n-1,1); % izquierdo out(n,2)=hootie(n,2)-hootie(n-1,2); % derecho end soundsc(out,fs) % filtro pasa alto