Sunteți pe pagina 1din 6

Prctica 3:

Implementacin de efectos acsticos


3.0.- Objetivos
Al finalizar esta prctica, el alumno debe ser capaz de:
Grabar una seal de voz y procesarla en Matlab.
Aadir un eco, con diferente amplitud y retardo a una seal de voz. Representar y
reproducir, la nueva seal de audio. Explicar el efecto de cada parmetro en la seal
con eco.
Aadir reverberacin, con diferentes amplitudes, retardos, nmero de ecosa una
seal de voz. Representar y reproducir, la nueva seal de audio. Explicar el efecto
de cada parmetro en la seal con reverberacin.
Aadir un efecto flanging a una seal de audio. Representar y reproducir, la nueva
seal de audio. Explicar el efecto de cada parmetro en la seal con flanging.

3.1.- Introduccin
En esta tercera prctica, empezaremos a tratar sistemas o filtros. Estrictamente
hablando, un filtro es un sistema diseado para eliminar o modificar componentes de la
seal. Hablaremos de los filtros FIR (Finite Impulse Response). Estos filtros son sistemas
para los cuales cada salida es un promedio de un nmero finito de muestras de la seal de
entrada.
La expresin general de un filtro FIR es de la forma:
M

y[n] = bk x[n k ]
k =0

Para computar la salida en el instante n, el filtro emplea las M+1 muestras


anteriores multiplicndolas por los coeficientes bk. Un filtro FIR est completamente
determinado por dichos coeficientes.
El orden del filtro es el nmero de coeficientes-1.
Los efectos de audio que vamos a tratar son todos filtros FIR, de la forma
anteriormente indicada.

1.1

3.2.- Retrasos y eco


Quiz el ms bsico de todos los efectos sea el retraso temporal. Este efecto se
utilizar luego como base para construir otros efectos ms complejos.
Un retraso en el tiempo se puede expresar mediante la siguiente ecuacin en
diferencias:
y[n] = x[n D ]

donde D es el retardo en nmero de muestras que experimenta la seal.


As, un eco, que no es mas que la suma a una seal de la misma seal atenuada y
retardada en el tiempo, quedara representado por:
y[n] = x[n] + ax[n D ]

donde a < 1 y representa las prdidas debidas a las reflexiones y durante la


transmisin.
El diagrama de bloques aparece representado en la Figura 1.

x[n]

y[n]
D
a

Retardo

Figura 1: Diagrama de bloques de un sistema con eco.


Escribir una funcin en Matlab que genere un eco de la seal de entrada. Sus
parmetros de entrada sern la seal de entrada, el retardo y el valor de la atenuacin, a, y
como salida tendr la seal generada.
Recordar que para leer la seal de entrada se debe utilizar el comando
[y,fs,nbits]=wavread('nombre_archivo.wav')
donde y ser el vector con los datos, fs es la frecuencia de muestreo que se utiliz
cuando se gener el fichero '.wav' y nbits es el nmero de bits con que los datos fueron
almacenados. Para ms detalles utilizar la ayuda de Matlab. fs es la frecuencia a utilizar
cuando reproducimos el sonido utilizando sound.
Comprobar que existe un valor mnimo del retardo introducido para que este
comience a percibirse. Utilizando Fs calcular el tiempo al que corresponde este retardo
Comprobar el efecto del parmetro a, variando su valor.
NOTA: Tener en cuenta que la seal retardada tiene una duracin D muestras
mayor que la original.

1.2

3.3.- Reverberacin
Si un nmero infinito de ecos sucesivos es sumando, obtenemos una reverberacin
similar a la que experimentan las habitaciones.
La reverberacin es el resultado de las mltiples reflexiones de un sonido, por
ejemplo en una habitacin. Desde cualquier fuente de sonido existe un camino directo a
nuestros odos. Adems, las ondas de sonido pueden tomar un camino ms largo,
reflejndose en las paredes, suelo y techos de la habitacin antes de llegar a nuestros odos.
Una onda reflejada llegar ms tarde que la onda directa, ya que la distancia que recorre es
ms larga, y es as mismo ms dbil, ya que cada rebote supone una prdida de energa.
La seal de salida puede calcularse recursivamente como:
y[n] = x[n] + a y[n D ]

El valor inicial de y[n] es x[n] y el nmero de iteraciones ser el nmero de ecos


