%% =================================================================
%% PROPIEDAD DE LA TRANSFORMADA DE HILBERT
%%
%% En este ejercicio se muestra mediante un ejemplo que la 
%% transformada de Hilbert de la parte real de la transformada de 
%% Fourier de una secuencia real a_t es igual a la parte imaginaria 
%% de la transformada de Fourier de la misma secuencia:
%%
%% HT{Re[A(w)]} = Im[A(w)]
%%
%% !OBS: el directorio debe contener la ondícula "wavelet".
%% =================================================================

clear all; close;

% -----------------------
% Cargo el dato (wavelet)
% -----------------------

load wavelet ;
a = wavelet ;

% Hago zero padding para calcular mejor la TDF

N    = 64 ;
a(N) = 0 ;

% Calculo la transformada de Fourier de la ondícula cargada

A = fft(a) ;

% Tomo su parte real e imaginaria

reA = real(A);
imA = imag(A);

% -----------------------------------------
% Calculo la transformada de Hilbert de reA
% -----------------------------------------

% Calculo la transformada de Fourier de reA:

REA = fft(reA);

% Calculo la tranformada de Hilbert de reA en el dominio de REA

dw = 2*pi/N;
for k = 1:N
  wk = dw*(k-1) ;
  if wk == 0                  % w = 0
    HREA(k) = 0 ;
  elseif wk < pi              % w > 0
    HREA(k) = REA(k)*(+1i) ;
  else                        % w > pi, o sea w < 0
    HREA(k) = REA(k)*(-1i) ;
  endif
end

% Antistransformo por Fourier para obtener la trasformadada de 
% Hilbert de reA en el mismo dominio que reA

hreA = real(ifft(HREA)) ;

% --------
% GRAFICOS
%---------

% Grafico las secuencia de entrada

subplot(2,1,1);
plot(a,';Entrada a_t;b-o');

% Grafico hreA e imA para corroborar que son iguales

subplot(2,1,2)
plot(hreA,';HT[Re(A(w))];g-'); hold on ;
plot(imA,';Im(A(w));ro'); hold off ;

% ------
% Salida
% ------

% Guardo el gráfico en un postscript

print('prop_hilbert.eps','-depsc')
