Ejemplo de convolución: reverberación y eco

De ISAwiki
(Diferencia entre revisiones)
m (Ejemplo de Matlab)
m
 
(No se muestran 6 ediciones intermedias realizadas por un usuario)
Línea 1: Línea 1:
 
[[Category:Ejemplos]]
 
[[Category:Ejemplos]]
 +
[[Category:Matlab]]
  
 +
 +
==== Descripción del experimento ====
 
A través de este ejemplo se ilustra el concepto de convolución. En el ejemplo se emula el efecto de reverberación y eco que se produce cuando una persona habla en estancias con acústicas típicas.  
 
A través de este ejemplo se ilustra el concepto de convolución. En el ejemplo se emula el efecto de reverberación y eco que se produce cuando una persona habla en estancias con acústicas típicas.  
  
Línea 9: Línea 12:
 
En este caso:
 
En este caso:
  
* u(t) = voz del hablante
+
* <math>u(t)</math> = voz del hablante
* h(t) = respuesta impulsional de la estancia. Por ejemplo, puede obtenerse mediante la grabación de una regla dando un golpe seco en una mesa
+
* <math>h(t)</math> = respuesta impulsional de la estancia. Por ejemplo, puede obtenerse mediante la grabación de una regla dando un golpe seco en una mesa
* y(t) = sonido resultante de la distorsión producida por la estancia.
+
* <math>y(t)</math> = sonido resultante de la distorsión producida por la estancia.
  
== Ejemplo de Matlab ==
+
==== Bibliografía ====
 +
* En el Franklin, sección 3.1.1, pp. 74-75, puede encontrarse la base teórica (superposición y respuesta por convolución) en la que se apoya este ejemplo.
 +
 
 +
==== Ejemplo de Matlab ====
 
Descárgate los siguientes archivos en el directorio de trabajo de matlab, o en uno accesible desde el path de matlab:
 
Descárgate los siguientes archivos en el directorio de trabajo de matlab, o en uno accesible desde el path de matlab:
* [[media:ADS.wav | registro de voz hablada]]
+
* [[media:ADS.wav | archivo WAV de voz hablada]]
* [[media:Golpe.wav | registro de sonido cuando se da un golpe seco en una estancia con reverberación]]
+
* [[media:Golpe.wav | archivo WAV de un golpe seco en una estancia con reverberación]]
* [[media:Golpe_eco.wav | registro de sonido cuando se da un golpe seco en una estancia con reverberación y eco]]
+
* [[media:Golpe_eco.wav | archivo WAV de un golpe seco en una estancia con reverberación y eco]]
  
  
Línea 26: Línea 32:
  
 
<pre>
 
<pre>
 +
% EJEMPLO DE CONVOLUCIÓN: SIMULACIÓN DE LOS EFECTOS DE REVERBERACIÓN Y ECO
 +
%
 +
%
 +
% Análisis Dinámico de Sistemas (Teleco)
 +
% EPS de Ingeniería de Gijón
 +
% Área de Ingeniería de Sistemas y Automática
 +
% Universidad de Oviedo
 +
 
clear;
 
clear;
 
close all;
 
close all;
Línea 38: Línea 52:
 
disp('Cargando golpe_eco.wav...');
 
disp('Cargando golpe_eco.wav...');
 
[golpe_eco,fs] = wavread('golpe_eco.wav');
 
[golpe_eco,fs] = wavread('golpe_eco.wav');
 +
 +
ts = inv(fs);
 +
t_u = 0:ts:ts*(length(u)-1);
 +
t_golpe = 0:ts:ts*(length(golpe)-1);
 +
t_golpe_eco = 0:ts:ts*(length(golpe_eco)-1);
  
  
Línea 44: Línea 63:
 
disp('Calculando convolución de voz con golpe_eco ...');
 
disp('Calculando convolución de voz con golpe_eco ...');
 
y_golpe_eco = conv(u,golpe_eco);
 
y_golpe_eco = conv(u,golpe_eco);
 +
figure(1);
 +
subplot(311);
 +
plot(t_golpe,golpe); title('Sonido de respuesta impulsional de estancia con reverberación');
 +
subplot(312);
 +
plot(t_golpe_eco,golpe_eco); title('Sonido de respuesta impulsional de estancia con reverberación y eco');
 +
subplot(313);
 +
