% dft_correlacion.m
% DSP - eMe, 2010 - martin rocamora
% ejemplo de calculo de la dft por correlacion

close all
clear all

%% funciones base
N=16;
fs=1;

n = 0:N-1; 
hop = 0.01;
t = 0:hop:N; 
k = n(1:N/2+1);
fk = k*fs/N;
wk = 2*pi*fk;
D = N/2+1;

for i=1:D
  subplot(D,2,2*i-1);
  plot(t,cos(wk(i)*t), 'k')
  axis([0,t(end),-1,1]);
  hold on;
  plot(n,cos(wk(i)*n),'*k')
  if i==1
    title('Coseno');
  end;
  ylabel(sprintf('k=%d',k(i)));
  if i==N
    xlabel('Tiempo (muestras)');
  end;
  subplot(D,2,2*i);
  plot(t,sin(wk(i)*t),'k')
  axis([0,t(end),-1,1]);
  hold on;
  plot(n,sin(wk(i)*n),'*k')
  ylabel(sprintf('k=%d',k(i)));
  if i==1
    title('Seno');
  end;
  if i==N
    xlabel('Tiempo (muestras)');
  end;
end

print -depsc funciones_base_dft.eps

%% calculo de la DFT por correlacion

% seniales
i1 = 3;
s1 = cos(wk(i1)*t);
i21 = 2;
i22 = 5;
i23 = 7;
s2 = cos(wk(i21)*t) + sin(wk(i22)*t) + cos(wk(i23)*t);
s2 = s2/max(abs(s2));

% elemento de la base (coincide con s1)
b1 = cos(wk(i1)*t);

% seniales de correlacion (producto elemento a elemento)
c1 = b1.*s1;
c2 = b1.*s2;

figure
subplot(211)
plot(t, s1, 'k')
title(['Senial 1: cos(2\pi ' num2str(k(i1)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,s1(1:1/hop:end-1),'*k')
xlabel('Tiempo (muestras)');
subplot(212)
plot(t, s2, 'k')
title(['Senial 2: cos(2\pi ' num2str(k(i21)) ' t/N) + sin(2\pi ' num2str(k(i22)) ' t/N) + cos(2\pi ' num2str(k(i23)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,s2(1:1/hop:end-1),'*k')
xlabel('Tiempo (muestras)');

figure
subplot(321)
plot(t, s1, 'k')
title(['senial 1: cos(2\pi ' num2str(k(i1)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,s1(1:1/hop:end-1),'*k')
subplot(322)
plot(t, s2, 'k')
title(['senial 2: cos(2\pi ' num2str(k(i21)) ' t/N) + sin(2\pi ' num2str(k(i22)) ' t/N) + cos(2\pi ' num2str(k(i23)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,s2(1:1/hop:end-1),'*k')

subplot(323)
plot(t, b1, 'k')
title(['base: cos(2\pi ' num2str(k(i1)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,b1(1:1/hop:end-1),'*k')
subplot(324)
plot(t, b1, 'k')
title(['base: cos(2\pi ' num2str(k(i1)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,b1(1:1/hop:end-1),'*k')

subplot(325)
plot(t, c1, 'k')
title(['correlacion'])
axis([0,t(end),-1,1]);
hold on;
plot(n,c1(1:1/hop:end-1),'*k')
xlabel('Tiempo (muestras)');

subplot(326)
plot(t, c2, 'k')
title(['correlacion'])
axis([0,t(end),-1,1]);
hold on;
plot(n,c2(1:1/hop:end-1),'*k')
xlabel('Tiempo (muestras)');

print -depsc calculo_dft_correlacion.eps

pause

% se suman las muestras del producto correlacion
disp('correlacion para s1: ')
sum(c1(1:1/hop:end-1))
disp('correlacion para s2: ')
sum(c2(1:1/hop:end-1))


pause

%% correlacion de dos bases

i1 = 3;
i2 = 4;
% elemento de la base (coincide con s1)
b1 = cos(wk(i1)*t);
b2 = cos(wk(i2)*t);

% seniales de correlacion (producto elemento a elemento)
c3 = b1.*b2;

figure
subplot(311)
plot(t, b1, 'k')
title(['base: cos(2\pi ' num2str(k(i1)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,b1(1:1/hop:end-1),'*k')
subplot(312)
plot(t, b2, 'k')
title(['base: cos(2\pi ' num2str(k(i2)) ' t/N)'])
axis([0,t(end),-1,1]);
hold on;
plot(n,b2(1:1/hop:end-1),'*k')
subplot(313)
plot(t, c3, 'k')
title(['correlacion'])
axis([0,t(end),-1,1]);
hold on;
plot(n,c3(1:1/hop:end-1),'*k')
xlabel('Tiempo (muestras)');

disp('correlacion entre b1 y b2: ')
sum(c3(1:1/hop:end-1))

print -depsc correlacion_entre_bases.eps
