% TEMPconv.m
% DSP - eMe, 2010 - martin rocamora
% ejemplo de calculo de convolucion
close all
clear all

% entrada de audio (mono)
[input,fs,nbits] = wavread('ohwhere_22050.wav');

% respuesta al impulso de sala
[h fs_h] = wavread('FOLIP-12.wav');
% izquierda y derecha
h_l = h(:,1);
h_r = h(:,2);

% largo de cada senial
largo_input = length(input);  
largo_h     = length(h_l);

% largo de senial resultante
K = largo_input + largo_h - 1;

% senial de salida
output_l = zeros(K, 1);
output_r = zeros(K, 1);

tic
% convolucion
for k = 1:K
     j = max(1,k+1-largo_h): min(k,largo_input);
     output_l(k) = sum(input(j).*h_l(k+1-j));
     output_r(k) = sum(input(j).*h_r(k+1-j));
end
toc

% normalizar amplitud (a la misma que la entrada)
max_amp = max(max(abs(output_l)), max(abs(output_r)));
max_input = max(abs(input));
output_l = output_l * max_input / max_amp;
output_r = output_r * max_input / max_amp;

% guardar salida
output = [output_l output_r];          
wavwrite(output, fs, nbits,'TEMPconv');


%% %%%%%%%% GRAFICAS %%%%%%%%%

t = (0:(K-1))/fs;

figure
subplot(311)
plot(t(1:largo_input), input, 'k')
ylabel('amplitud')
title('Senial de entrada y respuestas al impulso')
subplot(312)
plot(t(1:largo_h), h_l, 'k')
ylabel('amplitud')
subplot(313)
plot(t(1:largo_h), h_r, 'k')
ylabel('amplitud')
xlabel('tiempo (s)')

figure
subplot(211)
plot(t, output_l, 'k')
ylabel('amplitud')
title('Seniales de salida')
subplot(212)
plot(t, output_r, 'k')
ylabel('amplitud')
xlabel('tiempo (s)')