plot(t_u,u); title('Sonido de voz hablada');
 +
 +
 
disp('Listo...');
 
disp('Listo...');
  

Última revisión de 08:51 5 abr 2008


[editar] Descripción del experimento

A través de este ejemplo se ilustra el concepto de convolución. En el ejemplo se emula el efecto de reverberación y eco que se produce cuando una persona habla en estancias con acústicas típicas.

La estancia es un sistema dinámico que transforma la voz original, tal como sale del hablante, produciendo una distorsión (eco, reverberación, etc.) como resultado de la geometría y naturaleza de las superficies. Esta dinámica es muy compleja, pero es fácilmente reproducible si registramos una respuesta impulsional de la estancia. La respuesta impulsional puede verse como la firma o el "ADN" del sistema: tiene toda la información sobre su comportamiento dinámico. Si el sistema es considerado lineal e invariante (sistema LTI), entonces puede demostrarse que su respuesta ante una señal cualquiera puede hallarse mediante convolución con la respuesta impulsional

y(t) = \int^{\infty}_{-\infty}u(\tau) h(t-\tau) d\tau

En este caso:

  • u(t) = voz del hablante
  • h(t) = respuesta impulsional de la estancia. Por ejemplo, puede obtenerse mediante la grabación de una regla dando un golpe seco en una mesa
  • y(t) = sonido resultante de la distorsión producida por la estancia.

[editar] Bibliografía

  • En el Franklin, sección 3.1.1, pp. 74-75, puede encontrarse la base teórica (superposición y respuesta por convolución) en la que se apoya este ejemplo.

[editar] Ejemplo de Matlab

Descárgate los siguientes archivos en el directorio de trabajo de matlab, o en uno accesible desde el path de matlab:


Copia y pega el siguiente código directamente en la línea de comandos, o en un script. Puedes jugar creando otros efectos especiales. Por ejemplo:

  • Registrando tú mismo una respuesta impulsional en otra estancia
  • Creando una respuesta impulsional de forma artificial con cualquier programa de edición de audio o con el mismo matlab, modificando directamente el vector de la señal de impulso (vectores golpe y golpe_eco en el ejemplo).


% EJEMPLO DE CONVOLUCIÓN: SIMULACIÓN DE LOS EFECTOS DE REVERBERACIÓN Y ECO
%
%
% Análisis Dinámico de Sistemas (Teleco)
% EPS de Ingeniería de Gijón
% Área de Ingeniería de Sistemas y Automática
% Universidad de Oviedo

clear;
close all;
clc;

disp('Cargando ADS.wav...');
[u,fs] = wavread('ADS.wav');

disp('Cargando golpe.wav...');
[golpe,fs] = wavread('golpe.wav');

disp('Cargando golpe_eco.wav...');
[golpe_eco,fs] = wavread('golpe_eco.wav');

ts = inv(fs);
t_u = 0:ts:ts*(length(u)-1);
t_golpe = 0:ts:ts*(length(golpe)-1);
t_golpe_eco = 0:ts:ts*(length(golpe_eco)-1);


disp('Calculando convolución de voz con golpe ...');
y_golpe = conv(u,golpe);
disp('Calculando convolución de voz con golpe_eco ...');
y_golpe_eco = conv(u,golpe_eco);
figure(1);
subplot(311);
plot(t_golpe,golpe); title('Sonido de respuesta impulsional de estancia con reverberación');
subplot(312);
plot(t_golpe_eco,golpe_eco); title('Sonido de respuesta impulsional de estancia con reverberación y eco');
subplot(313);
plot(t_u,u); title('Sonido de voz hablada');


disp('Listo...');


disp('Sonido del impulso. Pulsar tecla para oirlo...');
pause;
soundsc(golpe,fs);

disp('sonido del impulso con eco. Pulsar tecla para oirlo...');
pause;
soundsc(golpe_eco,fs);


disp('voz original. Pulsar tecla para oirlo...');
pause;
soundsc(u,fs);


disp('voz despues de convolución con impulso. Pulsar tecla para oirlo...');
pause;
soundsc(y_golpe,fs);

disp('voz despues de convolución con impulso de eco. Pulsar tecla para oirlo...');
pause;
soundsc(y_golpe_eco,fs);

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Tipos de páginas
Bloques temáticos
Herramientas