Ejemplo de convolución: reverberación y eco

De ISAwiki


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.

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:


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