tenidos en cuenta. As por ejemplo, una iteracin nos genera un eco como el que hemos
estudiado en el ejercicio anterior.

x[n]

y[n]
D
a

Figura 2: Diagrama de Bloques de un reverberador.


Escribir una funcin en Matlab que genere un efecto de reverberacin de la seal de
entrada. Sus parmetros de entrada sern la seal de entrada, el retardo, el valor de la
atenuacin, a, y el nmero de ecos tenidos en cuenta. Como salida tendr la seal
generada.
NOTA: Tener en cuenta que cada iteracin aumenta el tamao de la seal en D
muestras.

3.4.- Flanging
El efecto de flanging se puede crear fcilmente haciendo que el retardo vare
peridicamente usando para ello una onda sinusoidal de baja frecuencia.
Sin embargo la forma ms natural de interpretar el flanging pasa por entenderlo
como si fuese un simple eco. Es decir, a cada muestra de la seal original se le suma
otra muestra de la misma seal pero atenuada y desfasada con respecto a la muestra
original.
Adems el flanging aade la peculiaridad de que este desfase no es fijo, ni
aleatorio, sino que se trata de un desfase que viene marcado por una funcin sinusoidal.
1.3

De ah que el efecto final del flanging sea el de un eco ms o menos curioso con
reverberaciones que parecen no ajustarse a un patrn determinado, aunque ahora ya
sepamos de dnde proceden.
El efecto de flanging se puede resumir en esta frmula:
y[n] = x[n] + ax[n d (n )]

Donde el retardo d[n] realmente vara de igual modo que una sinusoide entre los
lmites 0 <= d[n] <= D, segn cualquiera de las siguientes frmulas (equivalentes);
d[n]= D/2 * ( 1- cos(2*pi*Fd*n) )

d[n]= abs( round ( D cos(2*pi*Fd*n) ) )

Donde Fd representa una frecuencia baja ( tpicamente 1Khz) en unidades de


ciclos/muestra.
El diagrama de flujo que explica conceptualmente el efecto del flanging es el
siguiente:

X[n]

Y[n]

Z-d
a
Figura 3: Diagrama de bloques para flanging.
El siguiente dibujo ilustra de forma clara como se podra conseguir un flanging en
caso de disponer de una pared mvil:

1.4

Seal
ecos

D
Seal con flanging
Figura 4: Flanging con una pared mvil.
Al final la frmula del flanging quedar as;
y(i)= x(i)+a*x(i-delay(i));

donde el delay se saca de la seal


sinusoidal.

Es muy importante que el argumento de la seal eco: [i-delay(i)], tome un valor


siempre positivo. Para ello la seal final se construir en dos pasos:
1.

Hacemos que en las D primeras muestras la seal original sea la misma.


for i=1:1:D+1
y(i)=x(i);
end;

2.

En las muestras posteriores ( hasta la ltima muestra de la seal de entrada)


a la seal original se le aade el eco. Se trata de disear este eco, sabiendo
que su amplitud no puede ser mayor que D y que su frecuencia viene dada
en ciclos por muestra.
for i=D+1:1:xlen
delay(i) = ---------------- ?
y(i)= x(i)+a*x(i-delay(i));

1.5

end;
Una posible estructura para comenzar el programa sera esta:
[x,fs,n]=wavread('dt.wav');%cargamos seal de audio
xlen=length(x)%nmero de muestras en la seal original
%constantes--------------------------------------a=/****/; % atenuacin de la seal de eco
D=/****/; % numero de muestras en el retardo
y=zeros(size(x));
delay = zeros(size(x));
cycle=/****/;
% cosntruccin de la seal ----------------------for i=1:1:D+1
/ ******************** /
end;
for i=D+1:1:xlen
delay(i) = / ******************************** /
y(i)= x(i)+a*x(i-delay(i));
end;
sound(y,fs);
Variar el valor del parmetro a. Qu observas?, Qu efecto tiene esta constante
sobre el la seal resultante?
Variar el valor del parmetro D. Qu cambios observas?, qu valores de D
hacen que el eco se haga notar antes?
Quiz esta figura te ayude a entenderlo mejor.

..

xlen

( xlen - D )
Figura 5: Vector de salida en efecto flanging.

1.6

S-ar putea să vă placă și